FFmpegで動画フォーマットを変換する方法

4月 21, 2026

動画フォーマットの変換は、メディア処理で最も一般的なタスクの一つです。Web向けのMP4、Appleワークフロー向けのMOV、オープンソースプロジェクト向けのWebMなど、FFmpegはすべてコマンドラインで処理できます。このガイドでは、基本的な変換から高度なコーデック選択、一括処理まで網羅的に解説します。

基本的なフォーマット変換

最もシンプルな変換は、コンテナフォーマットを変更するだけです。FFmpegはファイル拡張子から出力フォーマットを自動検出します:

# MKVをMP4に変換
ffmpeg -i input.mkv output.mp4

# AVIをMOVに変換
ffmpeg -i input.avi output.mov

# MP4をWebMに変換
ffmpeg -i input.mp4 output.webm

コーデックを指定しない場合、FFmpegはターゲットコンテナのデフォルト値を使用します。動作はしますが、品質や互換性を制御することはできません。

コンテナとコーデックの違い

深掘りする前に、この違いを理解しておくと役立ちます:

  • コンテナ(MP4、MKV、MOV、AVI、WebM)— 動画、音声、メタデータを格納するファイル形式
  • 動画コーデック(H.264、H.265、VP9、AV1)— 動画データの圧縮方式
  • 音声コーデック(AAC、Opus、MP3、FLAC)— 音声データの圧縮方式

コンテナは箱のようなもので、コーデックは中身です。同じ動画コーデックを異なるコンテナに入れることができます。

コンテナ一般的な動画コーデック一般的な音声コーデック最適な用途
MP4H.264, H.265, AV1AAC, MP3Web、モバイル、汎用
MKV任意任意アーカイブ、マルチトラックメディア
MOVH.264, H.265, ProResAAC, PCMAppleエコシステム、編集
WebMVP8, VP9, AV1Vorbis, OpusWeb(オープンソース)
AVIH.264, MPEG-4MP3, PCMレガシー互換性

コーデック選択ガイド

H.264 — 最大の互換性

H.264(libx264)は、ほぼすべてのデバイスとブラウザで再生できます。一般的な配信には最も安全な選択です。

ffmpeg -i input.avi -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4

H.265(HEVC)— より優れた圧縮

H.265(libx265)は、同じ品質で約50%小さいファイルを生成します。対応は広がっていますが、まだ完全ではありません。

ffmpeg -i input.avi -c:v libx265 -crf 28 -preset medium -c:a aac -b:a 128k output.mp4

注意:H.265は異なるCRFスケールを使用します。H.265のCRF 28はH.264のCRF 23とほぼ同等です。

VP9 — オープンソースでWeb向け

VP9はGoogleのロイヤリティフリーコーデックです。WebMと組み合わせて使い、すべてのモダンブラウザで対応しています。

ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus -b:a 128k output.webm

-b:v 0は、純粋なCRFモードを使用するようFFmpegに指示します(ビットレート上限なし)。

AV1 — 次世代コーデック

AV1は最高の圧縮率を提供しますが、エンコードが非常に遅いです。時間に余裕があり、最小のファイルが必要な場合に使用してください。

ffmpeg -i input.mp4 -c:v libaom-av1 -crf 30 -cpu-used 4 -c:a libopus -b:a 128k output.mkv

-cpu-used 4はエンコードを大幅に高速化します(範囲0-8、高いほど速いが品質は低下)。

コーデック比較

コーデック圧縮率速度ブラウザ対応ライセンス
H.264良好高速ユニバーサルライセンス制
H.265優良中速拡大中ライセンス制
VP9優良低速全モダンブラウザロイヤリティフリー
AV1最良非常に低速拡大中ロイヤリティフリー

音声コーデックの組み合わせ

各コンテナには最適な音声コーデックがあります:

# MP4 + AAC(最も一般的な組み合わせ)
ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a aac -b:a 192k output.mp4

# WebM + Opus(ビットレートあたり最高品質)
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus -b:a 128k output.webm

# MKV + FLAC(ロスレスオーディオ)
ffmpeg -i input.mov -c:v libx264 -crf 18 -c:a flac output.mkv

# MOV + PCM(非圧縮、編集用)
ffmpeg -i input.mp4 -c:v copy -c:a pcm_s16le output.mov
音声コーデック品質ファイルサイズ最適なコンテナ
AAC良好MP4, MOV
Opus優秀最小WebM, MKV
MP3良好MP4, AVI, MKV
FLACロスレスMKV
PCMロスレス非常に大MOV, WAV

ストリームコピー — 瞬時の変換

ソースコーデックがターゲットコンテナと互換性がある場合、再エンコードなしでストリームをコピーできます。これは瞬時かつ無劣化です:

# MKVをMP4に再エンコードなしでリマックス
ffmpeg -i input.mkv -c copy output.mp4

# 動画はコピー、音声のみ再エンコード
ffmpeg -i input.mkv -c:v copy -c:a aac -b:a 128k output.mp4

ストリームコピーは、コーデックがターゲットコンテナで対応されている場合のみ機能します。例えば、VP9動画をAVIコンテナに入れることはできません。

品質 vs ファイルサイズ

CRFモード — ローカルファイルに最適

CRF(固定品質係数)は、品質とサイズの最適なバランスを提供します。エンコーダーはシーンごとにビットレートを調整します。圧縮テクニックの詳細については、動画圧縮ガイドをご覧ください。

# 高品質(大きなファイル)
ffmpeg -i input.avi -c:v libx264 -crf 18 -c:a aac -b:a 192k output.mp4

# バランスの取れた品質
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4

# 小さなファイル(低品質)
ffmpeg -i input.avi -c:v libx264 -crf 28 -c:a aac -b:a 96k output.mp4

2パスエンコード — ターゲットファイルサイズに最適

特定のファイルサイズが必要な場合は、2パスエンコードを使用します:

# パス1:解析
ffmpeg -i input.avi -c:v libx264 -b:v 2M -pass 1 -an -f null /dev/null

# パス2:エンコード
ffmpeg -i input.avi -c:v libx264 -b:v 2M -pass 2 -c:a aac -b:a 128k output.mp4

プリセット — 速度 vs 圧縮率

遅いプリセットほど、同じ品質でより小さなファイルを生成します:

# 高速エンコード、大きなファイル
ffmpeg -i input.avi -c:v libx264 -crf 23 -preset fast -c:a aac output.mp4

# 低速エンコード、小さなファイル
ffmpeg -i input.avi -c:v libx264 -crf 23 -preset slow -c:a aac output.mp4

解像度変更を伴う変換

フォーマット変換とスケーリングを組み合わせます:

# 720p MP4に変換
ffmpeg -i input.mkv -c:v libx264 -crf 23 -vf "scale=-2:720" -c:a aac -b:a 128k output.mp4

# 1080p WebMに変換
ffmpeg -i input.avi -c:v libvpx-vp9 -crf 30 -b:v 0 -vf "scale=-2:1080" -c:a libopus output.webm

一括変換スクリプト

ディレクトリ内のすべてのファイルを変換

# すべてのAVIファイルをMP4に変換
for f in *.avi; do
  ffmpeg -i "$f" -c:v libx264 -crf 23 -c:a aac -b:a 128k "${f%.avi}.mp4"
done

# すべてのMKVファイルをMP4に変換(可能ならストリームコピー)
for f in *.mkv; do
  ffmpeg -i "$f" -c copy "${f%.mkv}.mp4"
done

フォーマットごとにカスタム品質で変換

#!/bin/bash
# 複数フォーマットへの一括変換
INPUT="input.mp4"

# Web最適化MP4
ffmpeg -i "$INPUT" -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k -movflags +faststart web.mp4

# 高品質MKVアーカイブ
ffmpeg -i "$INPUT" -c:v libx265 -crf 22 -preset slow -c:a flac archive.mkv

