Video seeking and cutting sections - 2020
If we want only a specific part of our video input, first of all, we need to use the seeking option to get to that specific part. The parameter -ss can be used to seek into the input video.
As described in my another FFmpeg chapter (Thumbnails), there are differences in seek time it takes and in the accuracy of the extraction time, depending on the order of the two parameters (-i and -ss) in the ffmpeg command.
Actually, Seeking with FFmpeg recommends using -ss twice before and after -i to get faster and accurate output.
ffmpeg -ss 00:02:30 -i video.mp4 -ss 00:00:30 -frames:v 1 out.png
"This approach is combining the best characteristics of both fast and accurate ways of seeking in ffmpeg. We first seek very fast somewhere before the third minute. Then we slow down and seek frame by frame to the third minute. This works because ffmpeg will first seek by keyframes, until it reaches 00:02:30. This is where it stops at the last keyframe found (somewhere before 00:02:30, depending on the GOP size/keyframe interval of the input) and then it will slowly seek the next 00:00:30 seconds to the desired time point. The result should be the same as in "Accurate seeking" section, only a lot faster."
In this chapter, we'll play with the following video:
I want the cut off head and tail section of the video. It has 4:11 running time, but I want to cut off from 0 to 7.5 second, and chop off the tail from 4:05 to then end.
Here is the ffmpeg command:
ffmpeg -i yellowstone.mp4 -ss 00:00:07.5 -to 00:04:05 -c copy yellowstone_cut.mp4
Since it's just making a copy, it's quick.
The explanation for the parameters is well describe in trac.ffmpeg.org/wiki/Seeking with FFmpeg:
"To extract only a small segment in the middle of a movie, it can be used in combination with -t which specifies the duration, like -ss 60 -t 10 to capture from second 60 to 70. Or you can use the -to option to specify an out point, like -ss 60 -to 70 to capture from second 60 to 70. -t and -to are mutually exclusive. If you use both, -t will be used."
"Note that if you specify -ss before -i only, the timestamps will be reset to zero, so -t and -to have the same effect:"
ffmpeg -ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy cut.mp4 ffmpeg -i video.mp4 -ss 00:01:00 -to 00:02:00 -c copy cut.mp4
"Here, the first command will cut from 00:01:00 to 00:03:00 (in the original), whereas the second command would cut from 00:01:00 to 00:02:00, as intended."
Here is the video after cutting off head and tail sections:
Cutting 30 seconds from the start and convert it to wav from mp3 with bitrate 256k:
$ ffmpeg -ss 00:00:00.00 -t 30 -i Alone-Sistar.mp3 -ab 256k -y Alone-Sistar.wav
The files are available: Alone-Sistar.wav
Original file was Alone-Sistar.mp3
Ph.D. / Golden Gate Ave, San Francisco / Seoul National Univ / Carnegie Mellon / UC Berkeley / DevOps / Deep Learning / Visualization