在做项目时遇到一个需求:制作视频,即用户点击上传按钮能够上传本地视频,同时系统提供配BGM的功能(BGM)由后台提供。
当刚接到这个需求的时候,我整个人都是懵的,制作视频?这不是新媒体做的吗,不会啊,但是既然有这个需求,那就只能硬着头皮上了。
进过多方查找,确定了用FFmpeg这个软件来完成这个需求。网上了解到:FFmpeg是一个开源免费跨平台的视频和音频流方案,属于自由软件,采用LGPL或GPL许可证(依据你选择的组件)。这个软件能够进行音视频的合并。
又掉了几根头发后,写出一个小Demo,能够实现音视频的合并,但仍有一些问题有待解决,下面是干货:

import java.io.*;public class FfmpegDemo {// FFmpeg全路径private static final String FFMPEG_PATH = "D:\\FFMPEG\\ffmpeg-latest-win64-static\\bin\\ffmpeg.exe";public static void main(String[] args) {try {String videoInputPath = "D:\\ceshi\\demo2.mp4";String audioInputPath = "D:\\ceshi\\说好不哭.mp3";String videoOutPath = "D:\\ceshi\\666\\6啊.avi";
//            File f = new File("D:\\ceshi\\红色高跟鞋.mp3");
//            File f2 = new File("D:\\ceshi\\红色高跟鞋3.mp3");
//            cut(f,f2);convetor(videoInputPath,audioInputPath,videoOutPath);System.out.println("音频合成成功,老铁666");} catch (Exception e) {e.printStackTrace();}}/*** 具体合成视频函数* @param videoInputPath*   原视频的全路径* @param audioInputPath*   音频的全路径* @param videoOutPath*   视频与音频结合之后的视频的路径*/public static void convetor(String videoInputPath, String audioInputPath, String videoOutPath)throws Exception {Process process = null;InputStream errorStream = null;InputStreamReader inputStreamReader = null;BufferedReader br = null;try {// ffmpeg命令String command = FFMPEG_PATH + " -i " + videoInputPath +" -i " + audioInputPath+ " -c:v copy -c:a aac -strict experimental " +" -map 0:v:0 -map 1:a:0 " +" -t 15.0"    //生成视频时间为15s+ " -y " + videoOutPath;process = Runtime.getRuntime().exec(command);errorStream = process.getErrorStream();inputStreamReader = new InputStreamReader(errorStream);br = new BufferedReader(inputStreamReader);// 用来收集错误信息的String str = "";while ((str = br.readLine()) != null) {System.out.println(str);}process.waitFor();} catch (IOException e) {e.printStackTrace();} finally {if (br != null) {br.close();}if (inputStreamReader != null) {inputStreamReader.close();}if (errorStream != null) {errorStream.close();}}}
}

个人也进行了一些测试,以下是测试的截图以供参考:

其中***红色高跟鞋***分别为完整歌曲、28s、5s的歌曲。怎么截取,请参考用Java实现剪切歌曲
***demo***为21s的视频,***demo2***为3s的视频,***666***文件夹内为合成的视频文件。

虽然最终结果达到了音视频的合并,但是只能够同时开始,不能同时结束。寻找各种文案经验等,基本都是说需要涉及FFmpeg的底层源码,要对音视频的编码格式进行解析与重构,来达到同步播放的功能。
楼主是已经哭晕在厕所,短期内实现不了。如果有看到这篇文章的大牛,希望不吝啬您的idea,提供思路共同学习,感激不尽!每次记录一点点,让自己再靠近知识一点点。

