将修剪的音频插入使用FFMPEG的视频中



最近我必须与FFMPEG合作,有时我努力地尝试了解我应该使用哪些命令/过滤器来实现我的目标,这篇文章只能分享知识我在此过程中获得了该过程,特别是在操纵音频文件并将其插入视频的过程中。

我需要用新的音频文件,在特定的位置以及特定的持续时间替换视频的音频,最好在音频结束时在音频上淡出淡出,以下是我的问题的解决方案解释。

我也应该提到,获得了所需的某些知识 通过研究拉吉布在这篇文章中提供的答案,非常感谢他!

这是完整的命令,提供了一个输入视频文件,名为vinput.mp4和一个音频文件,名为ainput.wav:

ffmpeg -y -i vinput.mp4 -i ainput.wav -filter_complex "
 [1:a]aloop=-1:2e+09[aloop];
 [aloop]aformat=channel_layouts=mono,atrim=end=2[atrim];
 [atrim]adelay=2000[afinal];
 [afinal]afade=t=out:st=3.5:d=0.5[afinal]" 
-shortest -map "[afinal]" -map 0:v output.mp4

以下是每个步骤的解释:

[1:a]aloop=-1:2e+09[aloop]

会循环我的音频无限次数(-1),然后重复可能的最大帧数(2e 09)(我没有找到t告诉命令只能完全重复音频的方法。..


[aloop]aformat=channel_layouts=mono,atrim=end=2[atrim]

这是从上一个指令( aloop )中获得的循环音频,并且主要将其持续到仅2秒钟。


[atrim]adelay=2000[afinal]

这将使音频的开始延迟2000 miliseconds(2秒),从而使其在视频的第二秒开始播放。


[afinal]afade=t=out:st=3.5:d=0.5[afinal]

这将淡出我们的音频,从视频的第4秒开始淡出淡出,并使淡出持续0.5秒,含义是声音将从第二个3.5逐渐消失至4。


-shortest

由于我们有一个无限期重复的音频流,因此我们需要告诉FFMPEG何时停止编码,这是由标签完成的,该标签告诉FFMPEG我们期望最终结果持续到最短的输入,它收到(在情况下是视频输入)。


-map "[afinal]" -map 0:v

正如塞缪尔·威廉姆斯(Samuel Williams)在答案中指出的那样,此选项指示我们要复制到生成的输出中的哪些流,在这种情况下,我们希望同时拥有最终音频(AFINAL)和源视频流(0:v)。

请参阅https://stackoverflow.com/a/12943003/6917520

-map选项指示您想要什么流。从input_0.mp4和input_1.mp4复制视频:

$ ffmpeg -i input_0.mp4 -i input_1.mp4 -c copy -map 0:0 -map 1:1 -shortest out.mp4

最新更新