[FFmpeg-user] apple-friendly timestamps with -c copy
Claudiu Rad
jazzman at misalpina.net
Wed Nov 25 21:10:13 CET 2015
On 11/24/2015 3:21 PM, Claudiu Rad wrote:
> hello warriors,
>
> so maybe this is obvious for some but not for me.
>
> i have some recordings produced by adobe's flash media server
> technologies, encoding originally done by their flash media live
> encoder in h264 + mp3/aac.
> only some of them exhibit a bad playback behavior when trying to -c
> copy them to mp4/HLS.
> bad playback means stuttering in some players like the fps went down,
> but on apple playing runtimes i really don't know the term or how to
> describe it, it's like the image jumps forward/backward a few frames a
> couple of times per second while the audio runs fine.
after searching a bit, i think what i am seeing is somewhat the same as
described here: https://trac.ffmpeg.org/ticket/502 - jumping frames,
frames not played in the right order
> apple playing runtimes means: quicktime or safari on os x or iOS
> playing MP4 or HLS generated with ffmpeg.
>
> from my initial investigations, the difference between a well behaving
> adobe recording and a badly behaving one is related to PTS/DTS values,
> visually i guess its like apple plays back based on DTS not PTS,
> please observe how the frames are constantly interlaced:
> frame,pkt_pts_time,best_effort_timestamp_time,pkt_dts_time,pict_type
> *frame,0.000000,0.040000,0.000000,I*
> frame,0.080000,0.080000,0.080000,B
> frame,0.120000,0.120000,0.120000,B
> frame,0.160000,0.160000,0.160000,B
> *frame,0.040000,0.200000,0.200000,P*
> frame,0.240000,0.240000,0.240000,B
> frame,0.280000,0.280000,0.280000,B
> frame,0.320000,0.320000,0.320000,B
> *frame,0.200000,0.360000,0.360000,P*
> frame,0.400000,0.400000,0.400000,B
> ...
BTW, what does 'best_effort_timestamp_time' mean?
>
> VLC plays both the original recording and ffmpeg outputs just fine.
> if i reencode with ffmpeg everything is then perfect, PTS/DTS are
> aligned, but i want to avoid that.
>
> what ideas do you have? how can i work on timestamps with ffmpeg and
> correct them via -c copy?
> basically a reorganizing / re-timestamping so that we have
> monotonically increasing PTS i assume should be enough. is this possible?
to put it in another way: can ffmpeg reorder frames in the video stream
based on some criteria, in my case based on PTS?
or does anybody know other tools that could do that? i would really try
this to see if anything changes or re-timestamping is really necessary.
>
> a bad recording sample is here: http://www.datafilehost.com/d/6a22a099
>
> ffmpeg output:
>
> ffmpeg -y -i in.f4f -c copy out.mp4
> ffmpeg version N-76816-g188a1a1-static Copyright (c) 2000-2015 the
> FFmpeg developers
> built with gcc 4.7 (Debian 4.7.2-5)
> configuration: --prefix=/root/ffmpeg_build
> --extra-cflags='-I/root/ffmpeg_build/include -static'
> --extra-ldflags='-L/root/ffmpeg_build/lib -lm -static'
> --pkg-config-flags=--static --bindir=/root/bin --enable-gpl
> --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame
> --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx
> --enable-libx264 --enable-libx265 --enable-libxvid --enable-nonfree
> --extra-version=static --disable-debug --disable-shared
> --enable-static --extra-cflags=--static --disable-doc
> --enable-pthreads --enable-postproc --enable-runtime-cpudetect
> --enable-version3 --disable-devices
> libavutil 55. 9.100 / 55. 9.100
> libavcodec 57. 16.100 / 57. 16.100
> libavformat 57. 19.100 / 57. 19.100
> libavdevice 57. 0.100 / 57. 0.100
> libavfilter 6. 15.100 / 6. 15.100
> libswscale 4. 0.100 / 4. 0.100
> libswresample 2. 0.101 / 2. 0.101
> libpostproc 54. 0.100 / 54. 0.100
> [mov,mp4,m4a,3gp,3g2,mj2 @ 0x335fa40] multiple edit list entries, a/v
> desync might occur, patch welcome
> Last message repeated 3 times
> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'in.f4f':
> Metadata:
> major_brand : f4v
> minor_version : 1
> compatible_brands: isommp42m4v
> creation_time : 2015-01-04 18:02:32
> Duration: 00:05:24.98, start: 0.000000, bitrate: 368 kb/s
> Stream #0:0(eng): Data: none (amf0 / 0x30666D61), 0 kb/s (default)
> Metadata:
> creation_time : 2015-01-04 18:02:32
> handler_name : MainConcept
> Stream #0:1(eng): Video: h264 (Main) (avc1 / 0x31637661),
> yuv420p(tv), 426x240 [SAR 1:1 DAR 71:40], 200 kb/s, 25 fps, 25 tbr, 1k
> tbn, 50 tbc (default)
> Metadata:
> creation_time : 2015-01-04 18:02:32
> handler_name : MainConcept
> encoder : AVC Coding
> Stream #0:2(eng): Audio: mp3 (.mp3 / 0x33706D2E), 44100 Hz,
> stereo, s16p, 127 kb/s (default)
> Metadata:
> creation_time : 2015-01-04 18:02:32
> handler_name : MainConcept
> Stream #0:3(eng): Data: none (rtmp / 0x706D7472), 338 kb/s
> Metadata:
> creation_time : 2015-01-04 18:02:32
> handler_name : Adobe Systems Inc. Hint Handler
> [mp4 @ 0x34103e0] Codec for stream 0 does not use global headers but
> container format requires global headers
> [mp4 @ 0x34103e0] Codec for stream 1 does not use global headers but
> container format requires global headers
> Output #0, mp4, to 'out.mp4':
> Metadata:
> major_brand : f4v
> minor_version : 1
> compatible_brands: isommp42m4v
> encoder : Lavf57.19.100
> Stream #0:0(eng): Video: h264 ([33][0][0][0] / 0x0021), yuv420p,
> 426x240 [SAR 1:1 DAR 71:40], q=2-31, 200 kb/s, 25 fps, 25 tbr, 16k
> tbn, 1k tbc (default)
> Metadata:
> creation_time : 2015-01-04 18:02:32
> handler_name : MainConcept
> encoder : AVC Coding
> Stream #0:1(eng): Audio: mp3 (i[0][0][0] / 0x0069), 44100 Hz,
> stereo, 127 kb/s (default)
> Metadata:
> creation_time : 2015-01-04 18:02:32
> handler_name : MainConcept
> Stream mapping:
> Stream #0:1 -> #0:0 (copy)
> Stream #0:2 -> #0:1 (copy)
> Press [q] to stop, [?] for help
> frame= 8125 fps=0.0 q=-1.0 Lsize= 13238kB time=00:05:25.00 bitrate=
> 333.7kbits/s
> video:7972kB audio:5067kB subtitle:0kB other streams:0kB global
> headers:0kB muxing overhead: 1.525306%
>
> thank you.
>
>
> --
> Claudiu
More information about the ffmpeg-user
mailing list