Skip to content

Codec Overview

A codec (coder/decoder) compresses and decompresses audio and video data. FFmpeg supports hundreds of codecs natively.

Listing Codecs

bash
# List all codecs
ffmpeg -codecs

# List only encoders
ffmpeg -encoders

# List only decoders
ffmpeg -decoders

# Search for specific codec
ffmpeg -encoders | grep h264

Video Codec Categories

CategoryDescriptionCodecs
H.264 familyMost widely compatiblelibx264, h264_nvenc, h264_videotoolbox
H.265 familyBetter compression, less compatibilitylibx265, hevc_nvenc, hevc_videotoolbox
VPxRoyalty-free web codecslibvpx-vp8, libvpx-vp9
AV1Newest, best compressionlibaom-av1, libsvtav1
ProResProfessional editingprores, prores_ks
DNxHDProfessional editingdnxhd
GIFAnimationgif
PNG/JPEGImagemjpeg, png

Audio Codec Categories

CategoryDescriptionCodecs
AACMost common, web streamingaac, libfdk_aac, aac_fixed
MP3Universal compatibilitylibmp3lame
OpusLow latency, voice/musiclibopus
VorbisOpen, weblibvorbis
FLACLosslessflac
PCMUncompressedpcm_s16le, pcm_s24le
AC3DVD/Blu-rayac3
E-AC3Blu-ray, streamingeac3

Copy Mode

The fastest way to transcode is copying streams when the codec doesn't need to change:

bash
# Copy all streams (container conversion only)
ffmpeg -i input.mkv -c copy output.mp4

# Copy video, re-encode audio
ffmpeg -i input.mkv -c:v copy -c:a aac output.mp4

# Copy audio, re-encode video
ffmpeg -i input.mkv -c:v libx264 -preset fast -crf 22 -c:a copy output.mp4

Copy-Specific Options

bash
# Copy with stream selection
ffmpeg -i input.mkv \
  -map 0:v:0 -map 0:a:1 -map 0:s \
  -c:v copy -c:a copy -c:s copy \
  output.mp4

Choosing a Codec

Use CaseRecommended VideoRecommended Audio
Web (MP4)libx264aac
Web (WebM)libvpx-vp9libopus
ArchivalFFV1FLAC
EditingProRes 422 HQ / DNxHDPCM
Streaminglibx264 / h264_nvencaac / libopus
Mobilelibx264aac
GIFgif / palettegen
Ultra-low latencyh264_nvenclibopus

Released under the MIT License.