====== ffmpeg ====== ''ffmpeg'' is a powerful tool for video conversion. ===== Recording Screencasts ===== Screencasts are basically animated screenshots and therefore a very nice way of illustrating things. Here is how to record them using ''ffmpeg'': ffmpeg -f x11grab -r 25 -s 1024x768 -i :1.0 -c:v huffyuv screencast.mkv ===== Encoding Videos ===== This is rather a howto than some detailed illustration of what ffmpeg does or what one may do with it. Actually, this is how I currently encode DVDs: ==== Input Files ==== For quicker access, data from DVD should be ripped to disk first, e.g. using ''vobcopy -m''. Since ''ffmpeg'' expects input to consist of a single file, DVD tracks contained in multiple VOB files have to be combined - which is actually pretty simple: cat VIDEO_TS/VTS_NN_{1..Y}.VOB >input.vob ==== Single-Pass Encoding ==== In case output size is not as important, single-pass encoding is the way to go. Output quality may be adjusted by specifying different presets. In general, the command looks like this: ffmpeg -i input.vob [magic options here] output.mkv My choice of video codec is ''x264'', using a preset of ''slower'' or ''veryslow''. Tuning for ''film'' should not hurt, and a quality setting of ''20'' is decent: -c:v libx264 -preset veryslow -tune film -crf 20 For audio, I use ''AAC'' with variable bit rate. Setting VBR mode to ''3'' results in 48-56 kbps/channel (''man ffmpeg-codecs'' for details): -c:a libfdk_aac -vbr 3 Extracting subtitles is easy, the MKV format allows for embedded subtitle streams just as VOB does: -c:s copy In order to have the right subs being displayed by default, ''mkvpropedit'' comes in handy. For instance, use the following to set the default flag of track 3: mkvpropedit --edit track:3 --set flag-default=yes output.mkv ==== Simple Encoding to Webm ==== ffmpeg -ss 00:37:30 -i input.mp4 -to 00:01:55 -codec:v libvpx -vf scale=-1:480 -an output.webm This will: * skip to offset 37m30s in input.mp4 * encode for 1m55s * encode to VPX codec (usually used for webm) * scale to yres of 480, keeping aspect ratio (-1) * drop audio input (-an) ===== Concatenating Videos ===== A quick and easy way to concat videos without re-encoding is to use the ''concat'' format specifier: $ cat mylist.txt file '/path/to/file1' file '/path/to/file2' file '/path/to/file3' $ ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp4 ===== Encoding MP3s ===== While this is about transcoding from FLAC to MP3, the same command should do for about any supported source format: ffmpeg -i input.flac -q:a 0 -map a output.mp3 By default, ffmpeg will write an ID3 version 2.4 section based on FLAC tags. Though since hardly any ID3-related tool seems to support them, it is advisable to pass ''-id3v2_version 3'' so version 2.3 is being used. To increase compatibility, ''-write_id3v1 1'' enables additional ID3 version 1 tags. ===== Links ===== [[https://stackoverflow.com/questions/7333232/how-to-concatenate-two-mp4-files-using-ffmpeg|How to concatenate two mp4 files on Stackoverflow]]