ビデオ変換ツールなどメディア処理ツールは有名なもののほとんどはGUIでコマンドを使わないものが多い.コマンドでもメディア処理を行うことが可能で,ffmpegが有名なパッケージの一種だろう.実際あまりにもできることが多すぎるのでここに書き残しておこうと思う.
ffmpegとは
ffmpegは,常に強力で多機能なオープンソースのソフトウェアで,ビデオやオーディオの録画,変換,ストリーミングを行うために広く使用されている.また,ほぼすべてのビデオやオービオフォーマットをサポートしており,多くのプラットフォーム(Windows、Mac、Linuxなど)で利用可能である.本記事ではffmpegの中でメディア処理についてフォーカスする.
ffmpegのインストール
公式サイトからインストーラーをダウンロード
https://ffmpeg.org/download.html
macなら
brew install ffmpeg
でインストールできる.
ファイルの状態を参照
ffmpeg -i input.mp4
ファイルの詳細な情報(ビットレート、コーデック、解像度など)を表示することができる.
このコマンドは input.mp4 のストリーム情報やメタデータなどを表示する.
メディア変換の各種コマンド
ここではさまざまなメディア変換コマンドを紹介する.
ビデオのフォーマット変換
ffmpeg -i input.mkv -codec:v libx264 -codec:a aac output.mp4
入力ファイル input.mkv を MP4 フォーマットに変換し,output.mp4として出力.ビデオコーデックとして libx264 を,オーディオコーデックとして aac を使用している.
オーディオファイルの変換
ffmpeg -i input.wav -codec:a libmp3lame output.mp3
WAVフォーマットをMP3フォーマットに変換する.
オーディオのビットレートを変更
ffmpeg -i input.mp3 -b:a 128k output.mp3
オーディオのビットレートを128 kbpsに設定する.
オーディオのノイズリダクション
ffmpeg -i noisy.mp3 -af "afftdn" cleaned.mp3
ノイズリダクションフィルター afftdn を使用して,noisy.mp3 のノイズを減らし,cleaned.mp3 として出力する.
オーディオのループ作成
ffmpeg -stream_loop 5 -i input.mp3 -c copy output.mp3
このコマンドは input.mp3 を5回繰り返して output.mp3 を作成する.
ビデオのリサイズ
ffmpeg -i input.mp4 -vf "scale=1280:720" output.mp4
input.mp4のサイズを1280x720に変更し,output.mp4を出力する.`-vf はビデオフィルターを指定するオプション.
ビデオからの静止画の抽出
ffmpeg -i video.mp4 -ss 00:00:10 -vframes 1 output.png
video.mp4 から10秒の位置のフレームを1枚抽出して output.png として保存する.
ビデオのトリミング
ffmpeg -i input.mp4 -ss 00:01:00 -to 00:02:00 -c copy output.mp4
このコマンドは input.mp4 の1分から2分の間の部分を output.mp4 として抽出する.-c copy はすべてのストリームを再エンコードせずにコピーする.
ビデオのフレームレート変更
ffmpeg -i input.mp4 -r 30 output.mp4
このコマンドは input.mp4 のフレームレートを30fpsに変更して,output.mp4 として保存する.
複数のビデオの結合
file 'part1.mp4'
file 'part2.mp4'
file 'part3.mp4'
同じディレクトリに各動画ファイル(part1.mp4,part2.mp4,part3.mp4)を設置し,同じディレクトリに上記のfile.txtを作成する
ffmpeg -f concat -safe 0 -i file.txt -c copy output.mp4
これで part1.mp4, part2.mp4, part3.mp4 が順番に結合され,output.mp4 として保存される.
動画の長さ
ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input_video.mp4
ffprove(FFmpeg プロジェクトの一部)を使えば動画の長さをとってこれる