I am getting the following warning message when executing ffmpeg
:
[mp4 @ 00000000025c00a0] Timestamps are unset in a packet for stream 0. This is deprecated and will stop working in the future. Fix your code to set the timestamps properly
[mp4 @ 00000000025c00a0] pts has no value
The message appears when converting H264
elementary stream into mp4
video file.
I am using ffmpeg
version: ffmpeg-3.3.2-win64
I tried executing the following code, to check if it's a problem in my H264
stream:
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
The code creates H264
synthetic video stream using ffmpeg
, and then converts the stream into mp4
.
Since the stream is created by ffmpeg
, there is no reason for it not to contain required Timestamps.
Is it a bug in ffmpeg
?
Is there some king of flag I missed when creating the synthetic H264
stream?
Does H264
elementary supposed to contain Timestamps?
Best Answer
Except that raw H.264 bitstreams do not have timestamps.
This change was introduced a while ago, and according to what I see, it simply doesn't consider the use case of muxing elementary streams that cannot have timestamps.
This works:
My thinking was that specifying input framerate (
-r ... -i ...
) would be sufficient to make that error disappear, since it is supposed to generate timestamps, but apparently it does not help in this case. It might be a bug, but I may be missing something more obscure.An alternative was suggested by Eugen Rieck in a comment below: