Opened 5 years ago

Last modified 5 years ago

#7702 new defect

Incorrect video frame reporting

Reported by: budman1 Owned by:
Priority: normal Component: undetermined
Version: unspecified Keywords:
Cc: Blocked By:
Blocking: Reproduced by developer: no
Analyzed by developer: no

Description

Summary of the bug:
How to reproduce:
Create blankclip 3600 frames long with time and frame number hardcoded in it. Cut at I-frame 1850 (GOP 50).

FFprobe states the video starts at complete frame 1852 'B' frame but all video viewers all show 1850 I-frame . FFprobe also states first frame is time code pkt_pts_time is 0.000000 and 'B' frame.

Creating -F image2 will create nothing but frame 1852.

How can this be correct if players show frame 1850 and 1851 starting?

Attachments (7)

G50_30_Test_Pattern_Final0_0.mp4 (43.3 KB ) - added by budman1 5 years ago.
BlankClip 3600 frames 640x480, Hardcoded time and frame numbers
final_1st_frame.jpg (27.9 KB ) - added by budman1 5 years ago.
Final 1st Frame
final_ffplay.jpg (24.8 KB ) - added by budman1 5 years ago.
ffplay 1st frame
final_viewer.jpg (31.7 KB ) - added by budman1 5 years ago.
Potplayer (VLC) view first frame
ffprobe_final.jpg (46.2 KB ) - added by budman1 5 years ago.
'B' frame 0
ffmpeg log.rtf (8.4 KB ) - added by budman1 5 years ago.
scripts and console output
ffmpeg log.txt (7.5 KB ) - added by budman1 5 years ago.
text file of command sequence

Download all attachments as: .zip

Change History (15)

by budman1, 5 years ago

BlankClip 3600 frames 640x480, Hardcoded time and frame numbers

comment:1 by Carl Eugen Hoyos, 5 years ago

Keywords: Key frame dts pts removed

Please test current FFmpeg git head and provide the command you tested together with the complete, uncut console output to make this a valid ticket.

by budman1, 5 years ago

Attachment: final_1st_frame.jpg added

Final 1st Frame

by budman1, 5 years ago

Attachment: final_ffplay.jpg added

ffplay 1st frame

by budman1, 5 years ago

Attachment: final_viewer.jpg added

Potplayer (VLC) view first frame

comment:2 by budman1, 5 years ago

Updating to ffmpeg version N-93022-g260f1960e7 solved player problem but still extracts wrong frame


create Blank clip, no sound:
BlankClip(length=3600, width=640, height=480, fps=30, color=$000000)

create blank clip (GOP=50, FPS=30)with Frame type, Frame number and time embedded using Avisynth and FFMpeg:

Avisynth script (test.avs):
FFmpegSource2("C:\Users\Bud\Desktop\G50_30_Test Pattern.mp4").Crop(0,0,-0,-0).LanczosResize(640,480)
ScriptClip(Last, """Subtitle("[ "+Chr(FFPICT_TYPE)+" ]", size=(Height*56.0/720), align=2)""", after_frame=true)
Subtitle("Test_Pattern.mp4", x=295, y=240, font="Arial", size=24, text_color=$ff0000, align=3)
ShowFrameNumber(scroll=true, x=10, y=27, font="Arial", size=24, text_color=$ffff80)
ShowTime(x=72, y=44, font="Arial", size=24, text_color=$ffff80)
ShowSMPTE(fps=25, x=68, y=61, font="Arial", size=24, text_color=$ffff80)

FFMpeg script:
ffmpeg -i test.avs -an -c:v libx264 -crf 22 -g 50 -r 30 "G50_30_Test_Pattern.mp4"

Cut at frame 1848 (I-Frame with new file frame 0 dts 0.06616, 1st cut):
ffmpeg -i "G50_30_Test_Pattern.mp4" -ss 61.600000 -vframes 1750 -c:v copy -c:a copy -y "C:\Users\Bud\Desktop\1852\G50_30_Test_Pattern_First.mp4"

