ffmpeg视频转码遇到H264黑屏问题

2026-02-11 04:12:563653

一、概述

在基础音视频开发中视频的转码是一个常见的需求。以mp4文件举例:可能需要改变视频的宽高、码率、编码格式、像素格式等等中的一种和多种。那转码功能就派上用场了。

实现步骤:

1.创建解封装器,用于解封装mp4

2.创建一个封装器,用于重新封装转码后的mp4文件

3.创建一个解码器,用于解码mp4中的压缩数据

4.创建一个编码器,用于把解码后的AVFrame重新编码成AVPacket

5.复制编码器格式到封装器上下文

6.循环解封装、解码、再重新编码、写入封装器。

7.销毁此过程中生成的资源。

二、代码示例

在实际的测试中发现,H264转码H264视频能够正常播放。而H264转H265的时候发现数据都已经写进去了,但是使用VLC测试播放的时候视频是黑屏,只有声音。

最后单步调试发现:未将编码器格式复制到封装器上下文中导致的。

avcodec_parameters_from_context(o_vs->codecpar, enContext);//o_vs是新创建的流,需要把编码格式告诉他,然后才行