A 2-pass encoding (or two-pass encoding) is a video compression technique that processes your video twice to achieve better quality for a given file size.
Here's how it works:
First Pass: The encoder analyzes the entire video without actually creating a final output file. It collects data about scene complexity, motion, and other characteristics throughout the video. During this phase, it's just gathering information and creating statistical data about the video.
Second Pass: The encoder uses the analysis data from the first pass to make smarter decisions about how to allocate bits. It can assign more bits to complex scenes that need them and fewer bits to simpler scenes, resulting in more consistent quality throughout.
The benefits of 2-pass encoding include:
- More efficient use of the target bitrate
- More consistent quality across the entire video
- Better handling of complex scenes
- Better overall quality-to-size ratio
The downside is that encoding takes approximately twice as long as single-pass encoding. However, for final distribution versions of videos (especially when file size constraints are important), the quality improvement is often worth the extra processing time.
Let's take as example:
ffmpeg -i input.mp4 -c:v libx264 -preset medium -b:v 1500k -pass 1 -an -f mp4 /dev/null && \
ffmpeg -i input.mp4 -c:v libx264 -preset medium -b:v 1500k -pass 2 -c:a aac -b:a 128k -movflags +faststart output.mp4
This command performs a 2-pass encoding of a video file for optimal quality-to-size ratio. The first command runs the first pass of the encoding process, while the second command runs the second pass and creates the final output file.
First pass:
-i input.mp4
Specifies the input video file-c:v libx264
Uses H.264 video codec-preset medium
Balances encoding speed and compression efficiency-b:v 1500k
Sets target video bitrate to 1500 kbps-pass 1
Indicates this is the first pass (analysis phase)-an
Disables audio processing (not needed for first pass)-f mp4
Forces MP4 format output/dev/null
Discards the actual output (only statistics are needed)
Second pass:
- Uses the same input and video settings
-pass 2
Indicates this is the second pass (encoding with knowledge from first pass)-c:a aac
Encodes audio using AAC codec-b:a 128k
Sets audio bitrate to 128 kbps-movflags +faststart
Optimizes for web streaming
The &&
operator ensures the second command only runs if the first succeeds. This method
produces better quality at the same file size compared to single-pass encoding.