Fun with FFmpeg

So I’m browsing YouTube the other day and I come across a catchy music video and I’d really like to download it and play it over and over again at home and while I’m out and about; you know, to annoy people. :)

Downloading a video from YouTube is pretty easy these days thanks to various browser extensions; and if the downloaded video is in a .mp4 container, I don’t have do anything since just about any video player, including my 1st generation PopcornHour reads them just fine. But some videos on YouTube are stuffed into .flv containers. So for those videos in .flv format, I want to convert them into .mp4 files at least, or something better. Additionally, for music videos I sometimes want just the audio; so I can play it in my car or with my desktop audio player. So an additional task is to extract just the audio into an audio container. On top of that, I would rather not re-encode the video or audio, I just want to extract it and stick it into a different container.

What’s a container you ask? Think of it as the box you stuff your media into. In the analog world of records, film, and such, the container would be the film strip, the vinyl record, or the magnetic tape inside a cassette tape. The actual audio and video information in those formats is put into those containers either by scratching it into the surface (in the case of records), using magnets (in the case of magnetic tape), or through a chemical photographic process that burns images into an emulsion on a film strip.

In a computer, audio and video exist as streams of data (think: long lines of ones and zeros). To make use of these streams, they need to be put into a container. In the analog world the container forces a particular format on the data it holds. For example, a magnetic tape would be destroyed if you ran it through the machine used to scratch tracks into blank master records. This restriction also exists in the digital realm to an extent; some containers are only able to contain certain types of information. Other containers, however, are very capable and can hold multiple audio, video, and subtitle streams.

So, back to my original problem; how to move streams between different containers. Well, it’s really easy with FFmpeg. Yes it requires a trip to the command-line, but it’s pretty painless.

FFmpeg is probably already installed on your Linux box (a lot of other programs use it). And if it’s not, your package manger should have a copy. Refer to your distribution’s documentation for instructions on getting it installed.

To test to see if you have it installed, open up a terminal and type ‘ffmpeg’ and then press Enter. If it is installed you will see something similar to the following:

me@mybox:~$ ffmpeg
FFmpeg version SVN-r0.5.1-4:0.5.1-1ubuntu1, Copyright (c) 2000-2009 Fabrice Bellard, et al.
configuration: --extra-version=4:0.5.1-1ubuntu1 --prefix=/usr --enable-avfilter --enable-avfilter-lavf --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --disable-stripping --disable-vhook --enable-runtime-cpudetect --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static
libavutil 49.15. 0 / 49.15. 0
libavcodec 52.20. 1 / 52.20. 1
libavformat 52.31. 0 / 52.31. 0
libavdevice 52. 1. 0 / 52. 1. 0
libavfilter 0. 4. 0 / 0. 4. 0
libswscale 0. 7. 1 / 0. 7. 1
libpostproc 51. 2. 0 / 51. 2. 0
built on Mar 4 2010 12:35:30, gcc: 4.4.3
At least one output file must be specified

The above is output every time you run ffmpeg, so I’ll strip it from future examples.

So let’s say I’ve downloaded this cool song from YouTube:

me@mybox:~/tmp$ ls
cool-song.flv

The first thing I want to do is find out what is inside the .flv container. This is easy with FFmpeg:

me@mybox:~/tmp$ ffmpeg -i cool-song.flv
...skipped stuff...
Seems stream 0 codec frame rate differs from container frame rate: 59.94 (2997/50) -> 29.92 (359/12)
Input #0, flv, from 'cool-song.flv':
Duration: 00:03:15.96, start: 0.000000, bitrate: 514 kb/s
Stream #0.0: Video: h264, yuv420p, 480x360 [PAR 1:1 DAR 4:3], 514 kb/s, 29.92 tbr, 1k tbn, 59.94 tbc
Stream #0.1: Audio: aac, 44100 Hz, stereo, s16
At least one output file must be specified

I’ve put boxes around the important bits in the output above.

So now I know that the video inside the .flv is h264 and the audio is aac. My PopcornHour can play both of those, they just need to be in a supported container. To do so, do the following:

me@mybox:~/tmp$ ffmpeg -i cool-song.flv \
> -acodec copy \
> -vcodec copy \
> cool-song.mkv

