Dup Ver Goto 📝

Basic FFMpeg

PT2/media/ffmpeg ffmpeg does not exist
To
120 lines, 575 words, 4136 chars Page 'BasicFfmpeg' does not exist.
# convert with default settings
ffmpeg -i input.mkv output.mp4

# convert to mp4 using nvidia nvenc
# where -b:v is suitably set, e.g 2M for 720p
ffmpeg -i input.mkv -c:v h264_nvenc -b:v 4M output.mp4
# as above but don't re-encode audio
ffmpeg -i input.mkv -c:v h264_nvenc -b:v 4M -c:a copy out.mp4  

# extract audio as wav
ffmpeg -i input.mp4 output.wav

# extract aac audio from mp4
ffmpeg -i input.mp4 -vn -c:a copy output.m4a

# don't reencode anything (just change metadata or container format)
ffmpeg -i input.mp4 -c copy output.webm

# don't reencode audio, but scale video
ffmpeg -i input.mp4 -c:a copy -vf scale=w=1280:h=720 output.mp4

Metadata

# extract metadata
ffmpeg -i input.mp4 -f ffmetadata metadata.txt      # writes metadata to metadata.txt

# applying metadata
ffmpeg -i input.mp4 -f ffmetadata -i metadata.txt -map_metadata 1 ...other_opts... output.mp4

# specifying metadata
ffmpeg -i input.mp4 -metadata artist="Mr Flibble" -metadata title="Hex Vision" -c copy output.mp4

Loop Static Image

From stackoverflow

ffmpeg -loop 1 -i image.png -c:v libx264 -t 15 -pix_fmt yuv420p -vf scale=320:240 out.mp4

See MakeStaticMusicVideo.

Audio Filters

A 200Hz highpass filter

ffmpeg -i in.wav -af highpass=f=200 out.wav                  # 12dB/oct
ffmpeg -i in.wav -af highpass=f=200,highpass=f=200 out.wav   # 24dB/oct

Here is a batch converter to apply a highpass filter

Audio Options

-an # no audio
-ac 2 # 2 audio channels
-ac 1 # 1 audio channel
-b:a 192k   # bitrate
-b:a:0 384k -b:a:1 192k # set bitrates for each audio stream

Set Default Audio Track

From this askubuntu

ffmpeg -i input.mkv -map 0:v:0 \
       -map 0:a:2 -map 0:a:0 -map 0:a:1 -map 0:a:3 \
       -map 0:s -c copy \
       -disposition:a:0 default \
       reordered.mkv

Sample Rate

-ar 44100 # audio sample rate

You can also use sox:

sox in.wav -r 44100 out.wav # will output signed 16bit by default
ffmpeg -i a.wav -ar 96000 -c:a pcm_f32le c.wav # 32bit float (little endian)
ffmpeg -i a.wav -ar 96000 -c:a pcm_s24le d.wav # 24bit int (signed little endian)

Raw Audio

See ffmpeg wiki

# raw input
ffmpeg -f s32le input_filename.raw output.wav
ffmpeg -f u16le -ar 44100 -ac 1 -i input.raw output.wav
ffmpeg -i input -c:a pcm_s32le output.wav
# raw output
ffmpeg -i input -f s16le -c:a pcm_s16le output.raw

Get Metadata as Json

ffprobe -v quiet -show_format -show_streams -print_format json input.mp4
ffprobe -v quiet -show_format -print_format json input.mp4
ffprobe -v quiet -show_streams -print_format json input.mp4

Deinterlace

ffmpeg -i in.mp4 -vf yadif -o out.mp4

Changing Framerate

See RetimeVideo. Note that e.g. playing 24fps video in a 23.98 project will drop one frame per 1000 frames, which is roughly \(1000/23.98\simeq 41.7\) seconds. Likewise playing 30fps at 29.97fps will drop one frame per 1000, and in the case of 30fps, this is \(1000/29.97\simeq 33.4\) seconds. The main use for retime is when you want to put something 25fps into a 24fps project, when timestretching the audio and having a slight slow motion effect is preferable to dropping a frame per second.

Crop and Expand

To crop 16:9 to 4:3, for example (for 1080p):

ffmpeg -i in.mp4 -vf crop=x=240:y=0:w=1440:h=1080 out.mp4

To do the opposite, going from 4:3 to 16:9 (again 1080p in this example): (source this stackoverflow)

ffmpeg -i input.mp4 -vcodec libx264 \
-vf "pad=width=1280:height=720:x=0:y=1:color=black" -acodec copy result.mkv