音视频开发35 FFmpeg 编码- 将YUV 和 pcm合成一个mp4文件

一 程序的目的

/***

*该程序的目的是:

* 将 一个pcm文件 和 一个 yuv文件,合成为一个 0804_out.mp4文件

* pcm文件和yuv文件是从哪里来的呢?是从 sound_in_sync_test.mp4 文件中,使用ffmpeg命令 抽取出来的。

* 这样做的目的是为了对比前后两个mp4(sound_in_sync_test.mp4 和 0804_out.mp4 ) 文件。

*

* 1. 从sound_in_sync_test.mp4 文件 中抽取 pcm命令如下:

*ffmpeg -i sound_in_sync_test.mp4 -vn -ar 44100 -ac 2 -f s16le 44100_2_s16le.pcm

* -vn 表示不处理视频

*

* 2. 从sound_in_sync_test.mp4 文件 中抽取 yuv命令如下:

*

*ffmpeg -i sound_in_sync_test.mp4 -pix_fmt yuv420p 720x576_yuv420p.yuv

*

* 3.播放测试

* 对于 pcm 数据
ffplay -ac 2 -ar 44100 -f s16le 44100_2_s16le.pcm

* 对于 YUV 数据
ffplay -pixel_format yuv420p -video_size 720x576 -framerate 25 720x576_yuv420p.yuv

***/

原始 sound_in_sync_test.mp4的信息

二 流程

1.将pcm 编码成aac

1.1 音频重采样 -- AudioResample

从pcm文件中读取文件后,有一个问题,我们本地的pcm文件可能是 s16le的, 44.1kz, 2声道的。

但是 我们使用的 音频编码器( encoder **)**是 的ffmpeg 自带的aac,而ffmpeg自带的aac仅支持 AV_SAMPLE_FMT_FLTP 采样率的编码器,因此需要重采样,也就是说要将s16le的变成f32p的。

1.2 aac 设置参数问题

需要设定的参数

aac

采样率,声道数,采样格式,比特率,pts

aac 和 h264 在编码的时候,编码器上下文的很多参数都是可以设定好的,但是有些参数是不好设置的,其中比较不容易理解的就是pts(显示时间),

复制代码
aac在编码的时候,要设置好pts,pts是显示时间,

我们这样思考,pcm 一秒钟有44100个样本,那么一秒钟处理的样本数量为 1/44100秒,

那么当一个aac帧有1024 个采样点的时候,对于pcm来说,所谓的显示时间就是播放时间,因此每次处理一帧(包括播放时间和编码时间)(也就是1024个采样点的时间),

1024*1/44100秒 = 0.0232199546485261秒 = 23.2199546485261毫秒= 23219.9546485261微妙

我们在使用pts单位的时候,会以微妙为单位。

注意的是,这里需要设置到AAC encoder Context 里面。

2.将yuv编码成h264

2.1 将yuv编码成h264时需要设定的参数

分辨率,像素格式,帧率,比特率,b帧有多少个,pts

同理,h264在编码的时候,要设置好pts,pts是显示时间,

我们设置的25图片/秒,也就是40毫秒一张图片,40000微妙一张图片

当我们显示一张图片的时候,pts就应该以 40000微妙为一个单位,注意这里需要设置到 H264 encoder context 里面

3.将aac 和 h264 打包成 mp4

3.0 设计

初始化,销毁,avio_open,

3.1 使用 newstream

在将aac文件和 h264文件打包的时候,首先要先有 AVStream 才好打包。

因此要使用到 new stream,第二个参数没有用,

复制代码
AVStream *avformat_new_stream(AVFormatContext *s, const struct AVCodec *c);
复制代码

3.2 时间同步问题 time_base问题

3.3 合成mp4文件,还有一个点,帧率问题,sps 和 pps 问题(这个好像是 mp4文件的)

相关推荐
非凡ghost13 小时前
可拓浏览器:给手机浏览器装上“外挂“!2W+拓展+AI搜索,玩出无限可能!
windows·智能手机·音视频·firefox
美狐美颜SDK开放平台14 小时前
多场景美颜SDK解决方案:直播APP(iOS/安卓)开发接入详解
android·人工智能·ios·音视频·美颜sdk·第三方美颜sdk·短视频美颜sdk
ai产品老杨16 小时前
深度解析:基于国产化异构计算的 AI 视频管理平台架构——从 GB28181 接入到 NPU 边缘推流的解耦实践
人工智能·架构·音视频
watson_pillow16 小时前
音视频相关基础知识储备入门-字幕
音视频
程序员JerrySUN17 小时前
Jetson边缘嵌入式实战课程第二讲:JetPack 和 SDK Manager 是什么
c语言·开发语言·网络·udp·音视频
happybasic19 小时前
在CMD下使用FFmpeg将.wav文件转换成指定的格式~
ffmpeg
weixin_66819 小时前
NVIDIA VSSVideo Search and Summarization视频搜索与摘要蓝图详尽使用说明与技术报告版本
人工智能·音视频
jiayong2320 小时前
国内外视频/图像大模型与智能体工具平台竞品对比
ai·音视频·agent
视频技术分享21 小时前
技术赋能生态革新:音视频产业开启千亿增长新周期 视频会议成核心增长亮点
音视频
reasonsummer21 小时前
【教学类-160-14】20260425 AI视频培训-练习014“豆包AI视频《月下枯蔷(哥特风)》+豆包图片风格:油画”
人工智能·音视频·豆包