Seems stream 0 codec frame rate differs from container frame rate: 59.94 (2997/50) -> 29.92 (359/12)
Input #0, flv, from 'cool-song.flv':
Duration: 00:03:15.96, start: 0.000000, bitrate: 514 kb/s
Stream #0.0: Video: h264, yuv420p, 480x360 [PAR 1:1 DAR 4:3], 514 kb/s, 29.92 tbr, 1k tbn, 59.94 tbc
Stream #0.1: Audio: aac, 44100 Hz, stereo, s16
Output #0, matroska, to 'cool-song.mkv':
Stream #0.0: Video: libx264, yuv420p, 480x360 [PAR 1:1 DAR 4:3], q=2-31, 514 kb/s, 90k tbn, 29.97 tbc
Stream #0.1: Audio: libfaac, 44100 Hz, stereo, s16
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press [q] to stop encoding
frame= 5874 fps= 0 q=-1.0 Lsize= 14807kB time=196.00 bitrate= 618.9kbits/s
video:11991kB audio:2714kB global headers:0kB muxing overhead 0.690280%

I split the FFmpeg command into four lines so I can explain what each part is doing:

ffmpeg -i cool-song.flv \ # Specify the input file
> -acodec copy \ # I want to copy the audio track
> -vcodec copy \ # I want to copy the video track too
> cool-song.mkv # specify the output filename and container

After -acodec and -vcodec I could have easily told FFmpeg to convert the audio or video into different formats, but why bother if my player can play them just fine? (I know, I know, patents. But let’s not get into that now, Ok?) Likewise I could have specified ‘.mp4′, ‘.avi’, or any other container supported by FFmpeg which in turn supports h264 video streams and aac audio streams. I happen to like .mkv (Matroska) containers, so that’s what I went with.

Since I am having FFmpeg just take the streams from one container and stuff them into another, the process is very fast. About the same amount of time it would take to copy the original file from one disk to another.

How about extracting just the audio? Well, for that I keep the -acodec line and omit the -vcodec line like so:

me@mybox:~/tmp$ ffmpeg -i cool-song.flv \
> -acodec copy \
> cool-song.aac

Seems stream 0 codec frame rate differs from container frame rate: 59.94 (2997/50) -> 29.92 (359/12)
Input #0, flv, from 'cool-song.flv':
Duration: 00:03:15.96, start: 0.000000, bitrate: 514 kb/s
Stream #0.0: Video: h264, yuv420p, 480x360 [PAR 1:1 DAR 4:3], 514 kb/s, 29.92 tbr, 1k tbn, 59.94 tbc
Stream #0.1: Audio: aac, 44100 Hz, stereo, s16
Output #0, adts, to 'cool-song.aac':
Stream #0.0: Audio: libfaac, 44100 Hz, stereo, s16
Stream mapping:
Stream #0.1 -> #0.0
Press [q] to stop encoding
size= 2772kB time=196.51 bitrate= 115.6kbits/s
video:0kB audio:2714kB global headers:0kB muxing overhead 2.131281%

For an aac audio stream, the container that makes the most sense is obviously .aac, so that’s what I used.

That’s all there is to it. Moving audio and video streams between different containers is easy.

That’s it for the meat of this entry. I do want to point out a gotcha with FFmpeg and containers and show the list of every format and container my copy of FFmpeg can work with, but you don’t have to stick around if you don’t want to.

A note about Containers

FFmpeg knows the common extensions for the various codecs, so there’s no need to explicitly specify the container, just name the file with the appropriate extension and FFmpeg will figure it out. One gotcha though: FFmpeg will sometimes protect you from doing something stupid, but not always. For example, it will happily stuff the h264 video stream and aac audio stream into a .mp3 file. Just because it will do such a thing doesn’t mean you will like the result. I tried it on my example file and after it was done I had a file that not even FFmpeg could read properly:

me@mybox:~/tmp$ ffmpeg -i cool-song.flv \
> -acodec copy -vcodec copy cool-song.mp3

