gpt4 book ai didi

python - FFMPEG concat 在剪辑之间留下音频间隙

转载 作者:行者123 更新时间:2023-12-04 23:07:41 25 4
gpt4 key购买 nike

我正在编写一个使用 subprocess 调用 FFMPEG 的 python 脚本,而不是使用 pyffmpeg。

我的脚本使用 AAC 音频编解码器生成可变数量的 MP4 文件,并使用 FFMPEG 将它们连接在一起。这是我构建每个剪辑的方式:

ffmpeg -loop 1 -i image.jpg -i recording.mp3 -tune stillimage -c:a aac -b:a 256k -shortest clip.mp4

我用来连接它们的命令是:
ffmpeg -f concat -i clip_names.txt -c copy video_raw.mp4

然后我拍摄生成的视频,并在其上混合循环音轨,并调整音量。 (对不起,糟糕的格式)
ffmpeg -i video_raw -filter_complex
"amovie=Tracks/Breaktime.mp3:loop=0,
volume=0.1,
asetpts=N/SR/TB[aud];
[0:a][aud]amix[a]"
-map 0:v -map [a] -b:a 256k -shortest final_video.mp4

这些命令似乎按我的意图工作。当我从本地机器播放生成的 MP4 时,一切播放都没有问题。

但是,我将视频上传到 YouTube,并遇到了问题。从 YouTube 播放视频时,在连接两个剪辑的每个时间戳处,在下一个剪辑开始之前,会有大约一秒钟的静默。我在 Chrome、IE 和 Firefox 上都试过了,都遇到了同样的问题。

根据我目前所研究的情况,我认为如何处理每个剪辑的启动样本可能是一个问题。我没有义务继续使用 MP4 或 AAC,所以如果使用不同的音频/视频编解码器效果更好,请随时提出建议!

我可以在 FFMPEG 中进行某种类型的操作来摆脱启动样本,或者以不同的方式处理它们吗?最后,我正在寻找每个剪辑来背靠背播放,而不会出现 concat 操作似乎插入的延迟。谢谢!

最佳答案

这不是由于启动样本。 -shortest不保证所有流的长度相同,因为当复用器接收到停止输出的信号时,复用队列中可能有缓冲的数据包。对于 25 fps 的视频流,1 秒的溢出似乎是正确的。有办法mitigate持续时间溢出,但我建议您获取音频的持续时间并设置 -t X按照这个并跳过-最短。

此外,使用音频编解码器保存到 MOV -c:a pcm_s16le .您将避免启动样本偏移。

关于python - FFMPEG concat 在剪辑之间留下音频间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61128138/

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