[FFmpeg-user] Unresolved concatenation and subtitle problems
Mark Filipak
markfilipak.imdb at gmail.com
Fri Dec 29 22:31:33 EET 2023
On 12/28/23 07:47, Nicolas Gaullier wrote:
>> When ffmpeg's '-vf showinfo' and ffprobe's '-show_streams' disagree, which should I trust?
>
> You should usually trust both, but their meanings are different.
> showinfo is a filter, so apply to a running filter graph, I don't think this information could be very helpful for your use case.
> show_streams will give you some start_time/duration using the same core components (avformat_find_stream_info) as the concat demuxer, which actually can help.
> Another option is to use a kind of "plain raw dump" and guess start_time/duration by yourself. This can be achieved with an ffmpeg -copyts -c copy -f framecrc -
-continued below-
Thank you, Nicolas.
I ran this:
<windows script>
set SOURCE=h:\BDMV\STREAM\00306.m2ts
set TARGET=e:\00306.m2ts_framecrc.txt
ffmpeg -i %SOURCE% -copyts -c copy -f framecrc %TARGET%
</windows script>
Here's 00306.m2ts, packets 0..16, as reported by '-framecrc':
stream number ('0' is the video stream, '1' is the audio stream)
P ¦ DTS(P) PTS(P) T(P) B(P)/8 CRC(P) unknown
-- ¦ ------- ------- ---- ------ ---------- -------------
0: 0, 1044806, 1048560, 3753, 178583, 0x34cc62a3, S=1, 1
1: 0, 1048560, 1056067, 3753, 92709, 0xfa7b5edb, F=0x0, S=1, 1
2: 1, 1048560, 1048560, 960, 1084, 0xe54d2b6f, S=1, 1
3: 1, 1049520, 1049520, 960, 1084, 0xe54d2b6f, S=1, 1
4: 1, 1050480, 1050480, 960, 1084, 0xe54d2b6f, S=1, 1
5: 1, 1051440, 1051440, 960, 1084, 0xe54d2b6f, S=1, 1
6: 0, 1052313, 1052313, 3753, 145206, 0x10576cdb, F=0x0, S=1, 1
7: 1, 1052400, 1052400, 960, 1084, 0xe54d2b6f, S=1, 1
8: 1, 1053360, 1053360, 960, 1084, 0xe54d2b6f, S=1, 1
9: 1, 1054320, 1054320, 960, 1084, 0xe54d2b6f, S=1, 1
10: 1, 1055280, 1055280, 960, 1084, 0xe54d2b6f, S=1, 1
11: 0, 1056067, 1063575, 3753, 141288, 0xb70f376e, F=0x0, S=1, 1
12: 1, 1063920, 1063920, 960, 1084, 0xe54d2b6f, S=1, 1
13: 1, 1064880, 1064880, 960, 1084, 0xe54d2b6f, S=1, 1
14: 1, 1065840, 1065840, 960, 1084, 0xe54d2b6f, S=1, 1
15: 1, 1066800, 1066800, 960, 1084, 0xe54d2b6f, S=1, 1
16: 0, 1067328, 1067328, 3753, 146136, 0xc75a68fb, F=0x0, S=1, 1
T(P) for stream 0 is reported erroneously:
reported T(P) actual T(P) N(P)
P0 3753 3754 1
P1 3753 3753 1
P6 3753 3754 1
P11 3753 11261 3
So '-framecrc' & '-showinfo' agree but they disagree with '-show_streams'.
They may agree because they 'drink the same beer'.
This is all indeterminate without the ability to parse actual m2ts headers.
That is where the truth lies.
> Note that in some cases, it might happen that the real "first pts" comes before the ff reported start_time. And in that case, you will see mpv (based on ff) play your file at a point that is earlier than the start_time reported by ff.
I've seen that.
> So, be careful, these start_time/duration things are often much trickier than they look like.
>
> It seems you want to join segments without reencoding.
> First, you have to take care of the available features of your output muxer : an mp4 is more powerful to handle stream discontinuities than an mpegts format.
Umm... (No, I'm not going to comment on why that might be at this time).
> And there are two things to consider:
> - "timestamp joining" : care about start/end points;
I cut and trim solely on I-frames, preserving (doubling) the I-frame on both sides of a cut.
> but also, if your input audio/video is not aligned/locked (any usual compressed audio codec), you will have to reencode audio at least if you want to avoid a hole (or overlap) in the timeline.
So video packs and audio packs are not correlated, eh? Too bad.
> - keyframes : open-gop is not editable with a straight stream copy if you don't allow some overlap; and you would certainly experience some difficulties to handle this overlap in a muxer
>
> So many things, very dependent on your exact files and workflow.
> At the end, if you encounter an issue, try to reproduce it on short segments to document a case in trac, with a very exhaustive report and corresponding media samples.
Will do.
-----
I have designed hundreds of hardware finite state machines (FSM).
Every one of them worked exactly as designed, zero bugs.
I was taught by Dr. John Battocletti at Ohio State University.
FSMs assure 100% coverage and 100% testability.
I have taught FSM methods to codesmiths in Silicon Valley.
The 'C' language has all the elements needed for FSM design.
I will help with FSM design in 'C' for free with anyone who asks.
OO FSM (object-oriented FSM) would be perfect for AV processing.
(The MPEG specifications utilize an informal form of FSM.)
I've been casually working on OOFFmepg for about a year.
OOFFmpeg could be implemented in 'C' using existing FFmpeg libraries.
Based on my experiences, I think OOFFmpeg could be made fairly quickly.
-----
Cheers -- Mark.
More information about the ffmpeg-user
mailing list