ffmpeg添加音频,但保持视频长度相同(不是最短)


10

我正在使用ffmpeg将音频添加到视频文件中,如下所示

ffmpeg -i videofile.mp4 -i audiofile.wav output.mp4

但是,如果输出的视频文件长于视频,则将其扩展为音频文件的长度。如果音频文件比视频短,则使用-shortest可以将视频文件缩短。那么,是否有一个标志告诉ffmpeg将输出视频的保留长度削减为输入视频的长度?


请选择正确的答案。唯一真正正确的方法是@Zurechtweiser提出的方法。
Roel Van de Paar

Answers:


13

我相信您可以通过使用-filter_complex选项和apad过滤器选项来实现您想要的目标,如果视频较长,则在最后用静音填充音频。您的命令将是:

ffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -shortest output.mp4

假设您想要的音频在audiofile.wav的第一流中,[A:B]语法表示从第A个输入中提取第B个流(均以0开头,因此[1:0]为来自第二个输入的第一个流,或上面的audiofile.wav)。

有关详细信息,访问:https : //www.ffmpeg.org/ffmpeg-filters.html#Examples-68


你应该提到,该-filter_complex选项强制重新编码-它例如可以运行ffmpeg -i videofile.mp4 -i audiofile.wav -c:v copy output.mp4,但不ffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -c:v copy -shortest output.mp4
尤金·里克

这是所要求的相反的答案。OP要求在音频结束时结束视频,如果音频比视频短,则给出的答案是增加音频静音。这个答案是不正确的。
Roel Van de Paar

这并不是OP所要求的“相反”。OP希望输出视频为输入视频的长度,而不管音轨的长度如何。我的回答针对的是输入视频比音频文件长的情况。对于输入视频短于音频文件的时间,OP已经具有解决方案,即使用-shortest。
死代码

10
  • 如果视频长度短于音频长度,-shortest则是您想要的。
  • 如果视频长度大于音频长度,则根本不需要任何标记。

没有标志可以自动执行此决定。

编辑

受@deadcode答案的启发,我需要弄清楚,如果您愿意重新编码,那么“没有标志要自动化”当然是不正确的:在这种情况下,请apad按照@deadcode的建议进行操作。

但是,如果您要避免重新编码(即-c:v copy),则答案正确。

使用解ffconcat复用器有一个解决方法,但是需要一些工作:

  • 创建一个包含与音频文件完全相同的格式的无声文件(“ silence.wav”)
  • 创建一个concat文件“ audio.ffconcat”(使用所需的静音行数,以确保音频足够长):

file 'audiofile.wav'
file 'silence.wav'
file 'silence.wav'
...
file 'silence.wav'
  • ffmpeg -i videofile.mp4 -f concat -i audio.ffconcat -c:v copy output.mp4

这将合成apad没有滤波器图的滤波器,从而允许多路复用器无需重新编码。


@RoelVandePaar正如我所说:如果视频长度短于音频长度,请使用-shortest,否则,如果要添加静音而不重新编码,请使用此解决方法。
Eugen Rieck

正确,错过了审查。删除了输入。随意做同样的事情。
Roel Van de Paar

3

如果您知道视频文件的长度,则可以使用

ffmpeg -i videofile.mp4 -i audiofile.wav -t 43 output.mp4

其中43是您的视频文件的长度,以秒为单位。


作者的问题是要在视频尚未播放完时循环播放音频文件。这样行吗?
拉斐尔·桑切斯

@RafaelSanches不,他没有。
Zurechtweiser '17

作者不想循环播放音频。这个答案也是执行OP所要求的唯一正确答案。输入视频结束时结束视频。
Roel Van de Paar
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.