FFmpeg を用いた動画ファイルの再エンコードの例
動画ファイルは,コンテナ形式(AVI,MP4 等)とコーデック(映像・音声の圧縮方式)の組み合わせで構成されている.撮影機器や編集ソフトウェアが出力した形式のままでは,再生環境やアップロード先によって扱えない場合がある.そのため,元の画質・音質を保ったまま,別のコンテナ形式やコーデックに変換する再エンコードが必要となる.
FFmpeg はコマンドラインで動作する動画・音声処理ソフトウェアであり,Windows,macOS,Linux 等の主要な OS に対応する.GNU General Public License 等のオープンソースライセンスで配布されており,無償で利用できる.
インストール
- FFmpeg の公式ページを開く
- Windows の場合,コマンドプロンプトまたは PowerShell を開き,次のコマンドを実行する(Windows 標準のパッケージ管理ツール winget を使用したインストール方法)
winget install --id=Gyan.FFmpeg -e
- winget が利用できない環境では,公式ページの「Windows builds from gyan.dev」あるいは「Windows builds by BtbN」のリンク先から実行ファイル一式(zip 形式)をダウンロードし,任意のフォルダに展開したうえで,展開先の bin フォルダを環境変数 Path に追加する
動作確認
インストール後,コマンドプロンプトまたは PowerShell で次のコマンドを実行し,バージョン情報が表示されることを確認する.
ffmpeg -version
動画ファイルの確認
再エンコードを行う前に,FFmpeg に付属する解析ツール ffprobe を用いて,対象ファイルのコーデックや解像度等の情報を確認する.input.avi は対象ファイル名を表す.
ffprobe input.avi
処理の実行
コンテナ形式の変換のみを行い,映像・音声のコーデックを変更する必要がない場合は,再エンコードを行わずにストリームをそのまま複製する次のコマンドを用いる.この方法は再エンコードを伴わないため,画質・音質の劣化が生じない.input.avi は変換元のファイル名,output.mp4 は出力先のファイル名を表す.
ffmpeg -i input.avi -c copy output.mp4
コーデック自体を変更したうえで画質を劣化させたくない場合は,次のようにロスレス設定を用いる.
ffmpeg -i input.avi -c:v libx264 -crf 0 -preset veryslow -c:a copy output.mp4
コーデックの変更
-c:v オプションで映像コーデックを,-c:a オプションで音声コーデックを指定する.H.264(libx264)を指定した場合,-crf オプションの値を 0 に設定するとロスレス(無劣化)エンコードとなり,値を大きくするほど圧縮率は高くなるが画質は低下する.一般的な用途では 18〜23 程度の値が用いられる.
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac output.mp4
再エンコード動画の保存
上記のコマンドを実行すると,カレントディレクトリに指定したファイル名(例:output.mp4)で再エンコード後の動画ファイルが保存される.保存後は,ffprobe を用いて出力ファイルのコーデックや再生時間を確認し,意図した形式で保存されていることを確認する.
ffprobe output.mp4