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
エレメンタリにはタイムスタンプが含まれているはずですか?
ストリームは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