1. 为什么选择FFmpeg处理H265视频
在视频处理领域,FFmpeg可以说是当之无愧的"瑞士军刀"。我刚开始接触视频编解码时,第一反应就是去找各种商业SDK,后来发现FFmpeg这个开源神器不仅能完成同样的工作,还提供了更灵活的API接口。特别是对于H265(HEVC)这种高效视频编码格式,FFmpeg的支持已经相当成熟。
H265相比H264最大的优势就是在同等画质下可以节省约50%的码率,这对网络视频传输和存储来说都是巨大的提升。但它的编解码复杂度也更高,直接处理原始数据会很吃力。FFmpeg的libx265编码器和libx265解码器封装了底层细节,让我们可以用相对简单的API实现高效编解码。
在实际项目中,我经常需要处理监控摄像头传过来的H265流。最初尝试用其他库时,要么性能跟不上,要么内存占用太高。后来切换到FFmpeg方案后,不仅处理速度提升了,CPU占用还降低了30%左右。特别是它的异步编解码接口,能充分利用多核性能,这对实时视频处理特别重要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境搭建与项目配置
2.1 安装FFmpeg开发环境
在Ubuntu系统上安装FFmpeg开发环境最简单的方式是使用apt:
bash复制sudo apt update
sudo apt install libavcodec-dev libavformat-dev libavutil-dev libswscale-dev
如果是Windows平台,建议使用vcpkg进行安装:
bash复制vcpkg install ffmpeg:x64-windows
我建议始终使用最新稳定版的FFmpeg,因为H265相关的优化一直在持续进行。有次项目中使用旧版本遇到了内存泄漏问题,升级后立即解决。安装完成后可以通过以下命令验证:
bash复制ffmpeg -codecs | grep hevc
应该能看到HEVC (High Efficiency Video Coding)相关的解码器和编码器信息。
2.2 创建CMake项目
现代C++项目我习惯用CMake管理,这里给出一个完整的CMakeLists.txt示例:
cmake复制cmake_minimum_required(VERSION 3.10)
project(h265_encoder_decoder)
set(CMAKE_CXX_STANDARD 17)
find_package(PkgConfig REQUIRED)
pkg_check_modules(AVCODEC REQUIRED libavcodec)
pkg_check_modules(AVFORMAT REQUIRED libavformat)
pkg_check_modules(AVUTIL REQUIRED libavutil)
include_directories(${AVCODEC_INCLUDE
