🎸

【FFmpeg】フォルダ内の複数の ts ファイル(動画ファイル)を、コマンド一発で、flac や wav に変換する。

2022/04/11に公開
1

この記事は何?

フォルダ内にある複数のファイルをコマンド一発で、flac や wav に変換する方法です。
今回は、ts ファイルを一括で変換します。
例えば、「一括で、flac に変換」の場合、以下のキャプチャのようなイメージです。

before
コマンド実行前

after
*コマンド実行後 flac ファイルが生成される。*一括で

技術的な要素

技術的な要素としては、以下があります。

  • シェルスクリプトで複数のファイルに対して、for 文で同じ処理を行う
  • FFmpeg でのメディアの変換

結論

最終的なコマンドを先に載せます。

一括でflacに変換。

Terminal
for f in *.ts; do ffmpeg -i "$f" -vn -acodec flac -f flac "${f%.ts}.flac"; done

一括でwavに変換。

※ サンプルレート 48.0kHz、サンプルビット 16bit の wav ファイルに変換することを想定。

Terminal
for f in *.ts; do ffmpeg -i "$f" -vn -acodec copy -ac 2 -ar 48000 -acodec pcm_s16le "${f%.ts}.wav"; done

一括でaiffに変換。

Terminal
for f in *.ts; do ffmpeg -i "$f" -vn -f aiff "${f%.ts}.aiff"; done

一括で wav を aiff に変換。

Terminal
for f in *.wav; do ffmpeg -i "$f" -vn -write_id3v2 true -f aiff "${f%.wav}.aiff"; done
Fish Shell
for f in *.wav
  ffmpeg -i "$f" -vn -write_id3v2 true -f aiff (basename -s .wav $f).aiff
end

参考

https://superuser.com/questions/1493313/covert-flac-to-aiff-while-saving-tags-metadata

-write_id3v2 true でアートワーク画像の追加を可能にする。
コマンド ffmpeg -h muxer=aiff のヘルプを参照。

解説

シェルスクリプトの for 文

for 変数 in 値リスト
do
  処理
done

コードの引用:
https://shellscript.sunone.me/for.html

上記の構文で、「値のリスト」の個々の対象に対して、「処理」を実行できます。
また、for f in *.ts; で、 *.ts という書き方は、上部メッセージ欄の Qiita 記事で解説されていた方法です。

これは、コマンドを実行したディレクトリの、*.tsというパターンのファイルのリストという意味です。
具体的には、aaa.tsbbb.tsccc.ts などの個別の TS ファイルのリストです。

FFmpeg での変換。

hoge.ts というファイルを変換するとします。

ts ファイルを flac に変換

Terminal
ffmpeg -i "hoge.ts" -vn -acodec flac -f flac "hoge.flac"

FFmpeg のオプションについて解説します。

-vn

音声のみの出力です。

公式ドキュメント[2]

-vn (input/output)
As an output option, disables video recording i.e. automatic selection or mapping of any video stream. For full manual control see the -map option.
(大意: video部分を排除して出力する。 )

  • -acodec

音声コーデックの種類を指定します。
音声コーデックとは、変換する際に使用するプログラムです。
ここでの「変換」とは、エンコード(符号化)/デコード(復号化)を指します。
flac に変換する場合は、flac を指定します。

公式ドキュメント

-acodec codec (input/output)
Set the audio codec.

  • -f

出力するファイルのフォーマットを指定します。

-f fmt (input/output)
Force input or output file format. The format is normally auto detected for input files and guessed from the file extension for output files, so this option is not needed in most cases.

ts ファイルを wav に変換

Terminal
ffmpeg -i "hoge.ts" -vn -acodec copy -ac 2 -ar 48000 -acodec pcm_s16le "hoge.wav"

-ac は、ステレオかモノラルか。
-ar は、サンプルレートの指定です。

-ar 48000 は、サンプルレート 48.0kHz での変換という意味です。

上の例は、サンプルビット 16bit の wav ファイルに変換するために、-acodec pcm_s16le と、音声コーデック pcm_s16le を指定しました。
wav ファイルの音声コーデックは複数あり、複雑です。

下記の記事を参考にしました。

無償の FFmpeg で Wav ファイルの変換(Wav に変換)
http://www.xucker.jpn.org/pc/ffmpeg_wav.html

シェルスクリプトの正規表現

"${f%.ts}.flac" や、"${f%.ts}.wav" の部分はシェルスクリプトの正規表現を使っています。

解説は、上部で紹介した Qiita 記事 「ffmpeg でフォルダ内の動画を一括変換する」の繰り返しになりますので、こちらをご参照いただければ幸いです。

https://qiita.com/hosota9/items/29f845854db2e4eeebc0#拡張子を除いたファイル名を取得する

脚注
  1. TS ファイルについて https://aprico-media.com/posts/4893 ↩︎

  2. ffmpeg Documentation https://ffmpeg.org/ffmpeg.html ↩︎

Discussion