[FFmpeg-trac] #11041(avformat:new): Transcode drops frame that should be truncated by editlist

FFmpeg trac at avcodec.org
Thu May 30 21:38:51 EEST 2024


#11041: Transcode drops frame that should be truncated by editlist
----------------------------------+--------------------------------------
             Reporter:  Anne      |                     Type:  defect
               Status:  new       |                 Priority:  normal
            Component:  avformat  |                  Version:  git-master
             Keywords:  editlist  |               Blocked By:
             Blocking:            |  Reproduced by developer:  0
Analyzed by developer:  0         |
----------------------------------+--------------------------------------
 Summary of the bug:
 Came across a case where if the edit-list media-time is specified as in
 between frame timestamps, that frame will get dropped completely in the
 output of the transcode. The edit-list media-time is specified as 402.
 This is in between the 400 and 420 frame timestamps. The expectation is
 that the frame at 400 is still retained and its duration cut short for the
 transcode output. However, the frame is dropped completely at this line:
 https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/mov.c#L4167

 The iso documentation has a snippet on edit-lists that seems to backup
 this interpretation: 'Edits are not restricted to fall on sample times.
 This means that when entering an edit, it can be necessary to (a) back up
 to a sync point, and pre-roll from there and then (b) be careful about the
 duration of the first sample — it might have been truncated if the edit
 enters it during its normal duration.' It seems like the frame should be
 truncated if edits are in between sample times.

 Safari's player, premiere pro, and QuickTime retain the frame, so this
 behavior results in inconsistent playback of the original vs the
 transcoded output, where the output is missing a frame.
 How to reproduce/output:
 {{{
 ffmpeg -i original.mov -c:v libx264 -y ffmpeg_output.mov
 ffmpeg version 7.0.1 Copyright (c) 2000-2024 the FFmpeg developers
   built with Apple clang version 15.0.0 (clang-1500.3.9.4)
   configuration: --prefix=/opt/homebrew/Cellar/ffmpeg/7.0.1 --enable-
 shared --enable-pthreads --enable-version3 --cc=clang --host-cflags=
 --host-ldflags='-Wl,-ld_classic' --enable-ffplay --enable-gnutls --enable-
 gpl --enable-libaom --enable-libaribb24 --enable-libbluray --enable-
 libdav1d --enable-libharfbuzz --enable-libjxl --enable-libmp3lame
 --enable-libopus --enable-librav1e --enable-librist --enable-librubberband
 --enable-libsnappy --enable-libsrt --enable-libssh --enable-libsvtav1
 --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-
 libvmaf --enable-libvorbis --enable-libvpx --enable-libwebp --enable-
 libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma
 --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-
 libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-
 libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-
 libzimg --disable-libjack --disable-indev=jack --enable-videotoolbox
 --enable-audiotoolbox --enable-neon
   libavutil      59.  8.100 / 59.  8.100
   libavcodec     61.  3.100 / 61.  3.100
   libavformat    61.  1.100 / 61.  1.100
   libavdevice    61.  1.100 / 61.  1.100
   libavfilter    10.  1.100 / 10.  1.100
   libswscale      8.  1.100 /  8.  1.100
   libswresample   5.  1.100 /  5.  1.100
   libpostproc    58.  1.100 / 58.  1.100
 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'original.mov':
   Metadata:
     major_brand     : qt
     minor_version   : 0
     compatible_brands: qt
     creation_time   : 2024-05-04T18:13:43.000000Z
     com.apple.quicktime.location.accuracy.horizontal: 42.565599
     com.apple.quicktime.location.ISO6709: +47.5327-122.1507+229.837/
     com.apple.quicktime.make: Apple
     com.apple.quicktime.model: iPhone 11
     com.apple.quicktime.software: 16.2
     com.apple.quicktime.creationdate: 2024-05-04T11:10:39-0700
   Duration: 00:00:12.57, start: 0.000000, bitrate: 8200 kb/s
   Stream #0:0[0x1](und): Video: hevc (Main) (hvc1 / 0x31637668),
 yuv420p(tv, bt709), 1920x1080, 7639 kb/s, 29.15 fps, 29.97 tbr, 600 tbn
 (default)
       Metadata:
         creation_time   : 2024-05-04T18:13:43.000000Z
         handler_name    : Core Media Video
         vendor_id       : [0][0][0][0]
         encoder         : HEVC
       Side data:
         displaymatrix: rotation of -90.00 degrees
   Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz,
 stereo, fltp, 145 kb/s (default)
       Metadata:
         creation_time   : 2024-05-04T18:13:43.000000Z
         handler_name    : Core Media Audio
         vendor_id       : [0][0][0][0]
   Stream #0:2[0x3](und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
       Metadata:
         creation_time   : 2024-05-04T18:13:43.000000Z
         handler_name    : Core Media Metadata
   Stream #0:3[0x4](und): Data: none (mebx / 0x7862656D), 0 kb/s (default)
       Metadata:
         creation_time   : 2024-05-04T18:13:43.000000Z
         handler_name    : Core Media Metadata
 Stream mapping:
   Stream #0:0 -> #0:0 (hevc (native) -> h264 (libx264))
   Stream #0:1 -> #0:1 (aac (native) -> aac (native))
 Press [q] to stop, [?] for help
 [libx264 @ 0x1226107c0] using cpu capabilities: ARMv8 NEON
 [libx264 @ 0x1226107c0] profile High, level 4.0, 4:2:0, 8-bit
 [libx264 @ 0x1226107c0] 264 - core 164 r3108 31e19f9 - H.264/MPEG-4 AVC
 codec - Copyleft 2003-2023 - http://www.videolan.org/x264.html - options:
 cabac=1 ref=3 deblock=1:0:0 analyse=0x3:0x113 me=hex subme=7 psy=1
 psy_rd=1.00:0.00 mixed_ref=1 me_range=16 chroma_me=1 trellis=1 8x8dct=1
 cqm=0 deadzone=21,11 fast_pskip=1 chroma_qp_offset=-2 threads=24
 lookahead_threads=4 sliced_threads=0 nr=0 decimate=1 interlaced=0
 bluray_compat=0 constrained_intra=0 bframes=3 b_pyramid=2 b_adapt=1
 b_bias=0 direct=1 weightb=1 open_gop=0 weightp=2 keyint=250 keyint_min=25
 scenecut=40 intra_refresh=0 rc_lookahead=40 rc=crf mbtree=1 crf=23.0
 qcomp=0.60 qpmin=0 qpmax=69 qpstep=4 ip_ratio=1.40 aq=1:1.00
 Output #0, mov, to 'ffmpeg_output.mov':
   Metadata:
     major_brand     : qt
     minor_version   : 0
     compatible_brands: qt
     com.apple.quicktime.creationdate: 2024-05-04T11:10:39-0700
     com.apple.quicktime.location.accuracy.horizontal: 42.565599
     com.apple.quicktime.location.ISO6709: +47.5327-122.1507+229.837/
     com.apple.quicktime.make: Apple
     com.apple.quicktime.model: iPhone 11
     com.apple.quicktime.software: 16.2
     encoder         : Lavf61.1.100
   Stream #0:0(und): Video: h264 (avc1 / 0x31637661), yuv420p(tv, bt709,
 progressive), 1080x1920, q=2-31, 29.97 fps, 30k tbn (default)
       Metadata:
         creation_time   : 2024-05-04T18:13:43.000000Z
         handler_name    : Core Media Video
         vendor_id       : [0][0][0][0]
         encoder         : Lavc61.3.100 libx264
       Side data:
         cpb: bitrate max/min/avg: 0/0/0 buffer size: 0 vbv_delay: N/A
         displaymatrix: rotation of -0.00 degrees
   Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo,
 fltp, 128 kb/s (default)
       Metadata:
         creation_time   : 2024-05-04T18:13:43.000000Z
         handler_name    : Core Media Audio
         vendor_id       : [0][0][0][0]
         encoder         : Lavc61.3.100 aac
 [out#0/mov @ 0x600001e043c0] video:4606KiB audio:197KiB subtitle:0KiB
 other streams:0KiB global headers:0KiB muxing overhead: 0.306282%
 frame=  376 fps=183 q=-1.0 Lsize=    4818KiB time=00:00:12.47
 bitrate=3162.7kbits/s speed=6.06x
 [libx264 @ 0x1226107c0] frame I:2     Avg QP:21.53  size: 82112
 [libx264 @ 0x1226107c0] frame P:99    Avg QP:22.87  size: 25951
 [libx264 @ 0x1226107c0] frame B:275   Avg QP:24.07  size:  7210
 [libx264 @ 0x1226107c0] consecutive B-frames:  0.5%  3.7%  6.4% 89.4%
 [libx264 @ 0x1226107c0] mb I  I16..4: 11.5% 73.7% 14.8%
 [libx264 @ 0x1226107c0] mb P  I16..4:  6.4% 13.0%  0.7%  P16..4: 48.5%
 6.5%  4.5%  0.0%  0.0%    skip:20.3%
 [libx264 @ 0x1226107c0] mb B  I16..4:  0.3%  0.4%  0.0%  B16..8: 40.1%
 1.1%  0.1%  direct: 2.1%  skip:55.9%  L0:40.8% L1:57.8% BI: 1.3%
 [libx264 @ 0x1226107c0] 8x8 transform intra:64.6% inter:91.7%
 [libx264 @ 0x1226107c0] coded y,uvDC,uvAC intra: 27.7% 43.1% 12.0% inter:
 10.6% 18.3% 0.2%
 [libx264 @ 0x1226107c0] i16 v,h,dc,p: 40% 31% 14% 15%
 [libx264 @ 0x1226107c0] i8 v,h,dc,ddl,ddr,vr,hd,vl,hu: 14% 18% 51%  2%  3%
 3%  4%  2%  2%
 [libx264 @ 0x1226107c0] i4 v,h,dc,ddl,ddr,vr,hd,vl,hu: 20% 23% 29%  4%  6%
 5%  6%  3%  3%
 [libx264 @ 0x1226107c0] i8c dc,h,v,p: 56% 23% 18%  3%
 [libx264 @ 0x1226107c0] Weighted P-Frames: Y:17.2% UV:6.1%
 [libx264 @ 0x1226107c0] ref P L0: 52.6% 26.5% 13.4%  6.8%  0.6%
 [libx264 @ 0x1226107c0] ref B L0: 92.4%  5.8%  1.8%
 [libx264 @ 0x1226107c0] ref B L1: 97.8%  2.2%
 [libx264 @ 0x1226107c0] kb/s:3007.25
 [aac @ 0x122684110] Qavg: 234.931
 }}}
-- 
Ticket URL: <https://trac.ffmpeg.org/ticket/11041>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list