gpt4 book ai didi

ffmpeg - 在将音频 w/非零起始 PTS 和视频与基于零的 PTS 合并相同持续时间、对齐的流时预先生成音频静音

转载 作者:行者123 更新时间:2023-12-04 23:11:06 27 4
gpt4 key购买 nike

当从具有视频和音频流的媒体文件中提取片段而不重新编码(-c 复制)时,指定的请求查找和结束时间很可能不会精确地落在源中的关键帧上。
在这种情况下,ffmpeg 将抓取每个轨道最近的关键帧,并使用不同的起始 PTS 值定位它们,以便它们保持同步。
视频关键帧的间距往往更大,因此您通常会得到这样的结果:
enter image description here
在 VLC 中查看剪辑,音频将在 5 秒后开始。
但是,在其他视频播放器或视频编辑器中,我注意到这可能会导致一些播放问题或 a/v 不同步。
一种解决方案是在提取剪辑时重新编码两个流,允许 ffmpeg 精确地搜索到指定的搜索时间并生成相等长度和同步的音频和视频轨道。
但是,在我的情况下,我不想重新编码视频,它的成本很高,并且会产生较低质量的视频和/或更大的文件大小。我宁愿只重新编码音频,用生成的静音填充初始间隙。
这应该很简单,但是我尝试过的一切都未能在音频流开始之前产生静音。
我试过 apad,aresample=sync=1,并使用 amerge 将音频与 anullsrc 结合起来。它都不起作用。
我能想到的可能解决这个问题的方法是在未对齐的源上使用 ffprobe 来检索第一个音频 PTS,并在第二个 ffmpeg 过程中将此值应用为负值 -itoffset,然后将音轨与生成的持续时间的静音连接起来沉默......但肯定有更好的方法,只有一个ffmpeg实例?
有任何想法吗?

最佳答案

我只是通过尝试更多的东西偶然发现了解决方案。
我采用未对齐的源媒体并使用另一个带有一些音频过滤器的 ffmpeg 实例对其进行处理:

ffmpeg -fflags +genpts -i input.mkv -c copy -c:a aac -af apad,aresample=async=1:first_pts=0 -ac 2 -shortest -y output.mkv
它完全符合我的要求,用静音填充音频流的开头(和结尾),使音频流与视频的长度相等。
唯一的缺点是我无法将其与提取剪辑的原始 ffmpeg 命令结合使用,唯一可行的方法是分两步进行。

关于ffmpeg - 在将音频 w/非零起始 PTS 和视频与基于零的 PTS 合并相同持续时间、对齐的流时预先生成音频静音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68456194/

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