User Tools

Site Tools


ffmpeg

This is an old revision of the document!


ffmpeg vault

Essentials

What?

ffmpeg is a swiss army knife for everything audio/video. It can do practically every task under the sun, and in fact powers most major dedicated “video players” (VLC, MPC-HC, built-in players in Chrome and Firefox…)1)

How?

If you're on Windows, it's technically possible to install ffmpeg and use it directly 2), but since the windows Command Prompt sucks ass comfort-wise and scripting-wise, it's recommended to just install Ubuntu as part of the Windows Subsystem for Linux, and then apt-get install ffmpeg.

If you're on Linux, you know what to do 8-)

Techniques

(All commands are expected to be ran in bash or a similar Linux shell.)

Basic conversions

fffmpeg is pretty clever, it can correctly guess the codecs and reasonable default settings by the file extension, so all of the following will work as expected (and retain metadata3)!):

ffmpeg -i video.avi video.mp4
ffmpeg -i video.mp4 video_sound_only.wav
ffmpeg -i video_sound_only.wav video_sound_only.mp3
ffmpeg -i song.flac song.mp3

mp3 bitrates

“Reasonable” might not be what you want though, especially in the case of mp3, where the default bitrate is V4 (!), i.e. 140-185 kbps.

If you want, for example, V0, use the -q:a4) option, like so:

ffmpeg -i song.flac -q:a 0 song.mp3

More info at: https://trac.ffmpeg.org/wiki/Encode/MP3

video codecs

Since container/format ≠ codec, you might want to select the codec manually.

While it can reasonably assumed that mp4h264, avi is a bit more complex. You can list all the supported codecs with ffmpeg -codecs5), but since there's several hundreds, you better have an idea of what you want to do in the first place.

For example, if you want an .avi with xvid codec, you just do:

ffmpeg -i original.mp4 -c:v libxvid output.avi

General codec options

This StackOverflow post explains everything: https://stackoverflow.com/a/20587693/3833159

video // image files // frames

images -> video

1. creating a list of images

ffmpeg needs a list of images in a text file in a specific format in order to convert them to a video. There's a couple ways to do this:

ls *.jpg | xargs -I xyz echo "file 'xyz'" > list.txt
for f in *.jpg; do echo "file '$f'" >> list.txt; done

It's up to preference, all end up with a list of all JPGs in current directory, in list.txt.

2. list to video
ffmpeg -f concat -r 30 -i list.txt out.mp4

-f concat tells ffmpeg to handle list.txt as a list.

-r 30 specifies resulting FPS (30 FPS)

out.mp4 is output file - autodetected as h264-encoded. (out.avi, out.gif, etc. also work - refer to ffmpeg manual)

video -> images

ffmpeg -i FILE image%05d.png

Where FILE is the video file, and image%05d.png is the format string for image filenames; this will create image00001.png, image00002.png, image00123.png, etc. (%05d means pad with 5 zeroes; %010d for padding with 10 zeroes…)

3)
like ID3 tags and their FLAC, OGG, WAV, etc. equivalents
4)
read as -quality:audio
5)
and respectively, formats with ffmpeg -formats
ffmpeg.1584109385.txt.gz · Last modified: 2020/03/13 15:23 by sdbs