If you ever need to crop a video, which mean that you want to reduce the area of the video to a square of it to trim areas you don’t want.
This is possible with ffmpeg using the video filter crop. To make the example more readable, I replaced values with variables names:
- WIDTH = width of output video
- HEIGHT = height of output video
- START_LEFT = relative position of the area compared to the left, left being 0
- START_TOP = relative position of the area compared to the top, top being 0
So the actual commands look like
ffmpeg -i input_video.mp4 -filter:v "crop=$WIDTH:$HEIGHT:$START_LEFT:$START_TOP" output_video.mp4
If you want to crop the video to get a 320x240 video from the top-left position 500,100 the command would be
ffmpeg -i input_video.mp4 -filter:v "crop=320:240:500:100" output_video.mp4
Extract audio and video (separation)
If for some reasons you want to separate the audio and the video from a file you can use those commands:
ffmpeg -i input_file.flv -vn -acodec copy audio.aac ffmpeg -i input_file.flv -an -vcodec copy video.mp4
-video nulland so you discard video
-audio nulland so you discard audio
codec copymeans the output is using original format from the file. If the audio is mp3 then the output file will be a mp3 whatever the extension you choose.
Instead of using codec copy you can choose a different codec for the extracted file, but copy is a good choice, it performs really fast because you don’t need to re-encode it and is loss-less.
I use this to rework the audio with audacity.
Merge audio and video into a single file (merge)
After you reworked tracks (audio and/or video) of your file, you can combine them into a single file.
ffmpeg -i input_audio.aac -i input_video.mp4 -acodec copy -vcodec copy -f flv merged_video.flv
If you want to remove parts of a video, you have to cut it into pieces and then merge the pieces, so you can avoid parts you don’t want.
The command is not obvious at all (like in all ffmpeg uses), I found some parts on differents areas of the Internet.
Split in parts, we want to keep from 00:00:00 to 00:30:00 and 00:35:00 to 00:45:00
ffmpeg -i source_file.mp4 -ss 00:00:00 -t 00:30:00 -acodec copy -vcodec copy part1.mp4 ffmpeg -i source_file.mp4 -ss 00:35:00 -t 00:10:00 -acodec copy -vcodec copy part2.mp4
The -ss parameter tells ffmpeg where to start the video and -t parameter tells it about the duration.
Then, merge the files into one file:
printf "file %s\n" part1.mp4 part2.mp4 > file_list.txt ffmpeg -f concat -i file_list.txt -c copy result.mp4
instead of printf you can write into file_list.txt the list of files like this:
file /path/to/test1.mp4 file /path/to/test2.mp4