Seems stream 0 codec frame rate differs from container frame rate: 59.94 (2997/50) -> 29.92 (359/12)
Input #0, flv, from 'cool-song.flv':
Duration: 00:03:15.96, start: 0.000000, bitrate: 514 kb/s
Stream #0.0: Video: h264, yuv420p, 480x360 [PAR 1:1 DAR 4:3], 514 kb/s, 29.92 tbr, 1k tbn, 59.94 tbc
Stream #0.1: Audio: aac, 44100 Hz, stereo, s16
Output #0, mp3, to 'cool-song.mp3':
Stream #0.0: Video: libx264, yuv420p, 480x360 [PAR 1:1 DAR 4:3], q=2-31, 514 kb/s, 90k tbn, 29.97 tbc
Stream #0.1: Audio: libfaac, 44100 Hz, stereo, s16
Stream mapping:
Stream #0.0 -> #0.0
Stream #0.1 -> #0.1
Press [q] to stop encoding
frame= 5874 fps= 0 q=-1.0 Lsize= 14705kB time=196.00 bitrate= 614.6kbits/s
video:11991kB audio:2714kB global headers:0kB muxing overhead 0.000213%

me@mybox:~/tmp$ ffmpeg -i cool-song.mp3
[mp3 @ 0x8499a60]Could not find codec parameters (Audio: mp1, 0 channels, s16)
cool-song.mp3: could not find codec parameters

You have been warned. :)

Supported Formats

FFmpeg supports a lot of different formats. The exact ones depends on how your copy of FFmpeg was configured when it was compiled. To see what your local copy of FFmpeg supports, use the -formats option. According to the FFmpeg man page, “[t]he fields preceding the format and codec names have the following meanings:

  • D Decoding available
  • E Encoding available
  • V/A/S Video/audio/subtitle codec
  • S Codec supports slices
  • D Codec supports direct rendering
  • T Codec can handle input truncated at random locations instead of only at frame boundaries

I’ve been saving this for last because the list is really long:

