Last active
June 10, 2020 19:05
-
-
Save samueleastdev/cf0dd78fa78acdbd2dd0650ca8334a09 to your computer and use it in GitHub Desktop.
Helpful FFmpeg & FFprobe commands
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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