首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >切割多个部分后不同步的音频和视频- FFMPEG

切割多个部分后不同步的音频和视频- FFMPEG
EN

Stack Overflow用户
提问于 2022-02-25 12:19:30
回答 1查看 73关注 0票数 -1

当我试图切割视频的多个部分时,我遵循这个问题的解决方案,Cut multiple parts of a video with ffmpeg。但问题是,如果我削减了超过几次(比如大约20次或更多),视频和音频将不会同步。

这是我使用的基线:

代码语言:javascript
复制
  ffmpeg -i video \
       -vf "select='between(t,4,6.5)+between(t,17,26)+between(t,74,91)',
            setpts=N/FRAME_RATE/TB" \
       -af "aselect='between(t,4,6.5)+between(t,17,26)+between(t,74,91)',
            asetpts=N/SR/TB" out.mp4
EN

回答 1

Stack Overflow用户

发布于 2022-02-26 14:19:21

首先是解释。罪魁祸首是骨折者: 23.98 =24000/1001fps。以between(t,4,6.5)为例,这些时间戳以秒为单位转换为第95.904帧和第155.844帧,两种帧都不存在.假设select选择最近的帧(它可以截断,但您可以理解):它实际上设置了框架96 = 4.004 s和帧156 = 6.5065 s的边界,同时,aselect可以在任意整数或半秒内选择准确的音频样本。因此,在本例中,所选的音频样本占您指定的2.5秒,而视频帧跨度为2.5025秒,因此后者的长度为2.5ms。虽然这种数量的同步丢失可能并不明显,但当您进行20次削减时,此错误会复合。

那么,如何解决这个问题?我可以想到两种方法:

  1. 将所有视频select的时间调整到(接近)精确的帧时间.像上面的例子一样,计算所有裁剪上最近的帧时间,并在selectaselect上使用它们。以防万一,公式是t = round(t_desired*24000/1001)*1001/24000。音频样本可能不会对齐调整的时间,但每次切割只会引入小于1/44100 = 22.68 us的错误。这不应该是显而易见的,即使是20次削减

也是如此。

  1. 通过在fps=24过滤器前面加上一个fps=24过滤器来更改视频帧。此框架保证帧与整数/半/四分之一秒对齐。如果需要23.98 fps,还可以添加-r 24000/1001输出选项以恢复到原来的速率。

希望其中之一能对你的案子有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71265774

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档