

It can be even faster if we can do multiple cuts with one command, so we traverse the frames once. This will make us able to have exact cuts with slightly slower operation but still super faster than re-encoding the full video. Note that the first two parts are expected to be small (and one of them or both can be zero length), so, the re-encoding process will be fast.

Join the 3 parts resulted from the above steps.a middle part (y, z) which contains complete encoded blocks, where it can be copied as is.a part (t2-z, t3+w), which is a complete encoded block that should be re-encoded to be able to copy the part (z, t2) precisely.a part (t1-x, t1+y), which is a complete encoded block that should be re-encoded to be able to copy the part (t1, y) precisely.I suggested suggest this algorithm, to divide the segment (t1, t2) that we want to copy to 3 parts: I want to know how ffmpeg decides the cutpoints). I have a solution, but I don't know how to do it using current ffmpeg commands (my trials to copy at keyframes didn't come accurate too. This, however, is slower than the -ss option shown above, since the entire video will be decoded. ffmpeg -i input.mp4 -vf 'select=gte(n\,100)' -c:v libx264 -c:a aac out.mp4 Note that you you also have the choice to use the select/ aselect filters to select frames/audio samples. If you further want to encode a specific number of frames, use -frames:v, for example: ffmpeg -ss 5.32 -i input.mp4 -c:v libx264 -c:a aac -frames:v 60 out.mp4 To summarize, -ss will always be frame-accurate when performing re-encoding. You can also choose a lossless codec like -c:v ffv1 which preserves the quality of the input video. to H.264 using -c:v libx264 as shown above. You will therefore have to re-encode the video, e.g. A video must begin with a keyframe to be decoded properly. Note that cutting on exact frames with bitstream copy ( -c:v copy) is not possible, since not all frames are intra-coded ("keyframes"). Then run: ffmpeg -ss 5.32 -i input.mp4 -c:v libx264 -c:a aac out.mp4 So, if your video is at 25 fps, and you want to start at 133 frames, you would need to first calculate the timestamp: The only way to start at specific frames is to convert a number of frames to ss.ms syntax, or hh:mm:ss.ms. Seeking based on frame numbers is not possible. Timecode_frame_start does not work like this.
