[FFmpeg-user] I found the bugs
Mark Filipak
markfilipak.imdb at gmail.com
Tue Jun 11 19:20:11 EEST 2024
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.
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
-------------- next part --------------
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.
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
More information about the ffmpeg-user
mailing list