me@mybox:~/tmp$ ffmpeg -formats
File formats:
E 3g2 3GP2 format
E 3gp 3GP format
D 4xm 4X Technologies format
D IFF IFF format
D ISS Funcom ISS format
D MTV MTV format
DE RoQ raw id RoQ format
D aac raw ADTS AAC
DE ac3 raw AC-3
E adts ADTS AAC
DE aiff Audio IFF
DE alaw PCM A-law format
DE alsa ALSA audio output
DE amr 3GPP AMR file format
D apc CRYO APC format
D ape Monkey's Audio
DE asf ASF format
E asf_stream ASF format
DE ass SSA/ASS format
DE au SUN AU format
DE avi AVI format
E avm2 Flash 9 (AVM2) format
D avs AVS format
D bethsoftvid Bethesda Softworks VID format
D bfi Brute Force & Ignorance
D c93 Interplay C93
D cavsvideo raw Chinese AVS video
E crc CRC testing format
DE daud D-Cinema audio format
DE dirac raw Dirac
DE dnxhd raw DNxHD (SMPTE VC-3)
D dsicin Delphine Software International CIN format
DE dts raw DTS
DE dv DV video format
D dv1394 DV1394 A/V grab
E dvd MPEG-2 PS format (DVD VOB)
D dxa DXA
D ea Electronic Arts Multimedia Format
D ea_cdata Electronic Arts cdata
DE eac3 raw E-AC-3
DE f32be PCM 32 bit floating-point big-endian format
DE f32le PCM 32 bit floating-point little-endian format
DE f64be PCM 64 bit floating-point big-endian format
DE f64le PCM 64 bit floating-point little-endian format
DE ffm FFM (FFserver live feed) format
D film_cpk Sega FILM/CPK format
DE flac raw FLAC
D flic FLI/FLC/FLX animation format
DE flv FLV format
E framecrc framecrc testing format
E gif GIF Animation
D gsm raw GSM
DE gxf GXF format
DE h261 raw H.261
DE h263 raw H.263
DE h264 raw H.264 video format
D idcin id Cinematic format
DE image2 image2 sequence
DE image2pipe piped image2 sequence
D ingenient raw Ingenient MJPEG
D ipmovie Interplay MVE format
E ipod iPod H.264 MP4 format
D libdc1394 dc1394 v.2 A/V grab
D lmlm4 lmlm4 raw format
DE m4v raw MPEG-4 video format
DE matroska Matroska file format
DE mjpeg raw MJPEG video
D mlp raw MLP
D mm American Laser Games MM format
DE mmf Yamaha SMAF
E mov MOV format
D mov,mp4,m4a,3gp,3g2,mj2 QuickTime/MPEG-4/Motion JPEG 2000 format
E mp2 MPEG audio layer 2
DE mp3 MPEG audio layer 3
E mp4 MP4 format
D mpc Musepack
D mpc8 Musepack SV8
DE mpeg MPEG-1 System format
E mpeg1video raw MPEG-1 video
E mpeg2video raw MPEG-2 video
DE mpegts MPEG-2 transport stream format
D mpegtsraw MPEG-2 raw transport stream format
D mpegvideo raw MPEG video
E mpjpeg MIME multipart JPEG format
D msnwctcp MSN TCP Webcam stream
DE mulaw PCM mu-law format
D mvi Motion Pixels MVI format
DE mxf Material eXchange Format
E mxf_d10 Material eXchange Format, D-10 Mapping
D nc NC camera feed format
D nsv Nullsoft Streaming Video
E null raw null video format
DE nut NUT format
D nuv NuppelVideo format
DE ogg Ogg
D oma Sony OpenMG audio
DE oss Open Sound System playback
E psp PSP MP4 format
D psxstr Sony Playstation STR format
D pva TechnoTrend PVA file and stream format
D r3d REDCODE R3D format
DE rawvideo raw video format
E rcv VC-1 test bitstream
D redir Redirector format
D rl2 RL2 format
DE rm RealMedia format
D rpl RPL/ARMovie format
E rtp RTP output format
D rtsp RTSP input format
DE s16be PCM signed 16 bit big-endian format
DE s16le PCM signed 16 bit little-endian format
DE s24be PCM signed 24 bit big-endian format
DE s24le PCM signed 24 bit little-endian format
DE s32be PCM signed 32 bit big-endian format
DE s32le PCM signed 32 bit little-endian format
DE s8 PCM signed 8 bit format
D sdp SDP
D shn raw Shorten
D siff Beam Software SIFF
D smk Smacker video
D sol Sierra SOL format
E svcd MPEG-2 PS format (VOB)
DE swf Flash format
D thp THP
D tiertexseq Tiertex Limited SEQ format
D tta True Audio
D txd Renderware TeXture Dictionary
DE u16be PCM unsigned 16 bit big-endian format
DE u16le PCM unsigned 16 bit little-endian format
DE u24be PCM unsigned 24 bit big-endian format
DE u24le PCM unsigned 24 bit little-endian format
DE u32be PCM unsigned 32 bit big-endian format
DE u32le PCM unsigned 32 bit little-endian format
DE u8 PCM unsigned 8 bit format
D vc1 raw VC-1
D vc1test VC-1 test bitstream format
E vcd MPEG-1 System format (VCD)
D video4linux Video4Linux device grab
D video4linux2 Video4Linux2 device grab
D vmd Sierra VMD format
E vob MPEG-2 PS format (VOB)
DE voc Creative Voice file format
DE wav WAV format
D wc3movie Wing Commander III movie format
D wsaud Westwood Studios audio format
D wsvqa Westwood Studios VQA format
D wv WavPack
D x11grab X11grab
D xa Maxis XA File Format
DE yuv4mpegpipe YUV4MPEG pipe format

