This page holds my notes on using ffmpeg for typical (and atypical) conversions, largely thanks to the mess that the consumer electronics industry has made of standards (see also MKV, which is the format I favored for ripping my kids’ DVDs to avoid them chewing the discs to pieces until I switched to an Apple TV and decided to just go with multi-track MP4).

Converting AAC 5.1 surround sound to AC3

This can be done on an ARM machine with remarkably little CPU power, since you’ll simply be copying video across without touching it:

ffmpeg -i file_with_aac_surround_.mp4 -vcodec copy -acodec ac3 -ac 6 -ar 48000 -ab 448k file_with_ac3.mp4 

Extracting thumbnails from videos

I was once asked to make it easier to navigate a set of videos on a WDTV media player and, after looking around for alternatives, eventually came up with the following Python snippet, which is designed to be dropped into an Automator workflow.

It takes a list of files on standard input and then invokes ffmpeg to extract a thumbnail 30s into the video. sips is then used to resample that image to a smaller size, preserving the aspect ratio:

import sys, os, re

# Handle only these file extensions
pattern = re.compile("^(.+)\.(divx|mov|avi|3gp|wmv|mp4|mkv)$", re.IGNORECASE)

for f in sys.stdin:
  f = f.strip()
  matches = pattern.match(f)
  if matches:
    base = matches.group(1)
    thumb = "%s.jpg" % base
    if os.path.exists(thumb) and os.path.getsize(thumb):
      continue # skip existing non-null files
    os.system("/usr/local/bin/ffmpeg -i '%s' -deinterlace -an -ss 30 -t 00:00:01 -r 1 -y -vcodec mjpeg -f mjpeg '%s' 2>&1" % (f, thumb))
    if os.path.exists(thumb):
      # tweaked rendering to attempt a vertical thumbnail with a center crop
      os.system("/usr/bin/sips '%s' --resampleHeight 160 --cropToHeightWidth 160 120 --out '%s'" % (thumb, thumb))

There’s also a Windows one-liner I was sent that may help:

for %i in (*.avi) do ffmpeg -i "%i" -f mjpeg -t 0.001 -ss 30 -y "%~ni.jpg"

Transcoding for mobile devices:

João Neves sent over this one-liner for transcoding to Android or iOS devices. The bitrate (-b) can vary from 600k to 1000k for the latter, and 600k reportedly works well for the HTC Magic:

ffmpeg -i input.avi -acodec libfaac -ab 128k -vcodec mpeg4 -b 600k -mbd 2 -cmp 2 -subcmp 2 -s 320x180 output.mp4

Other Tools:

  • remux is able to change envelope without re-encoding, do track re-ordering and audio transcoding.