ffmpeg.exe文件可以去官网下载:FFmpeg

官网似乎不提供32位dll文件的下载了,但是可以下载exe文件来直接调用;


#include <iostream>
#include <io.h>
#include <direct.h>
#include <cstdlib>
using namespace std;
/// <summary>
/// C++ 调用 ffmpeg.exe 执行音视频混流合并
/// </summary>
/// 输入的命令中路径参数不需要加双引号,此方法会自动添加双引号以排除system()路径空格的问题
/// <param name="_pathVedio">视频文件路径</param>
/// <param name="_pathAudio">音频文件路径</param>
/// <param name="_pathOutput">输出目录</param>
/// <param name="_pathFfmpegExe">ffmpeg.exe文件路径</param>
extern "C" _declspec(dllexport)
bool combineVedioAudio(string _pathVedio, string _pathAudio, string _nameOut, string _pathOutput, string _pathFfmpegExe)
{string outPutFilePath = _pathOutput + "\\" + _nameOut;// _最终的输出文件的完整路径//参数检错{if (0 != _access(_pathAudio.c_str(), 0))//音频文件不存在return false;if (0 != _access(_pathVedio.c_str(), 0))//视频文件不存在return false;if (0 != _access(_pathFfmpegExe.c_str(), 0))//ffmpeg.exe文件不存在return false;if (0 != _access(_pathOutput.c_str(), 0))//输出目录不存在,则创建目录{if (0 != _mkdir(_pathOutput.c_str()))return false;}}// 备注 -- system命令中含有空格时,会导致命令错误理解,将其视作多个目录名字,将其用引号包含起来可以解决,即:a 改为 "a"{_pathOutput = "\"" + outPutFilePath+ "\"";_pathAudio = "\"" + _pathAudio + "\"";_pathVedio = "\"" + _pathVedio + "\"";_pathFfmpegExe = "\"" + _pathFfmpegExe + "\"";}//组合system命令string command =_pathFfmpegExe+ " -i " + _pathVedio+ " -i " + _pathAudio+ " -codec copy " + _pathOutput;//备注::多对双引号时,system,会去掉首尾 的双引号;所以在命令头部和尾部各自加一个双引号:command = "\"" + command + "\"";//执行命令// cout << "\n\n" + command + "\n\n" << endl;system(command.c_str());//检查执行结果if ( 0 != _access(outPutFilePath.c_str(),0) )return false;elsereturn true;
}

vs2019,添加头文件<string>的时候,使用system()方法时出现了“system不明确”的问题,不知道是因为什么。

‘删掉该头文件后可以继续使用

----------------------------------------------------------------------------------------------------------------------

调整了一下参数,方便移植调用

#pragma once
#include <iostream>
#include <io.h>
#include <direct.h>
using namespace std;
/// <summary>
/// C++ 调用 ffmpeg.exe 执行音视频混流合并
/// </summary>
/// 输入的命令中路径参数不需要加双引号,此方法会自动添加双引号以排除system()路径空格的问题
/// <param name="pathVedio">视频文件路径</param>
/// <param name="pathAudio">音频文件路径</param>
/// <param name="pathOutput">输出目录</param>
/// <param name="pathFfmpegExe">ffmpeg.exe文件路径</param>
extern "C" _declspec(dllexport)
bool combineVedioAudio(char* pathVedio, char* pathAudio, char* nameOut, char* pathOutput, char* pathFfmpegExe)
{string outPutFilePath;// _最终的输出文件的完整路径//参数整理string _pathVedio(pathVedio);string _pathAudio(pathAudio);string _nameOut(nameOut);string _pathOutput(pathOutput);string _pathFfmpegExe(pathFfmpegExe);outPutFilePath = _pathOutput + "\\" + _nameOut;//参数检错{if (0 != _access(_pathAudio.c_str(), 0))//音频文件不存在{cout << "音频文件不存在" << endl;return false;}if (0 != _access(_pathVedio.c_str(), 0))//视频文件不存在{cout << "视频文件不存在" << endl;return false;}if (0 != _access(_pathFfmpegExe.c_str(), 0))//ffmpeg.exe文件不存在{cout << "ffmpeg.exe文件不存在" << endl;return false;}if (0 != _access(_pathOutput.c_str(), 0))//输出目录不存在,则创建目录{if (0 != _mkdir(_pathOutput.c_str())){cout << "输出目录不存在,且创建失败" << endl;return false;}}}// 备注 -- system命令中含有空格时,会导致命令错误理解,将其视作多个目录名字,将其用引号包含起来可以解决,即:a 改为 "a"{_pathOutput = "\"" + outPutFilePath + "\"";_pathAudio = "\"" + _pathAudio + "\"";_pathVedio = "\"" + _pathVedio + "\"";_pathFfmpegExe = "\"" + _pathFfmpegExe + "\"";}//组合system命令string command =_pathFfmpegExe+ " -i " + _pathVedio+ " -i " + _pathAudio+ " -codec copy " + _pathOutput;//备注::多对双引号时,system,会去掉首尾 的双引号;所以在命令头部和尾部各自加一个双引号:command = "\"" + command + "\"";//执行命令cout << "\n\n" + command + "\n\n" << endl;system(command.c_str());//检查执行结果if (0 != _access(outPutFilePath.c_str(), 0))return false;elsereturn true;
}

