Back to Silas S. Brown's home page

Notes on video conversion with mencoder

These are some quick notes I made to provide starting points for mencoder command lines. It is meant for conversions that are legal (own work, personal use of products without DRM, etc). I am not an mencoder expert but just collected some options that worked for me.

Input from: DVD | video file | rtmp stream | Flash audio | edits | audio file | language merge | desktop | pictures
Output to: Android, iPhone or Mac | Nokia S60, S40 etc | Windows or Windows Mobile | MP3 audio | DVD, VCD or SVCD


Input options

DVD

.flv and other video files

rtmp streams embedded in complex Javascript etc

You need root access to a Linux box with rtmpdump

Flash audio (e.g. BBC Radio's "Listen Again" service)

On a Linux box with ~/.asoundrc set to
pcm.teeraw { type empty
slave.pcm "tee:default,'/tmp/out.raw',raw" }

use FLASH_ALSA_DEVICE=teeraw firefox and (e.g.) sox -t raw -r 44100 -c 2 -b 16 -s /tmp/out.raw /tmp/out.wav then proceed with out.wav. (To reduce risk of /tmp/out.raw being overwritten, start sox before interacting with the browser to stop the stream.)

Edit decision lists

Use -edl filename, where each line of the file is start-second end-second 0 (use mplayer to find the seconds and to test the EDL). You can add up the total number of minutes you've cut by piping the EDL through python -c 'import sys;print sum(float(l.split()[1])-float(l.split()[0]) for l in sys.stdin)/60.0'

Audio file (static or blank picture)

This might be useful for porting audio to old DVD players that don't support MP3 etc. You need to first add the audio to blank video using ffmpeg: (command adapted from Stefano Sabatini's suggestion on ffmpeg-user)
ffmpeg -i input-audio.wav -s 640x480 -f rawvideo -pix_fmt rgb24 -r 25 -i /dev/zero -shortest -vcodec libx264 -preset medium -tune stillimage -crf 24 -acodec copy output.mkv
then proceed with output.mkv (convert it to .mpg as per DVD output below, etc) You can also use ffmpeg to attach audio to a still image:
ffmpeg -i audio.mp3 -loop 1 -i picture.jpg -shortest -vcodec mpeg4 -b:v 800k audio.avi
(then convert audio.avi into the required output format)
Or to replace the soundtrack of an existing video (for language dubbing etc),
ffmpeg -i video.mp4 -i sound.wav -map 0:v -map 1:a -vcodec copy output.mkv
then proceed with output.mkv

Two language versions

If a video is available in two versions with different-language sound tracks, this command will place the languages into two stereo channels of a WAV file:

Then, to keep the picture from the first file, do:
ffmpeg -i input1.mp4 -i audio.wav -map 0:v -map 1:a -vcodec copy output.mkv
and proceed with output.mkv (if it lacks sound, it's probably an ffmpeg version issue: try -b:v 10000k output.mp4 instead of -vcodec copy output.mkv).

Or if the pictures differ as well (for example on-screen text has been translated) then you might wish to show both pictures at once. The following command will do that, positioning them diagonally to reduce peripheral-motion annoyance when trying to watch only one.

ffmpeg -i input1.mp4 -i input2.mp4 -i audio.wav -filter_complex '[0:v]pad=iw*2:ih*2:0:ih[tmp]; [tmp][1:v]overlay=W/2:0[pic]' -map '[pic]' -map 2:a -b:v 3000k output.mp4

Recording the desktop

Linux/X11 region around mouse, audio from microphone:
ffmpeg -f alsa -i pulse -f x11grab -follow_mouse 100 -show_region 1 -r 25 -i "$DISPLAY" output.mkv DOSBox (audio from programs): in dosbox.conf (or ~/Library/Preferences/DOSBox* on Mac) set the captures= directory to something (e.g. /tmp) and the default start/stop keybinding Ctrl-Alt-F5 (or Ctrl-F6 for audio only). Beware at least some versions of DOSBox can partially lose videos in some circumstances.

Mac OS X: "QuickTime Player" despite its name is not just a player. Its File menu contains options to record the screen (or part of it) with optional microphone narration, or to record from camera. Results are placed in ~/Movies

Series of pictures

You could just do (for example) mencoder 'mf://*.jpg' -mf fps=0.2 but it's sometimes possible for mencoder to crash on signal 11 as it tries to scale pictures, so it might be worth pre-scaling, for example for PAL DVD: for N in *.jpg ; do jpegtopnm "$N" | pnmscale -xysize 720 576 | pnmpad -black -width 720 -height 576 | pnmtopng > "$(echo "$N"|sed -e s/jpg$/png/)";done (followed by the mencoder command on *.png, or on @listfile to ensure it processes them in the correct order)

Output options

Android, iPhone or Mac

-of lavf -lavfopts format=mp4 -vf dsize=480:352:2,scale=0:0,harddup -ovc x264 -sws 9 -x264encopts bitrate=512:bframes=0:chroma_me:me=umh:frameref=6:global_header:level_idc=30:nocabac:partitions=all:subq=5:threads=auto:trellis=1 -oac faac -faacopts mpeg=4:object=2:raw:br=128 -o output.mp4

Nokia S60, S40 etc

-ofps 24 -of lavf -lavfopts format=mp4 -vf dsize=320:240:2,scale=0:0 -oac lavc -ovc lavc -lavcopts aglobal=1:vglobal=1:acodec=libfaac:abitrate=96:vcodec=mpeg4 -o output.mp4

Windows or Windows Mobile

MP3 audio

(any picture will be discarded)
-ovc copy -of rawaudio -oac mp3lame -lameopts vbr=2:q=9:aq=0 -o output.mp3

DVDs and VCDs

(based on mencoder documentation with some changes) See also spaced-out audio tracks with cdrdao
All material © Silas S. Brown unless otherwise stated.