Convert AVI to MP4 with H.264 and AAC (the broadly compatible combo)
AVI is still common in legacy workflows, surveillance footage, and some scientific capture pipelines. Converting to MP4 with H.264 video and AAC audio gives you a file that plays everywhere, from phones to browsers to TVs, at reasonable size.
The command
ffmpeg -i input.avi -c:v libx264 -c:a aac output.mp4What it does
FFmpeg decodes whatever AVI holds (often MJPEG, MPEG-4, or DV), re-encodes the video with the x264 implementation of H.264, re-encodes audio to AAC, and muxes both into the MP4 container. Defaults are sensible: H.264 lands at CRF 23 with a medium preset, AAC at 128 kbps stereo, and the MP4's mov_text faststart flag is on, so the file is web-streaming ready.
When to use it
Whenever the destination is a modern player or browser, and you do not need to preserve the original codec. H.264/AAC inside MP4 is the de-facto universal combo and is the right default unless you have a reason to use HEVC, AV1, or VP9.
Video and audio requirements
The source can be any AVI variant FFmpeg can decode, including DV, MJPEG, MPEG-4 Part 2, and uncompressed. The output assumes a 4:2:0 chroma subsampling and 8-bit depth, which is the H.264 baseline. For 10-bit or 4:4:4 sources, add -pix_fmt yuv420p10le or use HEVC instead.
Things to avoid
- Leaving the default CRF 23 if you care about file size. CRF 28 is visually transparent for most content and halves the bitrate; CRF 18 is overkill for delivery.
- Converting to MP4 if the source is already H.264/AAC. Use remux (
-c copy) instead, it is lossless and takes seconds. - Ignoring interlaced sources. AVI from old cameras is often interlaced; add
-vf yadifto deinterlace or the output will have comb artifacts on progressive displays. - Forgetting the
-movflags +faststartif you removed the default. Without it the MP4 is web-unfriendly.