C++ 调用 ffmpeg.exe 执行音视频混流合并;相关推荐

  1. 使用FFmpeg命令处理音视频

    文章目录 前言 一.ffprobe相关命令 1.使用ffprobe查看音频文件的信息 2.使用ffprobe查看视频文件的信息 二.ffplay相关命令 1.基本的ffplay命令 2.音视频同步命令 ...

  2. android音视频工程师,音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源)...

    ## 音视频学习 (十三) Android 中通过 FFmpeg 命令对音视频编辑处理(已开源) ## 视音频编辑器 ## 前言 有时候我们想对音视频进行加工处理,比如视频编辑.添加字幕.裁剪等功能处 ...

  3. FFmpeg学习(音视频理论知识)

    文章目录 1. 音视频理论知识 1.1 基本概念 1.1.1 音视频必备的基本概念 常用的视频封装格式 常用的视频编码器 常用的音频编程器: 视频流 裸数据YUV 1.1.2 音视频常见处理 采集 处 ...

  4. FFmpeg 工具:音视频开发都用它,快@你兄弟来看丨音视频工具

    (本文基本逻辑:ffmpeg 常用命令介绍 → ffplay 常用命令介绍 → ffprobe 常用命令介绍) 从事音视频开发的程序员几乎都应该知道或使用过 FFmpeg.FFmpeg 是一个开源软件 ...

  5. 基于FFmpeg 实现RTSP, 音视频编解码,视频流添加文字,音视频合成MP4

    前言: 最近闲这没事,整理了一下之前开发过的音视频编解码库,主要基于ffmpeg,实现音视频的编解码.视频流添加文字,音视频同步到MP4等功能.有需要的小伙伴可以参考参考,如果写的有什么不对的地方,欢 ...

  6. 流媒体服务器开发——SRS 4.0与WebRTC音视频通话丨音视频开发丨嵌入式开发丨FFmpeg丨iOS音视频开发

    SRS 4.0与WebRTC音视频通话 1. 音视频高薪岗位都需要什么技能点 2. WebRTC的技术点分析 3. SRS 4.0如何使用WebRTC 视频讲解如下,点击观看: 流媒体服务器开发--S ...

  7. ffmpeg 命令_Qt音视频开发11-ffmpeg常用命令

    一.前言 大部分的格式转换工具比如格式化工厂等,都用到了ffmpeg来处理,ffmpeg编译后生成的ffmpeg.exe.ffplay.exe.ffprobe.exe等可执行文件,其实就封装了众多牛逼 ...

  8. 【Android FFMPEG 开发】音视频基础 和 FFMPEG 编译 ( 音视频基础 | MPEG-4 标准 | Android 开发环境 | FFMPEG 交叉编译 | 安卓项目导入配置 )

    本篇博客代码及资源下载 : https://download.csdn.net/download/han1202012/10382762 文章目录 一. 音视频基础 1. 音频基础 (1) 声音要素 ...

  9. java调用ffmpeg,mencoder进行视频转换,读取时长等

    2019独角兽企业重金招聘Python工程师标准>>> 以前做的一个基于ffmpeg的视频格式转换的程序,现在抽空整理一下,很多地方都是从别的大神那借鉴的,只是把自己的觉得有用的,对 ...

最新文章

  1. TensorFlow实现超参数调整
  2. 再见了Spring Cloud!这个架构有点厉害,甚至干掉了Dubbo!
  3. R可视化使用ggplot2创建样本数据热力图(heatmap)
  4. 微信小程序使用wxParse,解决图片显示路径问题
  5. Python编程基础:第五十七节 reduce函数Reduce
  6. 阿米洛无法打开蓝牙模式_企业为什么要学习阿米巴模式?
  7. [HTB]“Heist”靶机渗透详细思路
  8. SpringCloud系列:分布式服务调用链跟踪整合Zipkin、RabbitMQ、Elasticsearch(二)
  9. java扑克牌移动_蓝桥杯-扑克牌移动-java
  10. Sampling-Argmax:用重参数技巧优化Soft-Argmax
  11. DataWorks 数据质量V2.3版本发布
  12. (六)微服务分布式云架构spring cloud - 企业云架构common-service代码结构分析
  13. Perl语言入门(第五版) 中文版PDF下载 (原书名:Learning Perl,5/e)
  14. FPGA入门——数码管
  15. Python快捷键大全(PyCharm常用)
  16. 十八. 项目采购管理
  17. android小电脑,废旧笔记本电脑纯手工改装“安卓小电脑”,太赞了!
  18. CSharp学习笔记
  19. 图灵、图灵机和图灵测试
  20. ios系统下input边框有默认阴影

热门文章

  1. 链表4:合并有序链表的3道题
  2. 作为一名专科Java程序员进入阿里巴巴,很惭愧!
  3. mcem r语言代码_一个简单文本分类任务-EM算法-R语言
  4. 安卓调用日历提醒,并实现闹钟提醒功能,在miui上测试通过,日历提醒闹钟设置失败解决(附源码,源码已更新)
  5. 条款3:理解decltype
  6. 公司活动抽奖平台--纯前端
  7. php 月柱计算,天干地支-月柱计算方法
  8. maven 打包zip,jsw相关
  9. django 查询条件 判断是否为空 isnull 200316
  10. Angular 4入门教程系列 14 PrimeNG的使用方式