使用FFMPEG合并视频

因为最近要求AcDown加入视频合并功能的呼声非常高(几乎一半多的反馈都在说这个问题),所以下午花了些时间来研究怎样用最方便(不需要最快)的方法来进行视频合并。

AcDown之前的版本使用的是某个第三方的FlvCombine组件,这个软件的优点在于体积非常小(一共才200多KB),方便集成到AcDown中,使用很简单,而且合并速度非常快,但是缺点也是非常显而易见的,那就是不支持mp4容器格式。而现在视频网站上的高清视频大都是mp4格式的,基于这点考虑,AcDown一直没有加入下载后合并视频的功能。

使用FFMPEG来进行合并一直是我在考虑的,但是因为之前AcDown的软件架构,在不到1M的软件中嵌入好几十M的ffmpeg显然不是一个好的选择,再加上我对它也不是很熟悉,所以下载后转换的这个问题一直拖到了现在。

言归正传,这次研究出来的合并方法其实算是比较投机取巧的,本身并没有使用ffmpeg的众多参数,而是绕了个弯,先将待合并的视频转换为体积很大的mpeg格式,然后再将其二进制合并后重新压缩编码,最后得到输出文件。虽然看起来很麻烦,不过稳定性还是可以保证的使用FFMPEG合并视频

以下是批处理文件:
目标是将位于桌面new文件夹中的1.flv和2.flv文件合并为combine.flv
cd " C:\Users\Kaedei\Desktop\new"
ffmpeg.exe -i "1.flv" -f mpeg -sameq -y -r 29.97 "1.flv.actemp"
ffmpeg.exe -i "2.flv" -f mpeg -sameq -y -r 29.97 "2.flv.actemp"
copy /b "1.flv.actemp"+"2.flv.actemp" "combine.flv.actemp" /y
ffmpeg.exe -i "combine.flv.actemp" -f mp4 -y "combine.flv"
del "1.flv.actemp"
del "2.flv.actemp"
del "combine.flv.actemp"


下面是各步骤的解释:
cd " C:\Users\Kaedei\Desktop\new"
进入桌面的new文件夹

ffmpeg.exe -i "1.flv" -f mpeg -sameq -y -r 29.97 "1.flv.actemp"
ffmpeg.exe -i "2.flv" -f mpeg -sameq -y -r 29.97 "2.flv.actemp"
将1.flv和2.flv转换为1.flv.actemp和2.flv.actemp文件,格式为mpeg,因为我用的FFMPEG貌似不支持输出1/15,1/20这样的帧率,所以强制设置帧率为标准的29.97,当然这样做会导致输出的文件体积变得略大。

copy /b "1.flv.actemp"+"2.flv.actemp" "combine.flv.actemp" /y
将输出的两个actemp文件通过二进制合并为combine.flv.actemp文件

ffmpeg.exe -i "combine.flv.actemp" -f mp4 -y "combine.flv"
将合并后的combine.flv.actemp文件转换为mp4编码的视频

del "1.flv.actemp"
del "2.flv.actemp"
del "combine.flv.actemp"
删除临时文件


已通过测试,不过暂时不知道这种方法对通过bug压缩的视频效果怎样……
展开阅读全文

没有更多推荐了,返回首页