web-dev-qa-db-ja.com

QuicktimeがFFmpegでエンコードされた動画ファイルを再生できないのはなぜですか?

次のコマンドで作成したムービーを開こうとすると:

ffmpeg -pattern_type glob -i '*.JPG' -s 640x480 movie.mp4

QuickTimeからエラーが表示されます。

The document “movie.mp4” could not be opened.
The file may be damaged or may not be a movie file that is compatible with QuickTime Player.

ISightの時間経過から生成された一連の画像に対して同じコマンドを使用しましたが、この場合、上記の画像はデジタルカメラからのものです。解像度はかなり高くなっていますが、640x480にスケーリングしていますが、出力に問題を示唆するものが何も表示されません。

Input #0, image2, from '*.JPG':
  Duration: 00:00:04.76, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: mjpeg, yuvj422p(pc), 4928x3264, 25 tbr, 25 tbn, 25 tbc

対ワーキングムービー:

Input #0, image2, from '*.JPG':
  Duration: 00:01:23.72, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: mjpeg, yuvj420p(pc), 640x480 [SAR 1:1 DAR 4:3], 25 fps, 25 tbr, 25 tbn, 25 tbc

そして出力について:

Output #0, mp4, to 'movie.mp4':
  Metadata:
    encoder         : Lavf55.19.104
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj422p, 640x480, q=-1--1, 12800 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg -> libx264)

対作業用:

Output #0, mp4, to 'movie.mp4':
  Metadata:
    encoder         : Lavf55.19.104
    Stream #0:0: Video: h264 (libx264) ([33][0][0][0] / 0x0021), yuvj420p, 640x480 [SAR 1:1 DAR 4:3], q=-1--1, 12800 tbn, 25 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mjpeg -> libx264)

ワーキングムービーが長く、ソース解像度が低いことを除けば、私が見ることができる唯一の違いは、ビデオストリームに余分な「[SAR 1:1 DAR 4:3]」が含まれていることですが、これは何なのかわかりません。それは、または非稼働中の映画でそれを強制しようとする方法です。

更新:VLCをダウンロードしたところ、映画が正常に再生されます。だから私はffmpegがここで悪いわけではないことを知っています。

37
Michael

これに基づいて StackOverflow answer-pix_fmt yuv420pを次のようにコマンドに追加します。 コメントの言及の1つ-vcodec libx264も追加しているため、ここに含まれています。

ffmpeg -pattern_type glob -i '*.JPG' -vcodec libx264 -s 640x480 \
-pix_fmt yuv420p movie.mp4

または、 フォーマットフィルター を使用することもできます。この例では、-sの代わりに scale filter を使用し、-pix_fmtの代わりにフォーマットフィルターを使用します。

ffmpeg -pattern_type glob -i '*.JPG' -vcodec libx264 \
-vf scale=640:-2,format=yuv420p movie.mp4

また、 公式のFFmpeg Wikiで詳しく説明されています 「ダムプレーヤーのエンコーディング」という見出しの下。強調鉱山:

QuickTimeおよび他のほとんどのプレーヤーで出力を機能させるには、-pix_fmt yuv420pを使用する必要がある場合があります。これらのプレーヤーは、YUV平面カラースペースのみをサポートします。 H.264ビデオの4:2:0クロマサブサンプリング。そうしないと、ソースによっては、ffmpegがこれらのプレーヤーと互換性のないピクセル形式で出力する場合があります。

55
JakeGould