[FFmpeg-user] cutting mp4 with ffmpeg
Mark Filipak
markfilipak.imdb at gmail.com
Sat Jan 13 21:27:37 EET 2024
On 13/01/2024 12.50, Andrew Randrianasulu wrote:
> On Sat, Jan 13, 2024 at 8:57 PM Def Etienne <shaker.doc at gmail.com> wrote:
-snip-
>> ffmpeg -i ~/6029.mp4 -copyts c:v copy -c:acopy -t 64.600 dev/shm/6029_cut.mp4
According to Devon Heitmueller -- thanks again, Devon -- '-copyts' and '-muxdelay 0' are _both_ needed.
'-copyts' -- before the input -- bypasses a routine that apparently is named "tsfixup".
'-muxdelay 0' -- after the input -- bypasses another ts fixup that defaults to adding 0.7 seconds to
the timestamps.
Exactly why ffmpeg does those fixups is a mystery.
I can confirm that when cutting off the beginning:
ffmpeg -copyts -ss ... -i ... -c copy -muxdelay 0 ...
works. It preserves the timestamps (DTS, PTS).
Regarding cutting off the ending:
ffmpeg -to ... -i ... -c copy ...
I am trying to determine the behavior of '-to'. Is it PTS? Or is it ticks (i.e., duration in
timebase units)? And does ffmpeg do fixups for '-to' clauses, also? It appears there are such '-to'
fixups.
Also be aware that MPV rounds time, and rounds to milliseconds whereas ffmpeg truncates time and
truncates frame numbers, DTSs, and PTSs. So times from MPV may miss an I-frame in ffmpeg. What I do
is use MPV times to find approximate frame number. Then I use '-vf showinfo' to find exact frame
number. Then I compute exact DTS and exact PTS from exact frame number. Then I convert DTS and PTS
to nanoseconds in the '-ss' clause.
Why does 'ffmpeg -ss' use times instead of relative timebase ticks (i.e. durations) or absolute DTSs
and PTSs? Your guess is as good as mine, but it is a super PITA.
Why does ffmpeg apply ts fixups? Your guess is as good as mine, but it is a super PITA.
Also, be aware that in this listing:
> [Parsed_showinfo_0 @ 0xee202580] n:1612 pts:5803200 ...
the reported PTS is _not_ PTS. It is ticks (i.e., duration in timebase units) that is marked "pts"
but isn't -- another super PITA.
Also, remuxing from M2TS to MP4 for example, applies more unknown fixups even when they have the
exact same timebase -- another super PITA -- so don't change packet type until the very end of your
timming and concatenating.
--Mark.
More information about the ffmpeg-user
mailing list