【FFmpeg】フォルダ内の複数の ts ファイル(動画ファイル)を、コマンド一発で、flac や wav に変換する。
この記事は何?
フォルダ内にある複数のファイルをコマンド一発で、flac や wav に変換する方法です。
今回は、ts ファイルを一括で変換します。
例えば、「一括で、flac に変換」の場合、以下のキャプチャのようなイメージです。
コマンド実行前
*コマンド実行後 flac ファイルが生成される。*一括で
技術的な要素
技術的な要素としては、以下があります。
- シェルスクリプトで複数のファイルに対して、for 文で同じ処理を行う
- FFmpeg でのメディアの変換
結論
最終的なコマンドを先に載せます。
一括でflacに変換。
for f in *.ts; do ffmpeg -i "$f" -vn -acodec flac -f flac "${f%.ts}.flac"; done
一括でwavに変換。
※ サンプルレート 48.0kHz、サンプルビット 16bit の wav ファイルに変換することを想定。
for f in *.ts; do ffmpeg -i "$f" -vn -acodec copy -ac 2 -ar 48000 -acodec pcm_s16le "${f%.ts}.wav"; done
一括でaiffに変換。
for f in *.ts; do ffmpeg -i "$f" -vn -f aiff "${f%.ts}.aiff"; done
一括で wav を aiff に変換。
for f in *.wav; do ffmpeg -i "$f" -vn -write_id3v2 true -f aiff "${f%.wav}.aiff"; done
for f in *.wav
ffmpeg -i "$f" -vn -write_id3v2 true -f aiff (basename -s .wav $f).aiff
end
参考
-write_id3v2 true
でアートワーク画像の追加を可能にする。
コマンド ffmpeg -h muxer=aiff
のヘルプを参照。
解説
シェルスクリプトの for 文
for 変数 in 値リスト
do
処理
done
コードの引用:
上記の構文で、「値のリスト」の個々の対象に対して、「処理」を実行できます。
また、for f in *.ts;
で、 *.ts
という書き方は、上部メッセージ欄の Qiita 記事で解説されていた方法です。
これは、コマンドを実行したディレクトリの、*.ts
というパターンのファイルのリストという意味です。
具体的には、aaa.ts
、bbb.ts
、ccc.ts
などの個別の TS ファイルのリストです。
FFmpeg での変換。
hoge.ts
というファイルを変換するとします。
ts ファイルを flac に変換
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 に変換
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 に変換)
シェルスクリプトの正規表現
"${f%.ts}.flac"
や、"${f%.ts}.wav"
の部分はシェルスクリプトの正規表現を使っています。
解説は、上部で紹介した Qiita 記事 「ffmpeg でフォルダ内の動画を一括変換する」の繰り返しになりますので、こちらをご参照いただければ幸いです。
-
TS ファイルについて https://aprico-media.com/posts/4893 ↩︎
-
ffmpeg Documentation https://ffmpeg.org/ffmpeg.html ↩︎
Discussion
助かりました!!!!