- Website: http://ffmpeg.org/
- Building for Mac: http://stephenjungels.com/jungels.net/articles/ffmpeg-howto.html
- User-level howto: http://howto-pages.org/ffmpeg/
- FFmpeg x264 encoding guide: http://rob.opendot.cl/index.php/useful-stuff/ffmpeg-x264-encoding-guide/
Conversion of screen captures
Record Linux screen using gtk-recordmydesktop → .ogv file.
To simply convert to Mac-readable format:
ffmpeg -i capture.ogv -sameq capture.mov
Sometimes it is easiest to capture the whole desktop and crop during conversion:
ffmpeg -i capture.ogv -cropbottom 304 -aspect 16:9 -sameq capture.mov
Skip ahead 20 second and convert 30 seconds:
ffmpeg -i capture.ogv -ss 20 -t 30 -cropbottom 304 -aspect 16:9 -sameq capture.mov
Transcoding AVCHD MTS files on Linux
Convert Canon AVCHD (MTS) file to something that can be processed by kdenlive:
ffmpeg -i XYZ.MTS -sameq -s hd480 -ab 256k xyz.mov
Assumes libav* installed from Medibuntu. By default, ffmpeg will use MPEG-4 codec for the MOV container.
Initially, I used "-acodec copy" but VLC could not play the sound in the output file. Therefore, I let it transcode the audio as wekk but keep the bitrate high.
High quality screen capture with Ffmpeg
See also: High quality screen capture with avconv
Capture without audio
ffmpeg -f x11grab -r 25 -s 1280x720 -i :0.0+0,24 -vcodec libx264 -vpre lossless_ultrafast -threads 0 video.mkv
Compress and convert to MP4 format (Youtube ready):
ffmpeg -i video.mkv -vcodec libx264 -vpre hq -crf 22 -threads 0 video.mp4
Lower -crf may give higher quality but for screen captures the improvement is only marginal. For post processing in iMovie or Final Cut Express better to use .mov container in the above conversion.
If ffmpeg complains that it has no hq preset, then try some of the others. Look for .ffpreset files in /usr/share/ffmpeg/. I had good success with -vpre medium (actually it might be the same as hq used to be).
Capturing with audio
ffmpeg -f alsa -i pulse -f x11grab -r 25 -s 1280x720 -i :0.0+0,24 -acodec pcm_s16le -vcodec libx264 -vpre lossless_ultrafast -threads 0 output.mkv
If you get "Application provided invalid, non monotonically increasing dts to muxer" errors try using MOV container instead.
In order to make ffmpeg capture audio from other applications:
- Start the ffmpeg capture (it just has to run)
- Start pavucontrol
- In the Recording tab, ffmpeg should be visible and here we can choose between input and monitor
The settings will be remembered until we change them back.
Other useful audio options to adjust:
- -ac: Channels
- -ar: Audio sample rate
- -ab: Audio bitrate
- This does not work with Java running in firefox. In fact, it does not seem to work with applications that play through the pulseaudio ALSA plugin.
The audio output can also be captured with gstreamer:
gst-launch -e pulsesrc device="alsa_output.pci-0000_00_1b.0.analog-stereo.monitor" ! audioconvert ! \ lamemp3enc target=1 bitrate=128 cbr=true ! filesink location=output.mp3
where the device name is the one returned by
pactl list | grep -A2 'Source #' | grep 'Name: ' | cut -d" " -f2
Can we use this device name in ffmpeg recording?
- How to do Proper Screencasts on Linux Using Ffmpeg: http://verb3k.wordpress.com/2010/01/26/how-to-do-proper-screencasts-on-linux/