Skip to content

Instantly share code, notes, and snippets.

@andreibosco
Last active January 31, 2022 20:38
Show Gist options
  • Save andreibosco/ac881225e04fd6c460f1e3707306b69b to your computer and use it in GitHub Desktop.
Save andreibosco/ac881225e04fd6c460f1e3707306b69b to your computer and use it in GitHub Desktop.
ffmpeg notes

Sources:

converting mkv to mp4

single file

-i example.mkv -c copy example.mp4

batch conversion (*nix)

for f in *.mkv; do ffmpeg -i "$f" -c copy "${f%.mkv}.mp4"; done

batch conversion (windows)

for /R %f IN (*.mkv) DO ffmpeg -i "%f" -c copy "%~nf.mp4"

editing

trimming

-i input.mp4 -ss 00:01:40 -to 00:02:30 -c copy output.mp4

converting / compressing

h264:

-c:v libx264 -preset medium -crf 22

h265:

-c:v libx265 -preset medium -crf 26

no recompress:

-c copy

presets:

ultrafast,superfast, faster, fast, medium, slow, slower, veryslow

Convert 10-bit H.265 to 10-bit H.264

ffmpeg -i input -c:v libx264 -crf 18 -c:a copy output.mkv

Convert 10-bit H.265 to 8-bit H.265

ffmpeg -i input -c:v libx265 -vf format=yuv420p -c:a copy output.mkv

Convert 10-bit H.265 to 8-bit H.264

ffmpeg -i input -c:v libx264 -crf 18 -vf format=yuv420p -c:a copy output.mkv

sound

extract sound from video to mp4

ffmpeg -i source_video.avi -vn -ar 44100 -ac 2 -ab 192k -f mp3 sound.mp3

Extract audio from a video

ffmpeg -i "path\to\my_input_video_file.mp4" "path\to\my_output_audio_only.wav"

Extract specific video and audio stream

ffmpeg -i "path\to\my_input_video_file.mp4" -map 0:0 -c copy video.mp4 -map 0:1 -c copy audio0.m4a -map 0:2 -c copy audio1.m4a

extra

desinterlace:

-vf yadif

target size:

-s 1920x1080

aspect ratio without recompressing:

-aspect 16:9

rotate video:

-vf "transpose=1" 0 = 90CounterCLockwise and Vertical Flip (default) 1 = 90Clockwise 2 = 90CounterClockwise 3 = 90Clockwise and Vertical Flip

rotate without recompressing:

-metadata:s:v rotate="90"

audio aac two channels:

-c:a aac -b:a 160k -ac 2

web fast start:

-movflags +faststart

autoscale to WxH with black bands:

-vf "scale=W:H:force_original_aspect_ratio=decrease,pad=W:H:(ow-iw)/2:(oh-ih)/2"

get jpeg snapshot:

-vframes 1 -q:v 2 dest.jpg

concatenate mp4 without recompressing:

-f concat -safe 0 -i "files.txt" -c copy -movflags +faststart files.txt format: file 'filepath'

Concatenate two or more video clips

  (echo file 'first file.mp4' & echo file 'second file.mp4' )>list.txt
  ffmpeg -safe 0 -f concat -i list.txt -c copy output.mp4

ffprobe get videoinfo:

ffprobe -v quiet -print_format xml -show_format -show_streams "filepath" > file.xml

if override which sub track is default, use -default_mode infer_no_subs

clear disposition (default sub):

-disposition:s 0

default or forced disposition:

-disposition:s forced

track metadata (audio):

-metadata:s:a title="xx"

track metadata (video):

-metadata:s:v title="xx"

global metadata:

-metadata title="xx"
-metadata description="xx"
-metadata comment="xx"

skip time (place after input file):

-ss 00:05:00

stop after:

-t 00:05:00

Approx fast seek (place before input file):

-ss 00:05:00 -noaccurate_seek -i ....

Video to GIF

  SET filters="fps=%4,scale=%3:-1:flags=lanczos"
  ffmpeg -v warning -i %1 -vf "%filters%,palettegen" -y palette.png
  ffmpeg -v warning -i %1 -i palette.png -lavfi "%filters% \[x\]; \[x\]\[1:v\] paletteuse" -y %2
  DEL palette.png

  togif.bat <input.mp4> <output.gif> <width> <fps>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment