「-movflags frag_keyframe+empty_moov」フラグは何を意味しますか?

「-movflags frag_keyframe+empty_moov」フラグは何を意味しますか?

私が使用している FFMPEG でビデオをエンコードする場合-movflags frag_keyframe+empty_moov(ネット上のどこかで見つけたのですが)、mp4 ビデオ ストリームを取得できます (これがないと、Could not write header for output file #0 (incorrect codec parameters ?)どこかに出力をストリームする場合にエラーが発生しますが、out.mp4たとえば出力ファイル名を渡すと機能します)。このフラグは何らかの形でビデオにも影響を及ぼし、このフラグを使用すると、たとえば Twitter にアップロードできないため、質問しています (これがないと、Twitter は私のビデオを受け入れます)。つまり、エンコード/フォーマットまたはその他の問題が起こっているということです... 回避策はありますか?

答え1

ここで述べられているように:https://stackoverflow.com/questions/8616855/how-to-output-fragmented-mp4-with-ffmpeg

  • frag_keyframeは断片化された出力を引き起こします。
  • empty_moov は出力を 100% 断片化します。これがない場合、最初のフラグメントは短いムービー (moov を使用) として多重化され、残りのメディアはフラグメントとして続きます。

FFmpeg のドキュメントには、断片化とは何かについての説明があります。https://www.ffmpeg.org/ffmpeg-formats.html#mov_002c-mp4_002c-ismv

通常、MOV/MP4 ファイルには、すべてのパケットに関するすべてのメタデータが 1 か所に保存されています (ファイルの末尾に書き込まれますが、movflags に faststart を追加するか、qt-faststart ツールを使用して、再生を向上させるために先頭に移動できます)。断片化されたファイルは、パケットとこれらのパケットに関するメタデータが一緒に保存されるいくつかのフラグメントで構成されます。断片化されたファイルを書き込むと、書き込みが中断されてもファイルをデコードできる (通常の MOV/MP4 は、適切に終了しないとデコードできません) という利点があり、非常に長いファイルを書き込むときにメモリが少なくて済みます (通常の MOV/MP4 ファイルを書き込むと、ファイルが閉じられるまですべてのパケットに関する情報がメモリに保存されるため)。欠点は、他のアプリケーションとの互換性が低いことです。

答え2

代わりにこれを使用してみてください:

-movflags faststart

関連情報