这两天又遇到一个朋友的问题,这里跟大家共享一下我利用ffmpeg的解决方法
将一个带音乐的视频的声音,消除其背景音乐,替换为另一个伴奏音乐
同时将将视频前部的15秒标题部分替换为一张标题图片
原料是一个长度为 3:56 的视频 girl1.mp4 与一段 4:07 的音频 girl1.mp3
以及一张标题图片 girltitle1.jpg
【】首先将视频背景声音去除,提取视频部分
ffmpeg -i girl1.mp4 -vcodec copy -an girl2.mp4
【】将视频截取去除前面的15秒的标题部分
ffmpeg -i girl2.mp4 -ss 00:00:15 -t 00:03:56 -vcodec copy -acodec copy girl3.mp4
【】将封面图片生成mp4,这个可以利用WPS或者Office完成,但我用的WPS 是免费的个人版,阉割掉了转换为mp4的功能,不过ffmpeg 可以利用多张图片生成mp4,我这里标题图片只有一张girltitle1.jpg生成15秒的title1.mp4,所以操作比较简单
ffmpeg -r:v 25 -f image2 -loop 1 -i girltitle1.jpg -t 15 title1.mp4 -y
【】难点是将title1.mp4与 girl3.mp4 正确的合并成为 girl?.mp4,在网上查了一下,找了三种方法
①将两段视频直接合并起来
先编写文本文件 vlist.txt,内容如下
file 'title1.mp4'
file 'girl3.mp4'
然后使用命令调用 vlist.txt 进行合并,但是奇怪的是 title1.mp4 为15秒,girl3.mp4 为3:41秒
而这合并应该为3:56 秒,但是合并结果为9分多,好像视频慢了一些,我修改了 title1.mp4 生成时的帧率也不行,这种方法失败
ffmpeg -f concat -i vlist.txt -c copy girl4.mp4
②转换视频格式到mpg
ffmpeg -i title1.mp4 title1.mpg
ffmpeg -i girl3.mp4 girl3.mpg
将mpg连接起来成为output.mpg,然后转换为mp4格式 girl5.mp4
ffmpeg -i "concat:title1.mpg|girl3.mpg" -c copy output.mpg
ffmpeg -i output.mpg girl5.mp4
或者将以上的两个步骤合并为一步,连接mpg 并转换为mp4 (这个方法推荐)
ffmpeg -i "concat:title1.mpg|girl3.mpg" -vcodec mpeg4 girl5.mp4
③转换视频格式到 TS文件input1.ts 和 input2.ts,然后连接两个ts文件并且转换为mp4文件girl6.mp4
ffmpeg -i title1.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input1.ts
ffmpeg -i girl3.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts input2.ts
ffmpeg -i "concat:input1.ts|input2.ts" -c copy -bsf:a aac_adtstoasc -movflags +faststart girl6.mp4
【】得到3:56秒的girl?.mp4以后就简单了,将加上声音girl1.mp3 就可以了
ffmpeg -i girl5.mp4 -i girl1.mp3 -vcodec copy -acodec copy girl7.mp4