[FFmpeg-user] I found the bugs

Paul B Mahol onemda at gmail.com
Tue Jun 11 20:00:21 EEST 2024


On Tue, Jun 11, 2024 at 6:20 PM Mark Filipak <markfilipak.imdb at gmail.com>
wrote:

> This is a spliced video.
>
> The Good:
> VLC and PowerDVD play it flawlessly. The splice is technically perfect.
> An MPEG-2 TS packet analyser says so. I trust what it says because what
> it says matches my cuts and it matches what '-f framecrc' says. The
> commands that made the segments and the splice are at the bottom of this
> message but you probably don't need to look at them. I include them for
> completeness. When the cuts were made, FFmpeg had no complaints
> whatsoever. When the concatenation was made, FFmpeg had no complaints
> whatsoever.
>
>
what -c copy -f framecrc  shows ?

Also note that 1.5 is rounded to 2.0 not 1.0, so make sure that set pts/dts
rounding is actually correct.
You can round inside expressions, using round/floor/ceil/etc.


> The Bad:
> Below is proof that some common code has bugs that's affecting showinfo
> and show_frames. MPV must also use the bad code that showinfo uses
> because MPV screws up at the same place. I expect that '-ss' & '-to'
> also use the bad code, and that the checker that is responsible for the
> commonly seen discontinuous DTS error messages also uses the bad code.
> The show_frames and showinfo PTSes are wrong, all of them are wrong. And
> show_frames and showinfo are dropping 44 frames as shown below. MPV
> shows by a dip in its estimated FPS that it's also dropping frames even
> though its decoder is not dropping frames.
>
> '-f framecrc' apparently does not use the bad code.
>
> Request:
> I need someone (Paul? Gyan?) to look at the video and at my work in
> order to confirm what I've found.
>
> I've attached a copy of this message in case your email client buggers
> line lengths and makes a mess of it.
>
> MPEG-2_TS_packet_analyser_says  framecrc_says
> ______show_frames_says_______  showinfo_says_[note]
> TS_packet ___DTS___ ___PTS___   _DTS__ _PTS__    __N___ ___DTS___
> ___PTS___    __N___ ___PTS____
> 75957480  504148657 504156165    same   same   I 133542 504148657
> 504137396  I 133542 504137396
> 75958088            504152411    same   same   B 133543 504152411
> 504141150  B 133543 504141150
> 75958829  504156165 504167426    same   same   B 133544 504156165
> 504144903  B 133544 504144903
> 75959524            504159918    same   same   P 133545 504159918
> 504148657  P 133545 504148657
> 75960201            504163672    same   same   B 133546 504163672
> 504152411  B 133546 504152411
> 75961071  504167426 504174933    same   same   P 133547 504167426
> 504156165  P 133547 504156165
> 75961601            504171180    same   same   B 133548 504171180
> 504159918  B 133548 504159918
> 75962207  504174933 504186195    same   same   B 133549 504174933
> 504163672  B 133549 504163672
> 75962686            504178687    same   same   P 133550 504178687
> 504167426  P 133550 504167426
> 75963061            504182441    same   same   B 133551 504182441
> 504171180  B 133551 504171180
> 75963489  504186195 504197456    same   same   P 133552 504186195
> 504174933  P 133552 504174933
> 75963537            504189948    same   same   B 133553 504189948
> 504178687  B 133553 504178687
> 75963974            504193702    same   same   B 133554 504193702
> 504182441  B 133554 504182441
> 75964428  504197456 504204963    same   same   P 133555 504197456
> 504186195  P 133555 504186195
> 75964466            504201210    same   same   B 133556 504201210
> 504189948  B 133556 504189948
> 75964504  504204963 504216225    same   same   B 133557 504204963
> 504193702  B 133557 504193702
> 75964540            504208717    same   same   P 133558 504208717
> 504197456  P 133558 504197456
> 75964578            504212471    same   same   B 133559 504212471
> 504201210  B 133559 504201210
> 75964608  504216225 504223732    same   same   P 133560 504216225
> 504204963  P 133560 504204963
> 75968122            504219978    same   same   B 133561 504219978
> 504208717  B 133561 504208717
> ======================================= splice is here
> ========================================
> 75971638  504223731 504227485    same   same
> 75972614  504227485 504234993    same   same
> 75973360            504231239    same   same
> 75973927  504234993 504246254    same   same
> 75974464            504238746    same   same
> 75975245            504242500    same   same
> 75976029  504246254 504257515    same   same
> 75976791            504250008    same   same
> 75977574            504253761    same   same
> 75978134  504257515 504265023    same   same
> 75978886            504261269    same   same
> 75979456  504265023 504276284    same   same
> 75979999            504268776    same   same
> 75980791            504272530    same   same
> 75981589  504276284 504287545    same   same
> 75982373            504280038    same   same
> 75983175            504283791    same   same
> 75983764  504287545 504295053    same   same
> 75984557            504291299    same   same
> 75985154  504295053 504306314    same   same
> 75985935            504298806    same   same
> 75986543            504302560    same   same
> 75987370  504306314 504317575    same   same
> 75990770            504310068    same   same
> 75991073            504313821    same   same
> 75991289  504317575 504325083    same   same
> 75991646            504321329    same   same
> 75991899  504325083 504332590    same   same
> 75992305            504328836    same   same
> 75992602  504332590 504340098    same   same
> 75993103            504336344    same   same
> 75993466  504340098 504347605    same   same
> 75994062            504343851    same   same
> 75994518  504347605 504355113    same   same
> 75995169            504351359    same   same
> 75995706  504355113 504362620    same   same
> 75996401            504358866    same   same
> 75996985  504362620 504370128    same   same
> 75997736            504366374    same   same
> 75998352  504370128 504377635    same   same
> 75999178            504373881    same   same
> 75999828  504377635 504385143    same   same
> 76000803            504381389    same   same
> 76001612  504385143 504396404    same   same   B 133562 504385143
> 504212471  B 133562 504212471
> 76002590            504388896    same   same
> 76003513            504392650    same   same   B 133563 504392650
> 504392650  B 133563 504392650
> 76004477  504396404 504407665    same   same   P 133564 504396404
> 504216225  P 133564 504396404
> 76005257            504400158    same   same   P 133565 504400158
> 504396404  P 133565 504400158
> 76005921            504403911    same   same   B 133566 504403911
> 504219978  B 133566 504403911
> 76006590  504407665 504418926    same   same   B 133567 504407665
> 504400158  B 133567 504407665
> 76007287            504411419    same   same   I 133568 504411419
> 504223732  I 133568 504411419
> 76007972            504415173    same   same   B 133569 504415173
> 504403911  B 133569 504415173
> 76008665  504418926 504426434    same   same   I 133570 504418926
> 504407665  I 133570 504418926
>
>    Comment regarding what showinfo says:
>    framecrc is in DTS-order and doesn't show frame numbers. showinfo
>    is in PTS-order and doesn't show DTSes. Those deficiencies greatly
>    complicate this sort of work and makes correlations impossible when
>    showinfo's PTSes are wrong. The 'N' frame numbers are actual. The
>    PTSes are actual. The correlations (i.e., the frame ordering) of
>    the starred Ns & PTSes are best guesses.
>
>
> ===== here is '00305+00306.cmd' =====
>    set SEGMENT1=00305 cut preserving ending open GOP
>    set SEGMENT2=00306 cut
>    call "%SEGMENT1%.cmd"
>    call "%SEGMENT2%.cmd"
>    ffmpeg -copyts -i "concat:g:\%SEGMENT1%.m2ts|g:\%SEGMENT2%.m2ts" -map 0
> -c copy -muxdelay 0
> "g:\00305+00306.m2ts"
>    pause
>
>
> ===== here is '00305 cut preserving ending open GOP.cmd' =====
> : This cuts 00305.m2ts and makes
> : '00305 cut preserving ending open GOP.m2ts'.
> :
> : The beginning is at 0:20.062, which is the "Svensk Filmindustri" logo.
> : 0:20.062 is N = seconds*ticks-per-second/ticks-per-frame
> :               = 20.062*90000/3753.75 = 481.
> : check '00305 showinfo.txt' to confirm that N = 481 is an I-frame.
> : It is, and it has PTS = 481*90090/24+1048560 = 2854113.75 = 2854113.
> :
> : FFmpeg's '-f framecrc' reports:
> : ________00305.m2ts________   00305 cut preserving ending open GOP.m2ts
> :        DTS          PTS
> : 0,   2835345,     2846606,                               [P]
> : 0,   2839098,     2839098,                               [B]
> : 0,   2842852,     2842852,                               [B]
> : 0,   2846606,     2854113,   0,   2850360,     2854113,  [I] <<---+
> : 0,   2850360,     2850360,                               [B]      ¦
> :                                                                   ¦
> : Here's a PTS- DTS-ordered diagram of the report [note]:           ¦
> :     open GOP ———————————————————————————>:                        ¦
> :                  2839098  2842852  2846606 :         2854113      ¦
> :                 /        /        /        :        /             ¦
> : PTS   P        B        B        P        B        I..            ¦
> :         _______¦________¦_______/  _______¦_______/               ¦
> :        /       ¦        ¦         /       ¦                       ¦
> : DTS   P        B        B        I        B        P..            ¦
> :        \                          \        \                      ¦
> :         2835345                    2846606  2850360               ¦
> :                                                                   ¦
> :                                                    I..            ¦
> :                                    _______________/               ¦
> :                                   /                               ¦
> :                                  I                 P..            ¦
> :                                                                   ¦
> :                                                    I.. <<---------+
> :                                             ______/               ¦
> :                                            /                      ¦
> :                                  I —————> I        P.. <<---------+
> :                                            \
> :                                             2850360
> :
> : [note] The group of pictures (GOP) is shown as though it has PTS & DTS
> : streams, but that's just to make time and physical frame order easier
> : to visualize. It is actually one stream of course, and PTSes and DTSes
> : are actually just numbers.
>
>    set CUT1=lt(pts\,2854113)
>    set FIX1=if(eq(DTS\,2846606)\,2850360\,DTS)
>
> : The ending cut is at 1:33:10.835, which is a few black frames after
> : fadeout & just before the credits.
> : 1:33:10.835 is N = (3600+33*60+10.835)*90000/3753.75 = 134046.
> : Check '-vf showinfo' to confirm that N = 134046 is an I-frame. It is,
> : and it has PTS = 134046*90090/24+1048560 = 504223732.5 = 504223732.
> :
> : FFmpeg's '-f framecrc' reports:
> : ________00305.m2ts________   00305 cut preserving ending open GOP.m2ts
> :        DTS         PTS              DTS         PTS
> : 0,  504204963,  504216225,   0,  504204963,  504216225,  [P]
> : 0,  504208717,  504208717,   0,  504208717,  504208717,  [B]
> : 0,  504212471,  504212471,   0,  504212471,  504212471,  [B]
> : 0,  504216225,  504223732,   0,  504216225,  504223732,  [I]
> : 0,  504219978,  504219978,   0,  504219978,  504219978,  [B]
> :
> : Here's a PTS- DTS-ordered diagram of the report:
> :     open GOP ————————————————————————————————>:
> :                 504208717 504212471 504216225 :          504223732
> :                /         /          /         :         /
> :   ..P         B         B          P         B         I
> :       ________¦_________¦_________/  ________¦________/
> :      /        ¦         ¦           /        ¦
> :   ..P         B         B          I         B
> :      \                              \         \
> :       504204963                      504216225 504219978
>
>    set CUT2=gte(dts\,504223732)
>
> : Because there's only one open B, discarding it would change the open
> : GOP to a closed GOP. But FFmpeg provides no way to set 'closed_gop'
> : to '1'. So, this procedure must add one frame to what would otherwise
> : be perfect length.
>
>    ffmpeg -copyts -i "g:\00305.m2ts" -map 0 -bsf
> noise=drop='%CUT1%+%CUT2%',setts=dts='%FIX1%':pts=PTS -c copy -sn -dn
> -muxdelay 0 "g:\00305 cut
> preserving ending open GOP.m2ts"
>    pause
>
>
> ===== here is '00306 cut.cmd' =====
> : This cuts 00306.m2ts and makes '00306 cut.m2ts'.
> :
> : '00305 cut preserving ending open GOP.m2ts' ends on PTS = 504223732.
> : '00306.m2ts' begins on PTS = 2317327.
> : '00306 cut.m2ts' needs to begin on PTS = 504227485.
>
> set ADD=501910158
>
> : The beginning is at 0:14.097 following the "Svensk Filmindustri" logo.
> : 0:14.097 is N = seconds*ticks-per-second/ticks-per-frame
> :               = 14.097*90000/3753.75 = 338.
> : check '-vf showinfo' to confirm that N = 338 is an I-frame. It is,
> : and it has PTS = 338*90090/24+1048560 = 2317327.5 = 2317327.
> :
> : FFmpeg's '-f framecrc' reports:
> : ________00306.m2ts________   ______00306 cut.m2ts______
> :        DTS          PTS
> : 0,   2294805,     2306066,                               [P]
> : 0,   2298558,     2298558,                               [B]
> : 0,   2302312,     2302312,                               [B]
> : 0,   2306066,     2317327,   0, 504223731,   504227485,  [I] <<---+
> : 0,   2309820,     2309820,                               [B]      ¦
> : 0,   2313573,     2313573,                               [B]      ¦
> :                                                                   ¦
> : Here's a PTS- DTS-ordered diagram of 00306.m2ts [note]:           ¦
> :     open GOP ———————————————————————————————>:                    ¦
> :               2298558 2302312 2306066        :        2317327     ¦
> :              /       /       /               :       /            ¦
> : PTS         B       B       P       B       B       I..           ¦
> :       ______¦_______¦______/  ______¦_______¦______/              ¦
> :      /      ¦       ¦        /      ¦       ¦                     ¦
> : DTS P       B       B       I       B       B       P..           ¦
> :      \                       \       \       \                    ¦
> :       2294805                 2306066 2309820 2313573             ¦
> :                                                                   ¦
> :                                                     I..           ¦
> :                               _____________________/              ¦
> :                              /                                    ¦
> :                             I                       P..           ¦
> :                                                                   ¦
> :                                                     I.. <<--------+
> :                                               _____/              ¦
> :                                              /                    ¦
> :                             I —————————————>I       P.. <<--------+
> :                              \               \
> :                               2306066         2313573
>
>    set CUT1=lt(pts\,2317327)
>    set FIX1=if(eq(DTS\,2306066)\,2313573+%ADD%\,DTS+%ADD%)
>
> : [note] The group of pictures (GOP) is shown as though it has PTS & DTS
> : streams, but that's just to make time and physical frame order easier
> : to visualize. It is actually one stream of course, and PTSes and DTSes
> : are actually just numbers.
> :
> : The ending is at 1:15:17.471, which is a few black frames after
> : fadeout & before the credits.
> : 1:15:17.471 is N = (3600+15*60+17.471)*90000/3753.75 = 108311.
> : Check '00306 showinfo.txt' to confirm that N = 108311 is an I-frame.
> : It is, and it has PTS = 108311*90090/24+1048560 = 407620976.25 =
> 407620976.
> :
> : FFmpeg's '-f framecrc' reports:
> : ________00306.m2ts________   ______00306 cut.m2ts______
> :        DTS         PTS              DTS         PTS
> : 0,  407602207,  407602207,   0,  909512365,  909512365,  [B]
> : 0,  407605961,  407605961,   0,  909516119,  909516119,  [B]
> : 0,  407609715,  407620976,   0,  909519873,  909531134,  [I] <<---+
> : 0,  407613468,  407613468,   0,  909523626,  909523626,  [B]      ¦
> : 0,  407617222,  407617222,   0,  909527380,  909527380,  [B]      ¦
> :                                                                   ¦
> : Here's a PTS- DTS-ordered diagram of 00306.m2ts:                  ¦
> :     open GOP —————————————————————————————————————————>:          ¦
> :       407602207 407605961 407609715          :          407620976 ¦
> :      /         /         /                   :         /          ¦
> :   ..B         B         P         B         B         I           ¦
> :    _¦_________¦________/  ________¦_________¦________/            ¦
> :     ¦         ¦          /        ¦         ¦                     ¦
> :   ..B         B         I         B         B                     ¦
> :                          \         \         \                    ¦
> :                           407609715 407613468 407617222           ¦
> :                                                                   ¦
> :                                               407617222 407620976 ¦
> :                                              /         /          ¦
> :   ..B         B         P         B         I<————————I <<--------+
> :    _¦_________¦________/  ________¦________/                      ¦
> :     ¦         ¦          /        ¦                               ¦
> :   ..B         B         I         B                     <<--------+
>
>    set CUT2=gte(dts\,407617222)
>    set FIX2=if(eq(PTS\,407620976)\,407617222+%ADD%\,PTS+%ADD%)
>    ffmpeg -copyts -i "g:\00306.m2ts" -map 0 -bsf
> noise=drop='%CUT1%+%CUT2%',setts=dts='%FIX1%':pts='%FIX2%' -c copy -sn -dn
> -muxdelay 0 "g:\00306
> cut.m2ts"
>    pause_______________________________________________
> ffmpeg-user mailing list
> ffmpeg-user at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-user
>
> To unsubscribe, visit link above, or email
> ffmpeg-user-request at ffmpeg.org with subject "unsubscribe".
>


More information about the ffmpeg-user mailing list