How to cut video files by frame [duplicate]

Does anyone know of a software that could be installed/compiled for linux that is able to cut video by the frame? Thanks.


Solution 1:

ffmpeg can do it. If the video codec is inter-coded and you want precise frame accuracy, you'll have to re-encode the video. If you need to not re-encode the video, then ffmpeg will cut from the nearest GOP boundary before the specified cut point.

Cut and stream-copy:

ffmpeg -i input -ss T -t D -c copy -fflags +genpts output

-ss T specifies the starting point expressed as timecode in the format of S+[.m...] e.g. 24 or 65.22 or [HH:]MM:SS[.m...] e.g. 02:34:11.644

-t D specifies the duration in the same format.

This won't be frame accurate if the start point isn't at a GOP boundary.

Cut and re-encode:

ffmpeg -i input -ss T -t D -fflags +genpts output

Same as above, but this will be frame-accurate.

If you need to specify in and out points by frame numbers:

ffmpeg -i input -vf trim=start_frame=n:end_frame=m -af atrim=start=s:end=t -fflags +genpts output

n and m are the frame numbers of the video in and out points. s and t are the timecodes for the corresponding audio.

The codecs chosen for the re-encoded videos will be according to whichever defaults ffmpeg has set for the output container e.g. H.264 and AAC for MP4.