Skip to content

Instantly share code, notes, and snippets.

@samueleastdev
Last active June 10, 2020 19:05
Show Gist options
  • Save samueleastdev/cf0dd78fa78acdbd2dd0650ca8334a09 to your computer and use it in GitHub Desktop.
Save samueleastdev/cf0dd78fa78acdbd2dd0650ca8334a09 to your computer and use it in GitHub Desktop.
Helpful FFmpeg & FFprobe commands
// Use ffprobe to get stream value
$(ffprobe -v error -select_streams v:0 -show_entries stream=r_frame_rate -of default=noprint_wrappers=1:nokey=1 becky.mp4)
Note: If the source video was in H.264 format you can also use the H.265 command to produce a final video in H.265/HEVC format. Since H.265 is 25–50% more efficient you should be able to reduce the Bitrate and still maintain the same video quality.
ffmpeg -hide_banner -re -i becky.mov -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 \
-c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -c:a aac -ar 48000 \
-filter:v:0 scale=w=640:h=-2 -maxrate:v:0 856k -bufsize:v:0 1200k -b:a:0 96k \
-filter:v:1 scale=w=842:h=-2 -maxrate:v:1 1498k -bufsize:v:1 2100k -b:a:1 128k \
-filter:v:2 scale=w=1280:h=-2 -maxrate:v:2 2996k -bufsize:v:2 4200k -b:a:2 128k \
-filter:v:3 scale=w=1920:h=-2 -maxrate:v:3 5350k -bufsize:v:3 7500k -b:a:3 192k \
-var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2 v:3,a:3" -mux_delay 4 -hls_time 4 -master_pl_name master.m3u8 \
-hls_segment_filename burnt/demo/seg_%v_%03d.ts burnt/demo/list_%v/master.m3u8
ffmpeg -hide_banner -y -i becky.mov \
-vf scale=w=640:h=360:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 800k -maxrate 856k -bufsize 1200k -b:a 96k -hls_segment_filename burnt/360p_%03d.ts burnt/360p.m3u8 \
-vf scale=w=842:h=480:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 1400k -maxrate 1498k -bufsize 2100k -b:a 128k -hls_segment_filename burnt/480p_%03d.ts burnt/480p.m3u8 \
-vf scale=w=1280:h=720:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 2800k -maxrate 2996k -bufsize 4200k -b:a 128k -hls_segment_filename burnt/720p_%03d.ts burnt/720p.m3u8 \
-vf scale=w=1920:h=1080:force_original_aspect_ratio=decrease -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -b:v 5000k -maxrate 5350k -bufsize 7500k -b:a 192k -hls_segment_filename burnt/1080p_%03d.ts -f hls -muxdelay 0 -master_pl_name master.m3u8 burnt/1080p.m3u8
ffmpeg -hide_banner -y -i ../becky.mov -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -vf scale=w=426:h=-2 -b:v 400k -maxrate 428k -bufsize 600k -b:a 64k -hls_segment_filename sample/240p_%03d.ts sample/240p.m3u8 -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -vf scale=w=640:h=-2 -b:v 800k -maxrate 856k -bufsize 1200k -b:a 96k -hls_segment_filename sample/360p_%03d.ts sample/360p.m3u8 -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -vf scale=w=842:h=-2 -b:v 1400k -maxrate 1498k -bufsize 2100k -b:a 128k -hls_segment_filename sample/480p_%03d.ts sample/480p.m3u8 -c:a aac -ar 48000 -c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -hls_time 4 -hls_playlist_type vod -vf scale=w=1280:h=-2 -b:v 2800k -maxrate 2996k -bufsize 4200k -b:a 128k -hls_segment_filename sample/720p_%03d.ts sample/720p.m3u8
ffmpeg -loglevel debug -threads 4 -vsync 1 -i becky.mov \
-vf yadif -g 29.97 -r 29.97 \
-b:v:0 5250k -c:v h264 -pix_fmt yuv420p -profile:v main -level 4.1 -vf scale=w=640:h=360:force_original_aspect_ratio=decrease \
-b:v:1 4200k -c:v h264 -pix_fmt yuv420p -profile:v main -level 4.1 -vf scale=w=842:h=480:force_original_aspect_ratio=decrease \
-b:v:1 3150k -c:v h264 -pix_fmt yuv420p -profile:v main -level 4.1 -vf scale=w=1280:h=720:force_original_aspect_ratio=decrease \
-b:a:0 256k \
-b:a:0 192k \
-b:a:0 128k \
-c:a aac -ar 48000 -map 0:v -map 0:a:0 -map 0:v -map 0:a:0 -map 0:v -map 0:a:0 \
-f hls -var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2" \
-master_pl_name master.m3u8 -t 300 -hls_time 10 -hls_init_time 4 -hls_list_size 10 -master_pl_publish_rate 10 -hls_flags delete_segments+discont_start+split_by_time \
"burnt/dest/playlist%v/manifest.m3u8"
ffmpeg -hide_banner -re -i becky.mov -i becky-clip-1_h1080p.vtt -c:s webvtt -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 -map 0:v:0 -map 0:a:0 \
-c:v h264 -profile:v main -crf 20 -sc_threshold 0 -g 48 -keyint_min 48 -c:a aac -ar 48000 \
-filter:v:0 scale=w=640:h=-2 -maxrate:v:0 856k -bufsize:v:0 1200k -b:a:0 96k \
-filter:v:1 scale=w=842:h=-2 -maxrate:v:1 1498k -bufsize:v:1 2100k -b:a:1 128k \
-filter:v:2 scale=w=1280:h=-2 -maxrate:v:2 2996k -bufsize:v:2 4200k -b:a:2 128k \
-filter:v:3 scale=w=1920:h=-2 -maxrate:v:3 5350k -bufsize:v:3 7500k -b:a:3 192k \
-var_stream_map "v:0,a:0 v:1,a:1 v:2,a:2 v:3,a:3" -mux_delay 0 -hls_time 4 -master_pl_name master.m3u8 \
-hls_segment_filename burnt/demo/seg_%v_%03d.ts burnt/demo/list_%v/master.m3u8
ffmpeg -i becky.mov \
-i becky.mov \
-i becky.mov \
-i becky.mov \
-s:v:0 1920x1080 -c:v:0 libx264 -b:v:0 4000k \
-s:v:1 1280x720 -c:v:1 libx264 -b:v:1 2000k \
-s:v:2 854x480 -c:v:2 libx264 -b:v:2 1000k \
-s:v:3 640x360 -c:v:3 libx264 -b:v:3 600k \
-c:a:0 copy \
-map 0:a -map 0:v -map 1:v -map 2:v -map 3:v \
-var_stream_map "a:0,agroup:audio v:0,agroup:audio v:1,agroup:audio v:2,agroup:audio v:3,agroup:audio" \
-threads 0 -f hls -movflags frag_keyframe -hls_flags single_file+independent_segments \
-hls_segment_type fmp4 -hls_list_size 0 -hls_time 10 -hls_allow_cache 1 \
-master_pl_name master.m3u8 -y burnt/demo2/list_%v/master.m3u8
ffmpeg -i becky.mov \
-i becky.mov \
-i becky.mov \
-i becky.mov \
-s:v:0 1920x1080 -c:v:0 libx264 -b:v:0 4000k \
-s:v:1 1280x720 -c:v:1 libx264 -b:v:1 2000k \
-s:v:2 854x480 -c:v:2 libx264 -b:v:2 1000k \
-s:v:3 640x360 -c:v:3 libx264 -b:v:3 600k \
-map 0:v -map 1:v -map 2:v -map 3:v \
-var_stream_map "v:0 v:1 v:2 v:3" \
-threads 0 -f hls -hls_flags independent_segments \
-hls_segment_type mpegts -hls_list_size 0 -hls_time 10 \
-master_pl_name master.m3u8 -y burnt/demo2/list_%v/master.m3u8
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment