标题:Qt音视频开发07-合并音视频文件
作者:liudianwu
日期:2023-01-01 10:59
内容:
## 一、前言
之前已经把音视频分开存储了对应的文件,因为这个需求特别少,当然确实有部分用户是需要把音视频分开存储,但是毕竟是很少数,绝大部分的用户都是音视频合并到一个MP4文件,所以如果要合并到一个文件,现在已经存储成了两个文件,最简单的做法就是调用ffmpeg命令行将两个文件合并,这种做法简单粗暴,为此专门写了一个线程类 FFmpegRunThread 执行这些转换操作。转换的时候很耗CPU,如果视频文件很长很大,基本上CPU处于快被榨干的状态。
通过调用ffmpeg命令行的方式合并的文件,如果源头是本地视频文件或者网络的视频文件,合并后都是正常的,音视频同步的,而对于视频流这种没有时长的数据的存储,大量的测试验证下来,存在音频视频不同步的情况,所以后期重新研究音视频一起保存的方法。
## 二、效果图
## 三、体验地址
1. 国内站点:[https://gitee.com/feiyangqingyun](https://gitee.com/feiyangqingyun)
2. 国际站点:[https://github.com/feiyangqingyun](https://github.com/feiyangqingyun)
3. 个人作品:[https://blog.csdn.net/feiyangqingyun/article/details/97565652](https://blog.csdn.net/feiyangqingyun/article/details/97565652)
4. 体验地址:[https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g](https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g) 提取码:01jf 文件名:bin_video_demo/bin_linux_video。
## 四、相关代码
```cpp
#include "ffmpegrun.h"
#include "ffmpegrunthread.h"
#include "qfileinfo.h"
bool FFmpegRun::run(const QStringList &args, bool exec)
{
if (exec) {
return FFmpegRunThread::execute(args);
} else {
//每个指令都开启独立的线程执行(执行完成会立即释放线程)
FFmpegRunThread *runThread = new FFmpegRunThread;
runThread->startExecute(args);
return true;
}
}
QString FFmpegRun::replaceSuffix(co ..