web-dev-qa-db-ja.com

ffmpeg警告:H264をmp4に変換すると、「パケット内のタイムスタンプが設定されません」

ffmpegを実行すると、次の警告メッセージが表示されます。

[mp4 @ 00000000025c00a0]ストリーム0のパケットではタイムスタンプが設定されていません。これは非推奨であり、将来は機能しなくなります。タイムスタンプを正しく設定するようにコードを修正してください
[mp4 @ 00000000025c00a0] ptsに値がありません

このメッセージは、H264エレメンタリーストリームをmp4ビデオファイルに変換するときに表示されます。

ffmpegバージョンを使用しています:ffmpeg-3.3.2-win64

次のコードを実行して、H264ストリームの問題かどうかを確認しました。

ffmpeg -f lavfi -i testsrc -t 3 -r 10 -pix_fmt yuv420p -c:v libx264 test.264
ffmpeg -r 10 -i test.264 -vcodec copy test.mp4

このコードは、ffmpegを使用してH264合成ビデオストリームを作成し、そのストリームをmp4に変換します。

ストリームはffmpegによって作成されるため、必要なタイムスタンプが含まれていない理由はありません。

ffmpegのバグですか?
合成H264ストリームを作成するときに逃した王の旗はありますか?
H264エレメンタリにはタイムスタンプが含まれているはずですか?

4
Rotem

ストリームはffmpegによって作成されるため、必要なタイムスタンプを含まない理由はありません。

ただし、生のH.264ビットストリームにはタイムスタンプがありません。

この変更は導入された しばらく前に であり、私が見るところによると、タイムスタンプを持たないエレメンタリストリームを多重化するユースケースは考慮されていません。

これは機能します:

MP4Box -add test.264 -fps 10 test-out.mp4

私の考えは、入力フレームレート(-r ... -i ...)は、タイムスタンプを生成することになっているため、そのエラーを解消するには十分ですが、この場合はどうやら役に立ちません。バグかもしれませんが、もっと不明な点があるかもしれません。

以下のコメントでEugen Rieckが代替案を提案しました:

ffmpeg -i test.264 -c copy test.avi
ffmpeg -i test.avi -c copy test.mp4
3
slhck