[FFmpeg-trac] #6131(ffmpeg:new): Splitting and then merging h264 .MOV produces corrupted video

FFmpeg trac at avcodec.org
Tue Feb 7 19:02:39 EET 2017


#6131: Splitting and then merging h264 .MOV produces corrupted video
---------------------------------+----------------------------------
             Reporter:  andrewt  |                     Type:  defect
               Status:  new      |                 Priority:  normal
            Component:  ffmpeg   |                  Version:  3.1.5
             Keywords:           |               Blocked By:
             Blocking:           |  Reproduced by developer:  0
Analyzed by developer:  0        |
---------------------------------+----------------------------------
 In short

 I cut two parts from some video, then combine them back and getting the
 result critically broken
 (it's a simplified debug case from a real video merging).
 Bisected ffmpeg git, the error appears after this (between release 3.0 and
 3.1):
   b8fa374 lavf/concatdec: remove unrelated change during codecpar merge.

 Details

 Source video: h264 .MOV from my photocamera.
 Note 1: time 3.003 in the commands below is a keyframe in the source
 video:
    {{{ $ ffprobe -loglevel error -read_intervals +3 -show_frames
 -select_streams v -print_format xml /tmp/P2040190.MOV | grep -m1 3.003 }}}
        {{{ <frame media_type="video" stream_index="0" key_frame="1"
 pkt_pts="270270" pkt_pts_time="3.003000" pkt_dts="270270"
 pkt_dts_time="3.003000" best_effort_timestamp="270270"
 best_effort_timestamp_time="3.003000" pkt_duration="3003"
 pkt_duration_time="0.033367" pkt_pos="3998057" pkt_size="60194"
 width="1280" height="720" pix_fmt="yuvj420p" sample_aspect_ratio="1:1"
 pict_type="I" coded_picture_number="15" display_picture_number="0"
 interlaced_frame="0" top_field_first="0" repeat_pict="0"/> }}}
 Note 2: ffplay still prints such a line in the "good" case at the
 problematic place. But everything else is fine.
     "{{{[h264 @ 0x7f840c0dcfc0] Reinit context to 1280x720, pix_fmt:
 yuvj420p}}}"

 Example commands are below. Attached logs for bad commits b8fa374 and
 0cb19c3 (errors differ a bit between them) and good commit f8d1bb2.
 ffplay had to be interrupted manually at the end for all cases.
 Also attached output of "{{{out-f8d1bb2/ffmpeg -v 9 -loglevel 99 -i
 /tmp/P2040190.MOV}}}"

 checkme()
 {
     set -x
     FF="/mnt/wrk/ffmpeg/out-f8d1bb2/ffmpeg"
     OUTVID="."
     set -e
     echo -e 'file start.mkv\nfile end.mkv' > list.txt
     $FF -y -t 3.003 -i "/tmp/P2040190.MOV" -an "$OUTVID/start.mkv"
     $FF -y -ss 3.003 -t 5 -i "/tmp/P2040190.MOV" -c:v copy -an
 "$OUTVID/end.mkv"
     $FF -y -f concat -i "$OUTVID/list.txt" -c:v copy -an
 "$OUTVID/merge.mkv"
     set +e
     ffplay "$OUTVID/merge.mkv"
 }

--
Ticket URL: <https://trac.ffmpeg.org/ticket/6131>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker


More information about the FFmpeg-trac mailing list