Opened 14 years ago
Closed 13 years ago
#344 closed defect (fixed)
FFProbe does not provide PTS, DTS info present in MPEG file.
Reported by: | Darren | Owned by: | Michael Niedermayer |
---|---|---|---|
Priority: | normal | Component: | ffprobe |
Version: | git-master | Keywords: | FFProbe Time Timestamp PTS DTS |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | yes | |
Analyzed by developer: | no |
Description
Hi,
I'm trying to use FFProbe to extract PTS time data for each frame in a number of MPEG4 files. Mostly it works great but I have come across one that consitently fails. The video that fails was streamed to file (using VLC) from a UDP 4100 Dome Camera and I have an example file I can provide if necessary.
Other tools I have used such as Elecard Stream Analyzer show (as far as I can tell) that the video file contains correctly formatted PTS, DTS data but FFProbe just returns N/A for these times when I specify the -show_packets option.
Any help at all would be very much appreciated.
I'm running FFProbe on Windows and have tried a number of builds, all displaying the same problem.
Regards
Darren
Attachments (3)
Change History (10)
by , 14 years ago
Attachment: | 344 - FFProbe PTS Issue.mpg added |
---|
by , 14 years ago
Attachment: | 344 - FFProbe Output.txt added |
---|
by , 14 years ago
Attachment: | 344 - FFProbe Elecard SA Output.txt added |
---|
comment:1 by , 14 years ago
I am calling:
ffprobe -show_packets filename.mpg
Output for the attached example is as follows:
ffprobe version N-31329-g58257ea, Copyright (c) 2007-2011 the FFmpeg developers
built on Jul 8 2011 22:27:48 with gcc 4.6.1
configuration: --enable-gpl --enable-version3 --enable-memalign-hack --enable-runtime-cpudetect --enable-avisynth --en
able-bzlib --enable-frei0r --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libfreetype --enable-libgsm --
enable-libmp3lame --enable-libopenjpeg --enable-librtmp --enable-libschroedinger --enable-libspeex --enable-libtheora --
enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxavs --enable-libxvid --enable-zlib
libavutil 51. 11. 0 / 51. 11. 0
libavcodec 53. 7. 0 / 53. 7. 0
libavformat 53. 5. 0 / 53. 5. 0
libavdevice 53. 2. 0 / 53. 2. 0
libavfilter 2. 24. 3 / 2. 24. 3
libswscale 2. 0. 0 / 2. 0. 0
libpostproc 51. 2. 0 / 51. 2. 0
[NULL @ 002FBE20] start time is not set in av_estimate_timings_from_pts
Input #0, mpeg, from '5.mpg':
Duration: N/A, bitrate: N/A
Stream #0.0[0x1e0]: Video: mpeg4, yuv420p, 720x576 [PAR 1:1 DAR 5:4], 60k tbr, 90k tbn, 60k tbc
comment:2 by , 14 years ago
Component: | FFmpeg → FFprobe |
---|---|
Reproduced by developer: | unset |
Status: | new → open |
Version: | unspecified → git-master |
comment:3 by , 13 years ago
Out of interest, DVBSnoop can process these files successfully. I have used the following options:
dvbsnoop.exe -ph 0 -pd 3 -td -s pes -if video.mpg
http://dvbsnoop.sourceforge.net/
comment:4 by , 13 years ago
Well, FFmpeg can find the pts values, too, as you see when you change this:
--- a/libavformat/utils.c
+++ b/libavformat/utils.c
@@ -1001,7 +1001,7 @@ static void compute_pkt_fields(AVFormatContext *s, AVStream *st,
some mpeg2 in mpeg-ps lack dts (issue171 / input_file.mpg)
we take the conservative approach and discard both
Note, if this is misbehaving for a H.264 file then possibly presentation_delayed is not set correctly.
- if(delay==1 && pkt->dts == pkt->pts && pkt->dts != AV_NOPTS_VALUE && presentation_delayed){
+ if(0 && delay==1 && pkt->dts == pkt->pts && pkt->dts != AV_NOPTS_VALUE && presentation_delayed){
av_log(s, AV_LOG_DEBUG, "invalid dts/pts combination\n");
pkt->dts= pkt->pts= AV_NOPTS_VALUE;
}
However, FFmpeg removes them because they are clearly and obviously wrong. The video contains B-frames, however the pts and dts value are identical!
Are you sure the stream analyzer correct checks this?
comment:5 by , 13 years ago
Reimar,
Many thanks for taking a look at this. I can see that ffprobe -show_streams reports has_b_frames=1 however when I look at the frames within the file I don't see any reported as b-frames (for example in the elecard output attached). Is it possible that the stream actually doesn't include any b-frames? Perhaps either something is wrong in the stream or in FFPROBE that means it incorrectly thinks there are b-frames?
Regards
comment:6 by , 13 years ago
I thought it did actually contain B-frames, but it looks like I didn't look right.
However FFmpeg expects the low delay flag in the vol header (in vol control which is absent here) to be set in that case.
No idea how it should behave/what should be done about that.
comment:7 by , 13 years ago
Reproduced by developer: | set |
---|---|
Resolution: | → fixed |
Status: | open → closed |
Fixed by not droping both timestamps if they are invalid, this may need to be finetuned or reverted if it causes problems
Problem MPEG File