# オープンソースホスティング用WebM
ffmpeg -i "$INPUT" -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus -b:a 128k web.webm

再帰的変換

# すべてのAVIファイルを再帰的に検索して変換
find . -name "*.avi" -exec sh -c '
  ffmpeg -i "$1" -c:v libx264 -crf 23 -c:a aac "${1%.avi}.mp4"
' _ {} \;

Web最適化 — faststart

Webで配信するMP4ファイルには、必ず-movflags +faststartを追加してください。これによりメタデータがファイルの先頭に移動し、ダウンロードが完了する前に再生を開始できるようになります:

ffmpeg -i input.mkv -c:v libx264 -crf 23 -c:a aac -movflags +faststart output.mp4

よく使う変換レシピ

最も頻繁な変換にすぐ使えるコマンドです:

# MOV(iPhone)をMP4に変換して共有
ffmpeg -i input.mov -c:v libx264 -crf 23 -c:a aac -b:a 128k -movflags +faststart output.mp4

# AVIをMP4に変換(再エンコード)
ffmpeg -i input.avi -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 128k output.mp4

# MP4をWebMに変換してWeb埋め込み
ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 -c:a libopus -b:a 128k output.webm

# MKVをMP4に変換(無劣化リマックス)
ffmpeg -i input.mkv -c copy -movflags +faststart output.mp4

# 任意のフォーマットをGIFに変換(短いクリップ)
ffmpeg -i input.mp4 -vf "fps=10,scale=320:-1" -t 5 output.gif

# MP4をHLSに変換してストリーミング
ffmpeg -i input.mp4 -c copy -hls_time 10 -hls_list_size 0 output.m3u8

トラブルシューティング

「Discarding packet」警告 — ソースコンテナに互換性の問題があります。-err_detect ignore_errを追加して破損パケットをスキップしてください。

「Non-monotonous DTS」エラー — ソースのタイムスタンプに問題があります。以下で修正できます:

ffmpeg -i input.mkv -fflags +genpts -c:v libx264 -crf 23 -c:a aac output.mp4

コンテナでコーデックが非対応 — 非互換のコーデックをコンテナに入れようとしています(例:AVIにVP9)。コンテナを変更するか、互換性のあるコーデックで再エンコードしてください。

出力ファイルが入力より大きい — より効率的なコーデックから効率の低いコーデックに変換した場合、またはソースが強く圧縮されていた場合に発生します。CRF値を下げるか、より効率的なコーデックを使用してみてください。

FFHubによるクラウド代替

動画フォーマットのローカル変換は単発の作業には問題ありませんが、一括変換はマシンを何時間も占有する可能性があります。FFHubを使えば、クラウドでAPI経由でFFmpegコマンドを実行できます — 同じFFmpeg構文で、ローカルCPUの負荷はゼロです。

大量のファイルを変換する必要がある場合、フォーマット変換をWebアプリケーションに統合する場合、またはFFmpegがインストールされていないマシンで動画を処理する場合に特に有用です。

まとめ

  • コーデックが互換性のある場合はストリームコピー-c copy)を使用 — 瞬時に完了
  • 最大の互換性には**H.264 + AAC(MP4)**を選択
  • Web向けのロイヤリティフリー配信には**VP9 + Opus(WebM)**を選択
  • 品質重視のエンコードにはCRFモードを使用
  • Webで配信するMP4ファイルには**-movflags +faststart**を追加
  • ディレクトリ全体を一度に変換するには一括スクリプトを使用

関連記事

  • FFmpegで動画を圧縮する方法 - CRF、プリセット、解像度スケーリングでファイルサイズを削減
  • FFmpegで動画から音声を抽出する方法 - 任意の動画フォーマットから音声トラックを抽出
  • FFmpeg動画圧縮のベストプラクティス - 最適な品質とサイズのための高度なエンコード戦略
FFHub

FFHub

FFmpegで動画フォーマットを変換する方法 | FFHub