首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

FFmpeg连载8-视频合并以及替换视频背景音乐实战

前言

通过前面的实战,我们实现音视频解封装提取、音视频解码、音视频编码、音频重采样等的功能,今天我们就结合之前所做的功能,来做一个短视频APP中常见的功能:

1、提取多个mp3文件中的音频,重新编码为合并为aac

2、提取mp4中的视频,重新编码合并为h264

3、h264与aac合并成新的mp4文件

因为我们的目的是以实战为主,为了囊括之前所学的一些知识点,在这个实战中我们不仅仅需要实现音视频解封装提取、音视频解码、音视频编码、音频重采样这些功能,我们还需要结合多线程同步等知识点做好生产者消费者队列缓冲控制。还包含例如类成员函数作为线程执行函数的使用等知识点。

大致框架

这里要说明一个常识就是如果音频如果需要合并的话要保证两个音频的采样率、采样格式以及通道数一致,所以需要重采样,为了测试,笔者把音频都重采样为22050hz。

同时视频也一样,如果视频需要合并也需要保证两个视频的分辨率是一样的,这里笔者统一把尺寸转换为720x1280。

笔者文笔不好,经常一句卧槽走天下,直接看图吧。。。

代码实现

本来笔者想追求简单,希望用一个cpp文件实现的,后面写着写着发现代码量有点多,所以就拆分成了三个cpp文件,下面是代码详情:

AudioHandle.cpp

VideoHandle.cpp

ComplexMuxerCore.cpp

不得不说写技术博客是一个很耗时耗力的事情,本来为了更方便理解应该详细讲每个实现文件的细节问题的,由于时间问题和文笔表达不大好还是算了,有兴趣的私聊吧...

思考

上面的代码在视频合并的过程中我们通过pts的比较交叉写入音频包或视频包。为什么需要这样做呢?假设在不考虑多线程性能的前提下,能先写完音频再写入视频,或者能先写完视频再写入音频吗?

欢迎大家沟通交流...

系列推荐

关注我,一起进步,人生不止coding!!!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20220422A01HWG00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券