check dts/pts (gives dts time 0.066016):
ffprobe -i "C:\Users\Bud\Desktop\G50_30_Test_Pattern_First.mp4" -v quiet -select_streams v -show_frames -show_entries frame=pkt_pts_time -read_intervals %+6 -of csv

In order to get 0.000000 dts (dts * 0.667 = 0.044033)
ffmpeg -nostats -loglevel 0 -ss 0.044033 -i "C:\Users\Bud\Desktop\G50_30_Test_Pattern_First.mp4" -vframes 1750 -c:v copy -c:a copy -y "C:\Users\Bud\Desktop\G50_30_Test_Pattern_Final.mp4"

Check dts/pts (gives dts time 0.000000):
ffprobe -i "C:\Users\Bud\Desktop\G50_30_Test_Pattern_Final.mp4" -v quiet -select_streams v -show_frames -show_entries frame=pkt_pts_time -read_intervals %+6 -of csv

ffplay script to view (see final_ffplay.jpg):
DirectShowSource("C:\Users\Bud\Desktop\1852\G50_30_Test_Pattern_Final.mp4").Crop(0, 0, -0, -0)x = float(Width) / float(Height)
last.LanczosResize(round(x * 480.0 / 4.0) * 4, 480).trim(0, -1750)
ShowFrameNumber(offset=0,scroll=true, x=10, y=127, font="Arial", size=24, text_color=$ffff80)
ShowTime(offset_f=0,x=72, y=144, font="Arial", size=24, text_color=$ffff80)

extract first frame as xxx.jpg (final_1st_frame.jpg):
ffmpeg -i "C:\Users\Bud\Desktop\1852\G50_30_Test_Pattern_Final.mp4" -ss 0.000000 -f image2 -q:v 1 -vf scale=640:-2,"drawtext=fontfile=c:/Windows/Fonts/Arial.ttf:text='0.000000':fontsize=30:box=1:x=(w-tw)/2:y=h-(2*lh),drawtext=fontfile=c:/Windows/Fonts/Arial.ttf:text='0:1':fontsize=30:box=1:x=(w-tw)/2:y=h-(2*lh)-30" -vframes 1 -y "C:\Users\Bud\Desktop\TrimNMerge\TrimNMerge\bin\Debug\work\Thumb_1.jpg

by budman1, 5 years ago

Attachment: ffprobe_final.jpg added

'B' frame 0

comment:3 by Carl Eugen Hoyos, 5 years ago

Please provide the ffmpeg command line you tested together with the complete, uncut console output to make this a valid ticket.

by budman1, 5 years ago

Attachment: ffmpeg log.rtf added

scripts and console output

comment:4 by budman1, 5 years ago

Uploaded 'FFmpeg log.rtf' (ffmpeg command line tested together with the complete, uncut console output to make this a valid ticket.)

comment:5 by Carl Eugen Hoyos, 5 years ago

Why??

comment:6 by budman1, 5 years ago

You are kidding right? I succeeded in creating a segment that has frame 0 dts/pts timecode of 0.000000 for better merging. Players play segment starting with frame 0 (1850). You cannot extract frame 0 (1850/1851) because ffprobe displays the first frame as being crystal clear, complete frame, audio in sync 'B' frame.

Bug is: Players view frame 0/1 (1850/1851) so they are included. ffmpeg cannot extract those frames because according to ffprobe they do not exist!

One more item: 25 FPS and 29.97 FPS work correctly. 30 FPS does not.

in reply to:  5 comment:7 by Carl Eugen Hoyos, 5 years ago

Replying to cehoyos:

Why??

What I meant was:
Please either paste your console output into a comment using Code block or attach a text file. Not only is your rtf file needlessly difficult to open, it also contains formatting that makes copying the command line more difficult than needed.

by budman1, 5 years ago

Attachment: ffmpeg log.txt added

text file of command sequence

comment:8 by budman1, 5 years ago

I apologize for the rtf. I did not understand what you meant by why and I sometimes forget what I have on my computer, others may not. I have uploaded the text file of all the command sequence.

Note: See TracTickets for help on using tickets.