ffmpeg で動画や音声ファイルを加工してみよう
ffmpeg、使ってますか?僕は使っています!コマンドラインで動画ファイルや音声ファイルなどを加工できるツールで、実は色々なソフトウェアで利用されています。有名なのは VLC、HandBrake、ffdshow、Blender、Audacity、OpenCV、ImageMagick、それから Chrome ブラウザのビデオ再生機能などでしょうか。
コマンドラインツールである ffmpeg を使えば、動画や音声を配信するウェブアプリの製作や、機械学習の学習データを用意する際などにバッチ処理が可能になります。今回は ffmpeg の 多すぎるオプション の中から、いくつか便利そうなコマンドを紹介していきます。
任意の動画ファイルを H.264 MP4 に変換する
色んな形式の動画ファイルを、とにかく H.264 形式に変換する方法。次のように -c:v
オプションでエンコードを指定できます。
$ ffmpeg -i ./input.mpeg -c:v libx264 ./output.mp4
もし NVIDIA のハードウェアエンコードが使える場合は、次のようなエンコードを指定してあげると、CPU ではなく GPU で処理できます。
$ ffmpeg -i ./input.mpeg -c:v h264_nvenc ./output.mp4
H.265 (HEVC) に変換したい場合は libx265
ないしは hevc_nvenc
という風に指定してあげれば OK です。インプットとなるファイルの情報をあれこれ指定せず、またエンコード後の設定もあれこれ書かずともよしなにやってくれるのはありがたいですね。
動画を 720p のサイズに変換し、29.97fps に統一する
動画のピクセルサイズやフレームレートも、指定しようと思えば指定できます。以下の例は動画の高さを 720px にし、縦横比は変更しない (= 16:9 の映像ソースなら 1280×720 の HD サイズになる)、というピクセルサイズの指定と、フレームレートを 29.97fps にする指定が入っています。
$ ffmpeg -i ./input.mpeg -c:v libx264 \
-vf scale=-1:720 \
-r 29.97 \
./output.mp4
動画の音声部分を圧縮する
次は動画ファイルの音声部分に絞って、圧縮方法を指定してみます。ここでは 192kbps、44,100Hz の MP3 形式に変換しています。
$ ffmpeg -i ./input.mpeg -c:v libx264 \
-c:a libmp3lame \
-b:a 192k \
-ar 44100 \
./output.mp4
WAV ファイルなどを MP3 ファイルに変換する
音声トラックの設定ができるということは、動画ファイルではなく音声ファイルをインプットとすることもできます。最後に WAV ファイルなどを変換する方法を紹介します。
$ ffmpeg -i ./input.wav -vn -ac 2 \
-acodec libmp3lame \
-ab 192k \
-ar 44100 \
-f mp3 \
./output.mp3
ffmpeg は同じオプションに異なる記法が存在していて分かりにくいところもありますが、使いこなせると出来ないことはないくらいに高機能なので、ぜひオプションを確認して活用してみてください。