FFmpeg合并音频文件和视频文件相关推荐

  1. 使用FFMpeg合并bilibili缓存的视频文件

    首先下载FFMpeg并配置环境变量 下载链接: https://www.gyan.dev/ffmpeg/builds/ffmpeg-git-full.7z 下载后解压文件到指定目录下,并配置环境变量& ...

  2. php视频提取音频,怎么提取视频中音频文件?视频文件如何分离提取出音频文件?视频转换成音频的方法...

    快要过年啦,小编在这里提前祝大家新年快乐,万事如意,嘻嘻(#^.^#).今天就能回家啦,好激动٩(๑>◡ 首先呢,我们需要先通过上方的连接诶下载我们所要用到的软件,下载完成之后解压缩包,在打开的 ...

  3. python中使用ffmpeg合并音频与视频_ffmpeg 在windows 下的安装和使用(python, 合并音频和视频)...

    参考: windows下ffmpeg的安装与python调用   https://blog.csdn.net/chunjiekid/article/details/88205824 1. 下载 ffm ...

  4. 使用FFmpeg将字幕文件集成到视频文件

    本文最后更新于:2015-05-25 13:12:00 原文:http://www.yaosansi.com/post/ffmpeg-burn-subtitles-into-video 向视频文件里添 ...

  5. java 合并视频_Java 合并多个MP4视频文件

    局限性 只支持MP4文件 经过尝试对于一些MP4文件分割不了 依赖 com.googlecode.mp4parser isoparser 1.1.22 工具类 package com.example. ...

  6. java 视频 合并成一个_Java 合并多个MP4视频文件

    局限性 只支持MP4文件 经过尝试对于一些MP4文件分割不了 依赖 com.googlecode.mp4parser isoparser 1.1.22 工具类 package com.example. ...

  7. java mp4分割_Java 合并多个MP4视频文件

    局限性 只支持mp4文件 经过尝试对于一些mp4文件分割不了 依赖 com.googlecode.mp4parser isoparser 1.1.22 工具类 package com.example. ...

  8. 字幕文件与视频文件对不上的处理方式

    阅读原文 序言 最近给自己的私人影院下了很多电影,会出现一种情况:很多字幕网站的字幕都是比较老的,字幕可以适配1080p(或者比较早)的视频,但是有部分2160p的视频的字幕很难找,经常下了一堆字幕, ...

  9. Tinker:播放assets文件里视频文件的问题?

    原文地址:Tinker:播放assets文件里视频文件的问题 作者:杨小邪 今天做了一个功能,就是播放项目工程里面的视频文件,不是播放SD卡视频文件. 我开始尝试把视频文件放到 assets文件目录下 ...

最新文章

  1. Nginx源码分析:惊群处理与负载均衡
  2. Linux 终端部分重要快捷键
  3. laravel 分页php_laravel 分页 seo浅谈
  4. React.js 小书 Lesson15 - 实战分析:评论功能(二)
  5. 折半查找法(二分查找法)
  6. android 链接分享到朋友圈,android 分享到微信朋友圈或微信好友
  7. 使用WAMP5搭建Apache+MySQL+PHP环境
  8. TensorFlow:递归神经网络
  9. python网络编程相关
  10. Linux修改hosts主机映射文件
  11. 计算机控制技术电子课件,电子科技大学计算机控制技术课件04.ppt
  12. 效率低下的不良习惯与解决办法
  13. 林记seo告诉你seo教程菜鸟seo一个月到底能赚多少钱
  14. 公考二十四节气考点汇总
  15. 嵌入式 linux 屏 翻转,linux下如何把屏幕设置成竖屏
  16. 【报名】榜单奖项+产业图谱+行业报告+线下论坛,2021年终金猿策划活动已开启...
  17. DDR4时序标准规范(一)
  18. 计算机如何改变原子排列方式,新的原子分组方式预示着新的材料、药物和计算机...
  19. idea中开启多个线程运行多个项目
  20. 远程桌面由于以下原因之一无法连接到远程计算机,富含多种解决方案,全网最详细

热门文章

  1. 项目经历怎么写_工程监理简历范文,【工作经历+项目经验+自我评价】怎么写...
  2. 笔记本如何查看电池寿命? CMD 指令
  3. Win11开机时一直转圈是什么问题
  4. Python数据可视化-Matplotlib线性图(折线图等) 代码教学 Part 1
  5. ESP32用Arduino编程实现CAN总线通讯
  6. 史上最全的软件测试面试题
  7. 2020春招补录全过程
  8. 日志特征选择汇总(基于天池比赛)
  9. [hdu-1814] Peaceful Commission题解
  10. JQuery渐变色动画效果