下面以Linux环境介绍为主
1.ffmpeg可执行命令不同的环境是不同的,Linux在执行命令前还需要授权。
2.合并视频命令:
主要命令: {} -f concat -auto_convert 0 -safe 0 -i {} -y -c:v copy
坑一:其中第一个花括号替换的是可执行命令所在的绝对路径,这里必须要使用ffmpeg的绝对路径,因为把应用打成jar包是无法获取到绝对路径的,具体可参考:Jar包启动通过ClassPathResource获取不到文件路径问题_classpathresource找不到文件_DanceDonkey的博客-CSDN博客
解决:但是我的可执行文件又无法使用流的方式读取,所以只能让运维把ffmpeg的可执行文件放到生产环境一个固定路径。
坑二:第二个花括号的值 =》是将原来多个视频的路径放到一个txt文件里面,这个值就是这个txt文件的决定路径。
之前我是将原多个视频的路径一个个跟在填充到第二个花括号里面,类似这种
发现一直保存,找不到文件。最后发现必须将这两个mp4的绝对路径按照一定的格式写入到txt文件中,然后把花括号替换这个txt文件的绝对路径才不会报错。
坑三:
使用Runtime.getRuntime().exec 执行命令,发现这个命令是异步的,意思是大文件视频还没合成完,主线程就已经执行完了,这显然是不能接受的,于是加了一行
process.waitFor(); 测试环境验收完毕,已经就这样结束了,到生产才发现只要执行合并命令就会卡死,最后参考了这个贴子才解决
https://www.cnblogs.com/163yun/p/9878915.html
java关于ffmpeg推流停止的问题_ffmpeg停止推流_qq_35629433的博客-CSDN博客
关于ffmpeg的可执行包已上传