AVIは1992年に登場した古いコンテナですが、古いビデオカメラのクリップ、DivX/Xvidでリッピングした動画、MJPEGのキャプチャ、古いツールの画面録画などが今も .avi のままハードディスクに残っています。こうしたファイルは、最近のスマホ・ブラウザ・編集ソフトではきれいに再生できないことがよくあります。AVIをMP4に変換すれば解決します。多くの場合はH.264 + AACへの再エンコードが最も安全ですが、中身によってはコンテナを差し替えるだけで済みます。
1. AVIの中身
AVIは単なるコンテナです。中身のコーデックは、時代や作成ツールによって大きく異なります。
| よくある映像コーデック | 時代・出所 | MP4と互換性あり? |
|---|---|---|
| DivX / Xvid(MPEG-4 ASP) | リッピング動画、2000年代 | 場合による(要注意) |
| MJPEG | 古いカメラ・キャプチャカード | コピーは可(再生できないプレーヤーが多い) |
| Cinepak、Indeo、MS-MPEG4 | 1990年代のクリップ | 不可 |
| AVI内のH.264(まれ) | 一部のキャプチャツール | 可(コピー可能) |
| よくある音声コーデック | MP4と互換性あり? |
|---|---|
| MP3 | 可(コピー可能) |
| PCM(非圧縮) | 再エンコード推奨(8ビット・μ-lawはコピー不可) |
| AC-3 | MP4では可だが安全のため再エンコード推奨 |
組み合わせが予測しづらいため、基本はH.264 + AACへの再エンコードです。元のAVIの中身が何であれ、どこでも再生できるファイルを作れます。
2. ほぼすべてのAVIに使える1コマンド
映像も音声も再エンコードし、Web対応の形にします。
ffmpeg -i input.avi -c:v libx264 -crf 23 -pix_fmt yuv420p -c:a aac -b:a 192k -movflags +faststart output.mp4
-c:v libx264… 映像をH.264でエンコード。最も互換性の高いコーデック-crf 23… 一定品質の目標値(小さいほど高画質・大容量)-pix_fmt yuv420p… 色の形式を、ほとんどの機器で再生できる4:2:0にする。MJPEGやDVの素材の多くは、付けないと4:2:2のH.264(High 4:2:2)になり、スマホなどで再生できないことがある-c:a aac -b:a 192k… 音声をAACに再エンコード。AVIに多いMP3音声に192kが適する-movflags +faststart… moovアトムを先頭へ移動し即時ストリーミングに対応
DivX・Xvid・MJPEG・PCM・MP3のどの入力も同じように扱えます。
3. ストリームコピーが効くケースと効かないケース
AVIがすでにMP4互換のコーデック(最も確実なのは H.264映像 + MP3またはAAC音声)を含んでいれば、再エンコードせずにコンテナを差し替えられます。
ffmpeg -i input.avi -c:v copy -c:a copy -movflags +faststart output.mp4
これが効く場合、変換は1〜2秒で終わり、画質はまったく変わりません。
失敗する、または互換性の低いファイルになるのは次の場合です。
- 映像がDivX/Xvid(MPEG-4 ASP)のとき:FFmpegはMP4へストリームコピー(
mp4vとして格納)できることが多いものの、最近のプレーヤーや端末では正しく扱えないことがよくあります。H.264に再エンコードするほうが確実です。 - 映像がCinepak・Indeo・MS-MPEG4のとき:MP4にはコピーできません。MJPEGはコピーできますが、再生できないプレーヤーが多くあります。
- 音声がPCMのとき:16/24ビットのPCMはMP4に入りますが(FFmpeg 8.1)、再生できないプレーヤーが多く、8ビットやμ-lawのPCMは入りません。
判断の前に中身を確認します。
ffprobe -hide_banner input.avi
Video: と Audio: の行を見ます。Video: h264 + Audio: mp3/aac が最もきれいにコピーできるケースです。DivX/Xvid(mpeg4)も mp4v としてコピーできることが多いですが、H.264への再エンコードの方が互換性は高いです。MJPEG・Cinepak・Indeo や PCM 音声の場合は第2節で再エンコードしてください。
よくある折衷案:映像はコピーし、音声だけ再エンコードします。
ffmpeg -i input.avi -c:v copy -c:a aac -b:a 192k -movflags +faststart output.mp4
これは映像がすでにH.264で、音声がPCMなど非互換な場合に有効です。
4. CRF値の選び方(画質と容量)
CRFは再エンコード時の画質と容量のバランスを決めます。
| CRF | 画質 | 主な用途 | 容量 |
|---|---|---|---|
| 18 | 視覚的にロスレス | 貴重な映像の保存 | 大 |
| 20 | 非常に良い | 残したい家族の動画 | 中〜大 |
| 23 | とても良い(既定) | 一般的な変換 | 中 |
| 26 | 良い | 気軽に視聴 | 小 |
古いAVIは低解像度(640×480以下)が多く、低めのCRFでも小さいファイルになります。大切な映像にはCRF 18〜20がおすすめです。
ffmpeg -i input.avi -c:v libx264 -crf 18 -preset slow -pix_fmt yuv420p -c:a aac -b:a 192k -movflags +faststart output.mp4
H.264はMPEG-4 ASPより効率的ですが、再エンコードで容量が小さくなるとは限りません。ビットレートの低いDivX/Xvidの素材は、CRF 20で再エンコードすると元より大きくなることがあります。
5. 古いAVIの音声への対処
AVIの音声はトラブルの元になりがちです。
- MP3音声はMP4へコピー(
-c:a copy)して問題ありませんが、192kのAACに再エンコードすると最も多くの環境で再生できます。 - PCM音声はAACに再エンコードします。16/24ビットならMP4へコピーもできますが再生できないプレーヤーが多く、8ビットやμ-lawはコピーできません。
- AC-3音声は残せますが、ステレオAACに再エンコードするとスマホでのデコード問題を避けられます。
音声をステレオAACにダウンミックスしてそろえるコマンド:
ffmpeg -i input.avi -c:v libx264 -crf 20 -pix_fmt yuv420p -c:a aac -b:a 192k -ac 2 -movflags +faststart output.mp4
-ac 2 でステレオ出力を強制すると、古いキャプチャのサラウンドトラックを扱えない端末での「音が出ない」問題を防げます。
6. ビデオカメラ映像のインターレース解除
MiniDVカメラやアナログキャプチャカードからのAVIはインターレースのものが多く、動きのある場面で櫛状の横線として現れます。yadif フィルタでインターレースを解除します。
ffmpeg -i input.avi -vf yadif -c:v libx264 -crf 20 -pix_fmt yuv420p -c:a aac -b:a 192k -movflags +faststart output.mp4
-vf yadif できれいなプログレッシブ映像になります。インターレース素材は解除時にわずかに細部を失うため、動きが少し甘く見えても正常です。
7. トラブルシューティング
エラー1: Could not find tag for codec ... in stream
原因: MP4のmuxerが受け付けない映像コーデック(Cinepak・Indeo・MS-MPEG4など)に -c:v copy を試した。DivX/XvidとMJPEGは通常コピーできます。
解決策: -c:v libx264 で映像を再エンコードする(第2節)。
エラー2: 出力に音がない
原因: PCMなど非互換な音声トラックを -c:a copy でコピーした。
解決策: 音声を再エンコードする:-c:a aac -b:a 192k。
エラー3: 動きのある場面で横方向の櫛状の線が出る
原因: 素材がインターレース。
解決策: -vf yadif を追加してインターレース解除(第6節)。
エラー4: 音声と映像がずれていく
原因: 一部の古いAVIは可変フレームレートか、ヘッダが壊れている。
解決策: 再エンコード時に、元の映像と同じ一定フレームレートを指定する。例は30fpsの映像の場合です。25fps(PAL)の映像なら -r 25 にします。元と違う値にすると、FFmpegがフレームを複製したり間引いたりします。
ffmpeg -i input.avi -r 30 -c:v libx264 -crf 20 -pix_fmt yuv420p -c:a aac -b:a 192k -movflags +faststart output.mp4
エラー5: オンラインで長いバッファの後にやっと再生開始する
原因: faststartがない。
解決策: -movflags +faststart を付ける(上記の全コマンドに含まれています)。
よくある質問
Q1. AVIからMP4への変換で画質は落ちますか。 A. 再エンコードは非可逆ですが、CRF 18〜20では通常は劣化が目に見えません。AVIがすでにH.264 + MP3を含むなら、ストリームコピー(第3節)は無劣化です。
Q2. 高速なコピー方式が使えるかどうかはどう判断しますか。
A. ffprobe input.avi を実行します。h264 + mp3/aac はきれいにコピーできます。DivX/Xvid(mpeg4)も mp4v としてコピーできることが多いですが、H.264 再エンコードの方が互換性は高いです。その他のコーデック(MJPEG・PCM など)は再エンコードします。
Q3. コピーしたのに古いAVIがスマホで再生できないのはなぜ。 A. コンテナは変わってもコーデックが変わっていないからです。スマホの標準プレーヤーは、DivX/Xvid をたいてい再生できません。H.264に再エンコードしてください。
Q4. かけがえのないホームビデオに最適なCRFは。
A. -preset slow とCRF 18を使い、できる限り細部を保ちます。
Q5. AVIがとても小さく低解像度です。アップスケールすべき? A. 基本的には不要です。アップスケールしても細部は増えません。低めのCRFで変換し、今ある情報を保つだけにします。
Q6. フォルダ内のAVIを一括変換できますか。 A. できます。FFmpegを1ファイルずつ呼ぶシェルループを使います。1ファイルごとのコマンドは第2節と同じものを使ってください。