In this post I’d like to teach you some of my personal favorite workflows in regards to personal home videos. FFmpeg is at the core of this workflow. This command-line utility is so versatile that it can do so many things when it comes to media.
When you are working with things like iTunes as your media depot, newer versions require you to have media in certain formats only. Other depot systems, such as Plex, allow the user to keep videos in all sorts of formats, and the media server takes care of how the media is delivered, to the device a piece of media is playing on. The server live-converts items, if necessary. iTunes is a bigger hurdle in this case because the media we use comes in all sorts of formats.
The other big hurdle is, still, metadata. The data that is associated with movies and TV shows is sometimes missing, or simply wrong. This is the same kind of problem users face when working with music. The approach to fix this issue is different.
Converting Media into iTunes acceptable formats
As mentioned, FFmpeg is my favorite utility to use for format conversion. Don’t despair however, if you don’t know how to use the command-line, because media converters nowadays almost always use FFmpeg underneath. What you can buy and download from the App Stores are just GUI’s for FFmpeg. Please keep that in mind.
That said, those GUIs might have a more or less complete implementation of the entire FFmpeg feature set. This is another thing to consider when choosing a converter app.
Because of these two reasons I’d like to start at the command-line level to show where GUIs fall short but also teach you some neat things it can do.
When working with movie media we always have to deal with container formats. You can think of a container just as in the real world. It contains one or more streams of media. When you think of a movie container, it generally has two streams inside of it. One video stream, and one audio stream. If you want to be able to switch the audible language, for instance, a second audio stream has to be added. Makes sense, right?
Containers, again, come in all sorts of flavours. AVI, QuickTime Movie (MOV), MPEG-4, Matroska Video (MKV). The beauty is that those container formats are somewhat interchangeable, because the formats the streams are in, are supported by multiple containers. One of those formats is MPEG-4 Video and MPEG-4 Audio.
FFmpeg is able to “convert” a video from one format to the other by basically unpacking what’s inside one of those containers, and wrapping it in another container. To do this you can use the
ffmpeg -i input.mkv -codec copy output.mp4
There’s quite some information in this short command.
-i. This determines the
input file. Second, the extension of the written movie,
mp4, determines the container format FFmpeg attempts to write to. I write attempt because if the resulting container can’t use any of the streams of the original file, even FFmpeg can’t write it with the previous command.
-codec copy tells FFmpeg to try to reuse the audio and video stream. If any of the two fail, you can try to copy just one. The commands are simply
-vcodec copy and
-acodec copy, resepectively.
This is known in GUI converters as “fast conversion”, sometimes, or muxing. It’s a fast conversion because FFmpeg doesn’t do any actual processing of the images. It merely copies everything to a new format. This means conversion speed is mainly determined by the speed at which your hard disk can read the data. Therefore a fast drive is going to increase the operation.
In case neither streams can be used, or one fails to convert, you can try to “quality scale” to the resulting format. In this mode, FFmpeg tries to be somewhat intelligent and picks a conversion setting that emulates the original files’ encoding to produce the resulting format (but it does so at a variable bitrate).
ffmpeg -i input.mkv -qscale 0 output.mp4
qscale of 0 means the quality scaless 1:1 compared to the original file.
Keeping these two basic commands in mind, we can look at GUI converters with a different eye. All converters can convert, but only a handful
copy. It is rare to be found in GUI converters because FFmpeg is just a command-line utility. If
copy fails, the GUI produces lots of textual output, or it produces only a few lines, that simply say “can’t convert”. That part is harder to figure out programmatically, and because that is harder to figure out, only few apps implement it.
I personally prefer to use a GUI app for pure convenience. FFmpeg can do many many more things than what I just described, and the more things it’s supposed to do, the longer the command becomes.
At the moment my favorite GUI’s are:
Not particularly in that order, but HandBrake is my least favorite, though my most recommended, to someone else who only needs to convert videos from time to time.
I like Reggie Ashworth’s VidConvert because he doesn’t make a huge deal out of using FFmpeg. You start the App Store version and it tells you to download FFmpeg from some website. He calls it “conversion engine”. Once the conversion engine has been downloaded, the app is functional. The conversion engine is distributed separately and is advertised to be useable without VidConvert, even. Just download the binary and use it at the command-line level. Easy.
VideoConverterPro is made by Wondershare. I know what you’re thinking, “crapware”. That is essentially true although not be it entirely true. VideoConverterPro is the only app that I found that supports “fast conversion”. The app is also not free. My major complaint is that it can’t delete converted files once they are converted.
HandBrake is the most convenient of all of them. It’s a very versatile utility, the app is free, it is cross-platform, actively supported, etc. Essentially everything you want to have from a converter, except it doesn’t do
copy as easily. It has an advanced panel which can be activated in the preferences. To get it to fast convert though, is a bit more complicated. Batch converting something like 100 files is very inconvenient.
So my recommendation at this point is either VideoConverterPro or HandBrake. Both are great apps, though they lack in one way or another.
Another concept that I’d like to introduce in this post is mapping. Mapping basically allows you to use more input files to “map” a stream into the resulting file. This can easily be done on the command-line like so:
ffmpeg -i input.mkv -i german_audio.mp3 -map 0:v -map 1:a output.mp4
output.mp4 with video from the
.mkv file, and audio from the
.mp3. I show in the tutorial “Podcasting Audio and Video with Final Cut Pro X?”, how I use this feature. It’s really powerful.
To get metadata to show up in iTunes, you can use various specific scripts that circulate the internet. If you want something more convenient there are apps in the App Store that support your doing.
The most convenient tool is iFlicks. It does not only fetch metadata from sources like IMdB, it also does “fast conversion”. iFlicks is very expensive though.
MetaZ is a successor of MetaX. It is a MP4 metadata editor, which can fetch movie information from the internet. The tool is terrible to use, though it gets the job done. That means it does what it says, but it does so ineffeciently. Use this if buying is not an option.
These two apps are much more comfortable to use than MetaZ, but they don’t do any conversion by themselves, like iFlicks does. This makes them very lightweight but also not as universal. In combination with a converter app, these are really useful.
I hope this post was helpful. Please spread it with your friends!