Codecs:
D V 4xm 4X Movie
D V D 8bps QuickTime 8BPS video
D A 8svx_exp 8SVX exponential
D A 8svx_fib 8SVX fibonacci
D A aac Advanced Audio Coding
D V D aasc Autodesk RLE
DEA ac3 ATSC A/52A (AC-3)
D A adpcm_4xm ADPCM 4X Movie
DEA adpcm_adx SEGA CRI ADX ADPCM
D A adpcm_ct ADPCM Creative Technology
D A adpcm_ea ADPCM Electronic Arts
D A adpcm_ea_maxis_xa ADPCM Electronic Arts Maxis CDROM XA
D A adpcm_ea_r1 ADPCM Electronic Arts R1
D A adpcm_ea_r2 ADPCM Electronic Arts R2
D A adpcm_ea_r3 ADPCM Electronic Arts R3
D A adpcm_ea_xas ADPCM Electronic Arts XAS
D A adpcm_ima_amv ADPCM IMA AMV
D A adpcm_ima_dk3 ADPCM IMA Duck DK3
D A adpcm_ima_dk4 ADPCM IMA Duck DK4
D A adpcm_ima_ea_eacs ADPCM IMA Electronic Arts EACS
D A adpcm_ima_ea_sead ADPCM IMA Electronic Arts SEAD
D A adpcm_ima_iss ADPCM IMA Funcom ISS
DEA adpcm_ima_qt ADPCM IMA QuickTime
D A adpcm_ima_smjpeg ADPCM IMA Loki SDL MJPEG
DEA adpcm_ima_wav ADPCM IMA WAV
D A adpcm_ima_ws ADPCM IMA Westwood
DEA adpcm_ms ADPCM Microsoft
D A adpcm_sbpro_2 ADPCM Sound Blaster Pro 2-bit
D A adpcm_sbpro_3 ADPCM Sound Blaster Pro 2.6-bit
D A adpcm_sbpro_4 ADPCM Sound Blaster Pro 4-bit
DEA adpcm_swf ADPCM Shockwave Flash
D A adpcm_thp ADPCM Nintendo Gamecube THP
D A adpcm_xa ADPCM CDROM XA
DEA adpcm_yamaha ADPCM Yamaha
DEA alac ALAC (Apple Lossless Audio Codec)
D V amv AMV Video
D A ape Monkey's Audio
DEV D asv1 ASUS V1
DEV D asv2 ASUS V2
D A atrac3 Atrac 3 (Adaptive TRansform Acoustic Coding 3)
D V D avs AVS (Audio Video Standard) video
D V bethsoftvid Bethesda VID video
D V bfi Brute Force & Ignorance
DEV bmp BMP image
D V D c93 Interplay C93
D V D camstudio CamStudio
D V D camtasia TechSmith Screen Capture Codec
D V D cavs Chinese AVS video (AVS1-P2, JiZhun profile)
D V D cinepak Cinepak
D V D cljr Cirrus Logic AccuPak
D A cook COOK
D V D cyuv Creative YUV (CYUV)
D A dca DCA (DTS Coherent Acoustics)
DEV D dnxhd VC3/DNxHD
D A dsicinaudio Delphine Software International CIN audio
D V D dsicinvideo Delphine Software International CIN video
DES dvbsub DVB subtitles
DES dvdsub DVD subtitles
DEV D dvvideo DV (Digital Video)
D V dxa Feeble Files/ScummVM DXA
D A eac3 ATSC A/52B (AC-3, E-AC-3)
D V D eacmv Electronic Arts CMV video
D V D eatgq Electronic Arts TGQ video
D V eatgv Electronic Arts TGV video
D V D eatqi Electronic Arts TQI Video
D V D escape124 Escape 124
DEV D ffv1 FFmpeg codec #1
DEVSD ffvhuff Huffyuv FFmpeg variant
DEA flac FLAC (Free Lossless Audio Codec)
DEV D flashsv Flash Screen Video
D V D flic Autodesk Animator Flic video
DEVSD flv Flash Video (FLV)
D V D fraps Fraps
DEA g726 G.726 ADPCM
DEV gif GIF (Graphics Interchange Format)
DEV D h261 H.261
DEVSDT h263 H.263 / H.263-1996
D VSD h263i Intel H.263
EV h263p H.263+ / H.263-1998 / H.263 version 2
D V D h264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
D V D h264_vdpau H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (VDPAU acceleration)
DEVSD huffyuv Huffyuv / HuffYUV
D V D idcinvideo id Quake II CIN video
D A imc IMC (Intel Music Coder)
D V D indeo2 Intel Indeo 2
D V indeo3 Intel Indeo 3
D A interplay_dpcm DPCM Interplay
D V D interplayvideo Interplay MVE video
DEV D jpegls JPEG-LS
D V kmvc Karl Morton's video codec
EV libdirac libdirac Dirac 2.2
EA libfaac libfaac AAC (Advanced Audio Codec)
D A libfaad libfaad AAC (Advanced Audio Codec)
DEA libgsm libgsm GSM
DEA libgsm_ms libgsm GSM Microsoft variant
EA libmp3lame libmp3lame MP3 (MPEG audio layer 3)
DEA libopencore_amrnb OpenCORE Adaptive Multi-Rate (AMR) Narrow-Band
D A libopencore_amrwb OpenCORE Adaptive Multi-Rate (AMR) Wide-Band
D V libopenjpeg OpenJPEG based JPEG 2000 decoder
DEV libschroedinger libschroedinger Dirac 2.2
D A libspeex libspeex Speex
EV libtheora libtheora Theora
EA libvorbis libvorbis Vorbis
EV libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
EV libxvid libxvidcore MPEG-4 part 2
EV ljpeg Lossless JPEG
D V D loco LOCO
D A mace3 MACE (Macintosh Audio Compression/Expansion) 3:1
D A mace6 MACE (Macintosh Audio Compression/Expansion) 6:1
D V D mdec Sony PlayStation MDEC (Motion DECoder)
D V D mimic Mimic
DEV D mjpeg MJPEG (Motion JPEG)
D V D mjpegb Apple MJPEG-B
D A mlp MLP (Meridian Lossless Packing)/TrueHD
D V D mmvideo American Laser Games MM Video
D V D motionpixels Motion Pixels video
D A mp1 MP1 (MPEG audio layer 1)
DEA mp2 MP2 (MPEG audio layer 2)
D A mp3 MP3 (MPEG audio layer 3)
D A mp3adu ADU (Application Data Unit) MP3 (MPEG audio layer 3)
D A mp3on4 MP3onMP4
D A mpc7 Musepack SV7
D A mpc8 Musepack SV8
DEVSDT mpeg1video MPEG-1 video
D V DT mpeg1video_vdpau MPEG-1 video (VDPAU acceleration)
DEVSDT mpeg2video MPEG-2 video
DEVSDT mpeg4 MPEG-4 part 2
D VSDT mpegvideo MPEG-1 video
D V DT mpegvideo_vdpau MPEG-1/2 video (VDPAU acceleration)
D VSDT mpegvideo_xvmc MPEG-1/2 video XvMC (X-Video Motion Compensation)
DEVSD msmpeg4 MPEG-4 part 2 Microsoft variant version 3
DEVSD msmpeg4v1 MPEG-4 part 2 Microsoft variant version 1
DEVSD msmpeg4v2 MPEG-4 part 2 Microsoft variant version 2
D V D msrle Microsoft RLE
D V D msvideo1 Microsoft Video 1
D V D mszh LCL (LossLess Codec Library) MSZH
DEA nellymoser Nellymoser Asao
D V D nuv NuppelVideo/RTJPEG
DEV pam PAM (Portable AnyMap) image
DEV pbm PBM (Portable BitMap) image
DEA pcm_alaw PCM A-law
D A pcm_dvd PCM signed 20|24-bit big-endian
DEA pcm_f32be PCM 32-bit floating point big-endian
DEA pcm_f32le PCM 32-bit floating point little-endian
DEA pcm_f64be PCM 64-bit floating point big-endian
DEA pcm_f64le PCM 64-bit floating point little-endian
DEA pcm_mulaw PCM mu-law
DEA pcm_s16be PCM signed 16-bit big-endian
DEA pcm_s16le PCM signed 16-bit little-endian
D A pcm_s16le_planar PCM 16-bit little-endian planar
DEA pcm_s24be PCM signed 24-bit big-endian
DEA pcm_s24daud PCM D-Cinema audio signed 24-bit
DEA pcm_s24le PCM signed 24-bit little-endian
DEA pcm_s32be PCM signed 32-bit big-endian
DEA pcm_s32le PCM signed 32-bit little-endian
DEA pcm_s8 PCM signed 8-bit
DEA pcm_u16be PCM unsigned 16-bit big-endian
DEA pcm_u16le PCM unsigned 16-bit little-endian
DEA pcm_u24be PCM unsigned 24-bit big-endian
DEA pcm_u24le PCM unsigned 24-bit little-endian
DEA pcm_u32be PCM unsigned 32-bit big-endian
DEA pcm_u32le PCM unsigned 32-bit little-endian
DEA pcm_u8 PCM unsigned 8-bit
DEA pcm_zork PCM Zork
D V pcx PC Paintbrush PCX image
DEV pgm PGM (Portable GrayMap) image
DEV pgmyuv PGMYUV (Portable GrayMap YUV) image
DEV png PNG image
DEV ppm PPM (Portable PixelMap) image
D V ptx V.Flash PTX image
D A qcelp QCELP / PureVoice
D A qdm2 QDesign Music Codec 2
D V D qdraw Apple QuickDraw
D V D qpeg Q-team QPEG
DEV D qtrle QuickTime Animation (RLE) video
DEV rawvideo raw video
D A real_144 RealAudio 1.0 (14.4K)
D A real_288 RealAudio 2.0 (28.8K)
D V D rl2 RL2 video
DEA roq_dpcm id RoQ DPCM
DEV D roqvideo id RoQ video
D V D rpza QuickTime video (RPZA)
DEV D rv10 RealVideo 1.0
DEV D rv20 RealVideo 2.0
D V D rv30 RealVideo 3.0
D V D rv40 RealVideo 4.0
DEV sgi SGI image
D A shorten Shorten
D A smackaud Smacker audio
D V smackvid Smacker video
D V D smc QuickTime Graphics (SMC)
DEV snow Snow
D A sol_dpcm DPCM Sol
DEA sonic Sonic
EA sonicls Sonic lossless
D V D sp5x Sunplus JPEG (SP5X)
D V sunrast Sun Rasterfile image
DEV D svq1 Sorenson Vector Quantizer 1
D VSD svq3 Sorenson Vector Quantizer 3
DEV targa Truevision Targa image
D V theora Theora
D V D thp Nintendo Gamecube THP video
D V D tiertexseqvideo Tiertex Limited SEQ video
DEV tiff TIFF image
D V D truemotion1 Duck TrueMotion 1.0
D V D truemotion2 Duck TrueMotion 2.0
D A truespeech DSP Group TrueSpeech
D A tta True Audio (TTA)
D V txd Renderware TXD (TeXture Dictionary) image
D V D ultimotion IBM UltiMotion
D V vb Beam Software VB
D V vc1 SMPTE VC-1
D V D vc1_vdpau SMPTE VC-1 VDPAU
D V D vcr1 ATI VCR1
D A vmdaudio Sierra VMD audio
D V D vmdvideo Sierra VMD video
D V vmnc VMware Screen Codec / VMware Video
DEA vorbis Vorbis
D V vp3 On2 VP3
D V D vp5 On2 VP5
D V D vp6 On2 VP6
D V D vp6a On2 VP6 (Flash version, with alpha channel)
D V D vp6f On2 VP6 (Flash version)
D V D vqavideo Westwood Studios VQA (Vector Quantized Animation) video
D A wavpack WavPack
DEA wmav1 Windows Media Audio 1
DEA wmav2 Windows Media Audio 2
DEVSD wmv1 Windows Media Video 7
DEVSD wmv2 Windows Media Video 8
D V wmv3 Windows Media Video 9
D V D wmv3_vdpau Windows Media Video 9 VDPAU
D V D wnv1 Winnov WNV1
D A ws_snd1 Westwood Audio (SND1)
D A xan_dpcm DPCM Xan
D V D xan_wc3 Wing Commander III / Xan
D V D xl Miro VideoXL
D S xsub XSUB
DEV D zlib LCL (LossLess Codec Library) ZLIB
DEV zmbv Zip Motion Blocks Video

Bitstream filters:
text2movsub remove_extra noise mov2textsub mp3decomp mp3comp mjpegadump imxdump h264_mp4toannexb dump_extra
Supported file protocols:
file: gopher: http: pipe: rtp: tcp: udp:
Frame size, frame rate abbreviations:
ntsc pal qntsc qpal sntsc spal film ntsc-film sqcif qcif cif 4cif

Note, the names of encoders and decoders do not always match, so there are
several cases where the above table shows encoder only or decoder only entries
even though both encoding and decoding are supported. For example, the h263
decoder corresponds to the h263 and h263p encoders, for file formats it is even
worse.

And that’s just about all I have to say about that.

4 thoughts on “Fun with FFmpeg

  1. Duncan Wannamaker

    Nice trick there. Good news for some of you lazy Windows users, FFmpeg is available for you too, not just us Linux geeks… –LINK Including some nice front ends like SUPER. (Simplified Universal Player Encoder & Renderer)

    Or if you wanna be real lazy… Just paste your YouTube link to vixy.net and let them do all the work for you. =)

  2. Scott Dowdle

    Get the latest version of ffmpeg and you can convert to Webm format. I’ve converted my entire avi library to webm and I’m pretty happy with it.

Comments are closed.