gpt4 book ai didi

python - 如何在 ffmpeg-python 中使用 'shortest' 参数

转载 作者:行者123 更新时间:2023-12-04 22:52:57 33 4
gpt4 key购买 nike

我正在使用 ffmpeg-python我第一次。我正在尝试使用 shortest=1 ffmpeg.output() 中的参数,但是我的程序在我使用它时不断给我错误。

我想替换 foo.mp4 中的音频来自 bar.webm 的音频,同时保持 foo.mp4 的视觉效果.我得到了这个工作,但问题是 ffmpeg.concat默认情况下继续播放来自 bar.webm 的音频而来自 foo.mp4 的视觉效果已经停止播放。根据this FFmpeg docs page ,这是预期的行为:
“concat 过滤器将使用每个片段中最长流的持续时间(最后一个除外),并在必要时用静音填充较短的音频流。”

我希望在视觉停止播放时停止输出视频,所以我希望它切断音频,但我无法让它工作。该页面还指出我应该能够添加 shortest作为获得我想要的结果的参数:“如果设置为 1,则在最短的输入终止时强制输出终止。默认值为 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 的值(value)是多少?我应该在这里使用吗?我是否正确评估我只是使用了错误的值 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)

最佳答案

找到答案 : This person为我的问题提供了解决方案。我不知道为什么这会起作用,所以我在原始代码中缺少什么:

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()

)

关于python - 如何在 ffmpeg-python 中使用 'shortest' 参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61760400/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com