FFmpeg tiny cheat sheet
In the following commands, we assume that the user has set the video filename to the variable named $video.
FFmpeg export audio from any video to mp3
ffmpeg -i "$video" -vn -c:a libmp3lame -y "$audio";
FFmpeg export frames from video to images
ffmpeg -i "$video" "$frames_folder/%08d.ppm";
Retrieve the frame rate from the input video
#To view it on screen
ffprobe -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate "$video";
#To assign it to a variable use the following
frame_rate=`ffprobe -v 0 -of csv=p=0 -select_streams v:0 -show_entries stream=r_frame_rate "$video"`;
To create a video out of a folder with frames/images and an audio file.
ffmpeg -framerate "$frame_rate" -i "$frames_folder/%08d.ppm" -i "$audio" -pix_fmt yuv420p -acodec copy -y "$output_video";
#To set a custom starting index for the frames you can use the -start_number argument
ffmpeg -start_number 62 -framerate "$frame_rate" -i "$frames_folder/%08d.ppm" -i "$audio" -pix_fmt yuv420p -acodec copy -y "$output_video";
#To use the MP4 coded use -vcodec libx264
ffmpeg -framerate "$frame_rate" -i "$frames_folder/%08d.ppm" -i "$audio" -vcodec libx264 -pix_fmt yuv420p -acodec copy -y "$output_video";
To merge an audio less video with an audio file
ffmpeg -i "$no_audio_video" -i "$audio" -shortest -vcodec copy -acodec copy "$output_video";
To change the frame rate of a video
ffmpeg -i "$video" -filter:v fps=20 "$output_video";
To merge two videos side by side
ffmpeg -i "$left_video" -i "$right_video" -filter_complex hstack "$output_video";
Concatenate multiple videos into one
The easiest way without writing huge commands is the following: First, create a file named parts.txt
and add content similar to what we list below:
#Lines starting with # will be ignored file 'part00-03.mp4' file 'part04.mp4' file 'part05-07.mp4' file 'part08-09.mp4' file 'part10.mp4' file 'part11-13.mp4'
Then execute the following command to concatenate all those videos into one:
ffmpeg -f concat -safe 0 -i parts.txt -c copy "$output_video";