Final Cut Pro・画面収録・一眼カメラ・macOSなどから書き出される QuickTime の .mov ファイルは、.mp4 を前提とする編集ソフトやWebプレーヤー、メッセージアプリでそのまま扱えないことがあります。MP4 のもとになった ISO base media file format は QuickTime(MOV)の形式から作られたため、両者はよく似た形式です。多くの場合、FFmpegでコンテナを差し替えるだけで数秒・無劣化でMP4化できます。中身のコーデックによっては再エンコードが必要です。
以下は一般的なQuickTime MOVファイル向けの手順です。iPhoneから直接書き出したファイル(HEVC映像+HDRや回転メタデータを含むことが多い)は、iPhoneのMOVをMP4に変換するガイドで詳しく扱っています。
1. MOVとMP4はほぼ同じもの
.mov も .mp4 もコンテナです。映像・音声・メタデータのストリームを包む入れ物です。MP4 のベースである ISO base media file format(box 構造)は QuickTime の形式(atom 構造)をもとに作られたので、両者はほぼ同じ構造です。違いは主に拡張子と、いくつかのQuickTime固有機能だけです。
.mov(QuickTime) |
.mp4(MPEG-4 Part 14) |
|
|---|---|---|
| ベース形式 | QuickTime File Format(ISO BMFF の原型) | ISO BMFF(QuickTime をもとに規格化) |
| 代表的な映像 | H.264、HEVC、ProRes | H.264、HEVC、AV1 |
| 代表的な音声 | AAC、PCM、ALAC | AAC |
| 得意分野 | Apple環境 | 汎用 |
つまり、MOVの中身のストリームがすでにMP4互換(H.264またはHEVC映像+AAC音声)なら、再エンコードは不要です。コンテナのラベルを貼り替えるだけで済みます。
2. 最速・無劣化変換
MOVの中身がH.264/HEVC映像+AAC音声なら、基本コマンドはこれだけです。
ffmpeg -i input.mov -c copy -movflags +faststart output.mp4
-c copy… ストリームを再エンコードせずにコピー。数秒で完了、画質劣化ゼロ。-mapを付けないと映像・音声は1本ずつしか選ばれないので、音声トラックが複数あるときは-map 0:v -map 0:aを付けます。-movflags +faststart… moovアトムを先頭に移動し、ダウンロード完了前に再生を開始できるようにする。
ビットストリームをそのままコピーするため、出力は元ファイルと映像・音声が1ビット単位で同一です。変わるのはコンテナのラベルだけです。
3. コピーで済むケースと再エンコードが必要なケース
ストリームコピーが成功するのは、各ストリームのコーデックがMP4コンテナで許可されている場合だけです。判断の目安は次の表のとおりです。
| MOV内のコーデック | MP4へコピー可? | 対応 |
|---|---|---|
| H.264 (AVC) 映像 | 可 | -c copy |
| HEVC (H.265) 映像 | 可(-tag:v hvc1 を付与) |
-c:v copy -tag:v hvc1 |
| ProRes 映像 | 不可 | 映像をH.264/HEVCに再エンコード |
| AAC 音声 | 可 | -c copy |
| ALAC(Apple Lossless) | 可(-c copy) |
コピー可能。ただしWebや幅広いプレーヤー互換のためAACへの再エンコードを推奨 |
| PCM(非圧縮) | 形式による(FFmpeg 8.1 では 16/24/32bit の整数 PCM は ipcm、浮動小数点 PCM は fpcm として格納。8bit の PCM などは不可。対応していないプレーヤーがある) |
音声をAACに再エンコード(推奨) |
FFmpegがコピーを拒否する場合は、Could not find tag for codec ... in stream のようなメッセージが出ます。このメッセージが出たストリームは再エンコードが必要です。
4. 再エンコードコマンド(ProRes / PCM)
ProRes映像、あるいはプロ用途や画面収録でよく使われるPCM音声など、コーデックがMP4向きでない場合は、H.264+AACに再エンコードします。(ALACはMP4/M4Aに格納でき -c copy も可能ですが、一般的なプレーヤーやWebでの互換性のためAACへの再エンコードを推奨します。)
ffmpeg -i input.mov -c:v libx264 -crf 20 -pix_fmt yuv420p -c:a aac output.mp4
-c:v libx264… 映像をH.264にエンコード。MP4で最も広くサポートされるコーデック。-crf 20… 画質目標。小さいほど高画質・大きいファイル。視覚的にきれいな出力は18〜23が目安。-pix_fmt yuv420p… 一般的な 8bit 4:2:0 に変換。ProRes(4:2:2 10bit)をそのまま変換すると High 4:2:2 という形式になり、多くのブラウザや Apple 端末で再生できません。-c:a aac… 音声をAACにエンコード。
再エンコードは非可逆(映像を一度デコードして再圧縮する)で、コピーより遅くなりますが、どこでも再生できるファイルになります。Web再生用なら -movflags +faststart を追加します:
ffmpeg -i input.mov -c:v libx264 -crf 20 -pix_fmt yuv420p -c:a aac -movflags +faststart output.mp4
必要な部分だけ再エンコードする
音声だけが非互換(ProResではないMOVにPCM音声)の場合、映像はコピーのまま音声だけ再エンコードすれば、フル再エンコードよりずっと高速です。
ffmpeg -i input.mov -c:v copy -c:a aac -b:a 192k -movflags +faststart output.mp4
5. faststartが重要な理由
FFmpegは既定で moovアトム(各フレームの位置をプレーヤーに教える索引)をファイルの末尾に書き込みます。ローカル再生ならこれで問題ありません。しかしWeb/ストリーミングでは再生開始が遅れます。プレーヤーは再生前にmoovアトムを見つける必要があるため、追加のHTTP範囲要求が発生することがあります。サーバーやプレーヤーによっては、ファイルの大部分または全体を取得し終えるまで再生が始まりません。
-movflags +faststart を付けると、書き出しの最後にファイルをもう一度処理してmoovアトムを先頭へ再配置するので、プログレッシブダウンロード中に再生を開始できます。Web向けのファイルには必ず付けてください。詳しくはmoovアトムのガイドを参照してください。
6. MOVの中身を確認する
コピーか再エンコードかを判断する前に、ffprobe で実際のコーデックを確認します。
ffprobe -v error -show_entries stream=index,codec_type,codec_name -of default=noprint_wrappers=1 input.mov
各ストリームの種類(映像/音声)とコーデック名が一覧表示されます。h264 + aac ならコピーで変換できます。alac もMP4/M4Aにコピーできますが、互換性を重視するならAACへの再エンコードを推奨します。prores が表示されたら、映像の再エンコードが必要です。pcm_s16le などの PCM も MP4 にコピーはできますが(ipcm として格納)、対応していないプレーヤーがあるので AAC への再エンコードを推奨します。
7. トラブルシューティング
エラー1: Could not find tag for codec prores in stream
原因: ProResはMP4コンテナに入れられません。
解決策: 映像を再エンコードします:-c:v libx264 -crf 20 -pix_fmt yuv420p。
エラー2: HEVCのMOVは変換できたがApple端末で再生できない
原因: HEVCの映像に hev1 のタグが付いていますが、Appleのプレーヤーは hvc1 を必要とします。-c copy では、元のMOVのタグがそのまま残ります。
解決策: コピー時にタグを付けます:
ffmpeg -i input.mov -c:v copy -c:a copy -tag:v hvc1 -movflags +faststart output.mp4
エラー3: 出力MP4に音声がない
原因: ソースの PCM 音声がそのままコピーされています。FFmpeg 8.1 では多くの PCM が ipcm などとして MP4 に入りますが、対応していないプレーヤーでは音が出ません。
解決策: 音声を再エンコードします:-c:a aac -b:a 192k。
エラー4: Webサイトで再生が始まるまで時間がかかる
原因: moovアトムがファイル末尾にあります。
解決策: -movflags +faststart を付けて再実行します(コーデックが互換ならコピーだけで十分です)。
よくある質問
Q1. MOVをMP4に変換すると画質は落ちますか?
A. -c copy を使う限り落ちません。ストリームを1ビット単位でコピーします。画質が変わるのは再エンコードした場合だけです(第4章)。
Q2. コピーで済むか再エンコードが必要か、どう判断しますか?
A. 第6章の ffprobe コマンドを実行します。H.264/HEVC映像+AAC(またはALAC)音声ならコピーできます。ProResは再エンコードが必要です。PCMは多くの形式でコピーできますが、対応していないプレーヤーがあるのでAACへの再エンコードを推奨します。ALACはコピーできますが、互換性のためAACへの再エンコードを推奨します。
Q3. iPhoneのMOVですが、この記事で合っていますか? A. この方法でも動きますが、iPhoneの映像はHEVC・HDR・回転の癖があることが多いです。iPhoneのMOVをMP4に変換するガイドで専用の手順を扱っています。
Q4. なぜコピーは再エンコードよりずっと速いのですか? A. コピーは圧縮済みパケットを新しいコンテナへ移すだけです。再エンコードは全フレームをデコードして再圧縮するため、処理量が桁違いに多くなります。
Q5. コピー後にファイルサイズがほとんど変わりません。正常ですか? A. 正常です。コピーは再圧縮しないので、サイズは元とほぼ同じ(コンテナのオーバーヘッド程度の差)になります。小さくしたい場合は再エンコードが必要です。動画圧縮ガイドを参照してください。