ffmpeg 警告:将 H264 转换为 mp4 时“数据包中未设置时间戳”

Rot*_*tem 8 video h.264 ffmpeg video-conversion

执行时我收到以下警告消息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
Run Code Online (Sandbox Code Playgroud)

该代码使用 创建H264合成视频流ffmpeg,然后将该流转换为mp4

由于流是由 创建的ffmpeg,因此它没有理由不包含所需的时间戳。

这是一个错误吗ffmpeg
创建合成H264流时是否有我错过的一些标志之王?基本应该包含时间戳
吗?H264

slh*_*hck 6

由于流是由 ffmpeg 创建的,因此它没有理由不包含所需的时间戳。

但原始 H.264 比特流没有时间戳。

此更改是不久前引入的,根据我的观察,它根本没有考虑混合不能有时间戳的基本流的用例。

这有效:

MP4Box -add test.264 -fps 10 test-out.mp4
Run Code Online (Sandbox Code Playgroud)

我的想法是,指定输入帧率(-r ... -i ...)足以使该错误消失,因为它应该生成时间戳,但显然在这种情况下它没有帮助。这可能是一个错误,但我可能错过了一些更隐晦的东西。

Eugen Rieck 在下面的评论中提出了一种替代方案:

ffmpeg -i test.264 -c copy test.avi
ffmpeg -i test.avi -c copy test.mp4
Run Code Online (Sandbox Code Playgroud)