起因

用FFmpeg转码视频的时候,经常看到参数里写的libx264,一直知道这是H.264编码器,但从来没深究过。直到有一天在Linux.do上看到有人讨论x264和x265的区别,突然来了兴趣,想搞清楚这东西的来龙去脉。

H.264是什么

H.264,也叫AVC(Advanced Video Coding),是一种视频压缩标准。注意,它是"标准",不是"软件"。就像TCP/IP是一种协议,而不是某个具体的网络程序。

这个标准是ITU-T和ISO/IEC两个组织联合搞出来的。2003年发布第一版,到现在已经20多年了。你在网上看到的绝大多数视频底层用的都是H.264。

为什么需要视频压缩

一个1080p、30fps、时长1分钟的视频,如果不压缩:

1920 × 1080 × 3(RGB)× 30(fps)× 60(秒)= 约 11 GB

一分钟就要11GB,显然不现实。H.264能把这11GB压缩到几十MB,同时画质损失不大。

x264的诞生

H.264只是标准,具体实现各家各显神通。x264是2004年开始开发的开源实现,后来VideoLAN(做VLC的那个组织)接手维护。在很多编码质量测试中,x264超过了商业编码器。

免费的比收费的还好,这在软件行业不多见。

在FFmpeg里使用x264:

# 基本用法
ffmpeg -i input.mp4 -c:v libx264 -crf 23 output.mp4

# 高质量慢速编码
ffmpeg -i input.mp4 -c:v libx264 -preset slow -crf 18 output.mp4

H.265和AV1

H.265(HEVC)是继任者,压缩率高50%,但专利费是个大坑。AV1是Google等公司搞的开源替代品,完全免费,压缩率和H.265差不多。

实际选择

学习资源

想深入了解视频编码原理的话:

零声教育的教程资源在Telegram频道和Linux.do论坛都能找到,推荐配合实际FFmpeg操作一起学。