[FFmpeg-user] Cutting video at i-frames to avoid recoding

Francois Visagie francois.visagie at gmail.com
Mon Sep 3 09:13:35 CEST 2012


> -----Original Message-----
> From: ffmpeg-user-bounces at ffmpeg.org [mailto:ffmpeg-user-
> bounces at ffmpeg.org] On Behalf Of Andy Civil
> Sent: 02 September 2012 07:16
> To: FFmpeg user questions
> Subject: Re: [FFmpeg-user] Cutting video at i-frames to avoid recoding
> 
> On 2012-08-19 11:08 AM, Francois Visagie wrote:
> >
> > Experiment? You came up with some pretty decent-looking suggestions
> > yourself. I suspect your concern is whether ffmpeg will ensure that
> > start time and duration coincide in some way with I-frames.
> 
> In the end, that's what I did. I'm reporting back, for anyone who searches
the
> archives for the same information.

Great stuff.

> Things got a bit easier when I found that 'ffprobe -show_frames' would
give
> tons of information about frame types and times.
> 
> My source file had i-frames at regular 0.5s intervals, and only p-frames
> otherwise, so I didn't have the complication of b-frames.
> 
> To create an artificially bad situation, I used FFmpeg to produce a 30s
file with
> a GOP of 300 (an i-frame every 10s at 30fps). I then asked it to 'copy'
the file
> starting at 5 seconds in.
> 
> What I got out was very interesting. The sound frames started at the
> beginning of the file at 0s, from 5s into the original just as I had
asked. There
> were NO video frames at all until the first i-frame, which was originally
timed
> at 10s, but was now timed at 5s in the new file because of my cut. In a
way,
> this makes perfect sense, but it seemed odd that I now had a video file
which
> had five seconds of sound with no picture at the start!
> 
> (As a side issue, I noticed that FFmpeg had re-ordered the frames, the
> original had a bunch of audio frames, followed by a bunch of video frames;
> FFmpeg interleaved them more chronologically.)
> 
> I was curious to know how this file would play. VLC obediently played the
> sound right from the start (at the 5s point of the original, of course)
and
> continued to show its orange cone logo on the screen. At the 5s point when
> the first i-frame came along, the logo was replaced with the video. It was
> perfectly synchronised. This is obviously a good result.
> 
> My only remaining concern was that my video editor (I use Vegas) would
> mess up, and ignore the frame times, leaving me with audio and video that
> were 5s out of synch. When I loaded the file in, I noticed that there was
no
> missing 5s of video, as there had been on VLC. However, Vegas did not go
> out of synch, nor did it cut off the first five seconds of sound: what it
did do
> was to grab that first i-frame and stretch it back to the start of the
file. So the
> video was 'freeze framed' for five seconds while the audio was playing,
then
> at the 5s point it continued perfectly.

This kind of behaviour is often configurable in the player or editor. I.e.
there might not always be a sure-fire way of determining player behaviour in
the encoder, just bear that in mind.

> After these experiments, I'm confident to use FFmpeg to cut the garbage
out
> of my 'original' footage, but knowing how this works, and having observed
> the 0.5s GOP on my original, I will also specify a start time that causes
an i-
> frame to occur at the start of the cut file, for the cleanest result.
> 
> --
> Andy
> _______________________________________________
> ffmpeg-user mailing list
> ffmpeg-user at ffmpeg.org
> http://ffmpeg.org/mailman/listinfo/ffmpeg-user



More information about the ffmpeg-user mailing list