[英]How to use the 'shortest' argument with ffmpeg-python
我第一次使用ffmpeg-python 。 我试图在ffmpeg.output()
中使用 shortest shortest=1
参数,但是当我使用它时,我的程序不断给我错误。
我想用来自 bar.webm 的音频替换来自foo.mp4
的音频,同时保持bar.webm
的视觉foo.mp4
。 我得到了这个工作,但问题是ffmpeg.concat
默认情况下会继续播放来自foo.mp4
的音频,而来自bar.webm
的视觉效果已经停止播放。 根据此 FFmpeg 文档页面,这是预期的行为:“concat 过滤器将使用每个段中最长的 stream 的持续时间(最后一个除外),并在必要时用静音填充较短的音频流。”
我希望 output 视频在视觉停止播放时停止,所以我希望它切断音频,但我无法让它工作。 该页面还指出,我应该能够添加shortest
作为参数以获得我想要的结果:“如果设置为 1,则在最短输入终止时强制 output 终止。默认值为 0。” 不过,我无法让它工作。 下面代码块中的第二行包含shortest=1
,我希望它可以工作,但我得到了这个错误:
[NULL @ 000001d50dfdea80] Unable to find a suitable output format for '1'
和1: Invalid argument
正如预期的那样,使用shortestfoo
反而会给我这个错误:
Unrecognized option 'shortestfoo'.
和Error splitting the argument list: Option not found
这告诉我shortest
的参数是一个可能的参数,但是我分配给它的1
值是错误的。 将它设置为None
我的程序运行,但音频仍然不会被设置为None
被切断,当然。
我应该在这里使用什么shortest
的值? 我在评估我只是使用错误的shortest
值时是否正确? 非常感谢!
编辑:尝试使用True
而不是 1。尝试使用**{'shortest': 1}
和**{'shortest': True}
。 这些也没有用。
import ffmpeg
input_video_name = 'foo'
input_video_extension = '.mp4'
input_audio_name = 'bar'
input_audio_extension = '.webm'
input_video = ffmpeg.input('input videos/' + input_video_name + input_video_extension)
input_audio = ffmpeg.input('input audio/'+ input_audio_name + input_audio_extension)
stream = ffmpeg.concat(input_video, input_audio, v=1, a=1)
stream = ffmpeg.output(stream, 'output videos/' + input_video_name + '.mp4', shortest=1)
ffmpeg.run(stream)
找到了答案: 这个人为我的问题提供了解决方案。 我不知道为什么这确实有效,所以我在原始代码中缺少什么:
video_part = ffmpeg.input('video.mp4')
audio_part = ffmpeg.input('audio.mp3')
(
ffmpeg
.output(audio_part.audio, video_part.video, 'output-video.mp4', shortest=None, vcodec='copy')
.run()
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.