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

时间:2017-10-03 11:30:02

标签: audio video ffmpeg video-processing

最近我不得不与FFMPEG一起工作,有时我努力想要了解我应该使用哪些命令/过滤器来实现我的目标,这篇文章仅用于分享我在此过程中获得的知识,特别是操纵音频文件并将其插入视频的过程。

我需要用一个新的音频文件替换视频的音频,在特定的位置,并且具有特定的持续时间,最好在音频结束时淡出音频,下面是我的问题的解决方案解释

我还应该提到,获得这方面所需的一些知识  通过研究rajibpost提供的答案,非常感谢他!

2 个答案:

答案 0 :(得分:1)

这是完整的命令,提供了一个名为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)(我没有找到告诉命令完全重复音频的方法。 ..

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

这将从前一条指令( aloop )获取循环音频,并且主要将其修剪为仅持续2秒。

[atrim]adelay=2000[afinal]
  

这会将音频的开始延迟2000毫秒(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中指出his answer,这个选项指示ffmpeg我们要复制到生成的输出的流,在这种情况下,我们希望同时拥有最终的音频(afinal)和源视频流(0:v)。

答案 1 :(得分:0)

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

-map选项指示ffmpeg您想要的流。要复制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