FFmpeg を用いた動画ファイルの再エンコードの例

このページでは,FFmpeg を用いて,画質を劣化させずに動画ファイルを再エンコードする方法を説明する.

動画ファイルは,コンテナ形式(AVI,MP4 等)とコーデック(映像・音声の圧縮方式)の組み合わせで構成されている.撮影機器や編集ソフトウェアが出力した形式のままでは,再生環境やアップロード先によって扱えない場合がある.そのため,元の画質・音質を保ったまま,別のコンテナ形式やコーデックに変換する再エンコードが必要となる.

FFmpeg はコマンドラインで動作する動画・音声処理ソフトウェアであり,Windows,macOS,Linux 等の主要な OS に対応する.GNU General Public License 等のオープンソースライセンスで配布されており,無償で利用できる.

インストール

  1. FFmpeg の公式ページを開く

    https://ffmpeg.org/download.html

  2. Windows の場合,コマンドプロンプトまたは PowerShell を開き,次のコマンドを実行する(Windows 標準のパッケージ管理ツール winget を使用したインストール方法)
    winget install --id=Gyan.FFmpeg -e
  3. 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