audio - 如何使用 FFMPEG 为 -SS 找到“安全”点以避免破坏 A/V 同步?
问题描述
我需要找到一种在不破坏音频/视频同步的情况下使用 -SS 剪切视频的方法。
偶尔它工作得非常好,但大多数时候音频会稍微不同步。显然有一些类似于音频关键帧的东西,但我不知道如何找到它们。
将 -SS 与编解码器的任何规范(包括 -c 复制)结合使用时会出现问题。
就我的目的而言,我不能失去质量,所以这些是必要的。
ffmpeg -i src.mp4 -ss 1:00 -t 30 -c copy result.mp4
往往会破坏同步。
ffmpeg -i src.mpr -ss 1:00 -t 30 result.mp4
产生匹配的 a/v,但使用默认压缩会导致显着的质量损失。
我需要一种方法来找到剪辑将导致匹配 a/v 的时间。
解决方案
这个问题实际上与视频关键帧有关。音频/视频有效地在您的 MP4 输出中的不同时间开始。
对于它的价值,我发现使用 Matroska 输出效果很好,因为它似乎比 MP4 更好地支持这些不同的时间戳。
无论如何,您可能会发现此讨论很有帮助: https ://github.com/mifi/lossless-cut/pull/13
这是可能对您有用的相关 FFmpeg 命令。请试一试!
ffmpeg -ss 1:00 -i src.mp4 -t 30 -avoid_negative_ts make_zero -c copy result.mp4
这里的关键是avoid_negative_ts
,我相信它允许将以前的 GOP 输出到文件,但是将它们的时间戳设置为全部发生在零(直到它们不应该,当然),这样它们就可以用于解码,允许你任意剪切文件而不转码。
推荐阅读
- java - JavaFX: PannableCanvas: 获取 CenterX/Y
- javascript - 在可折叠面板主体中显示不同的数据
- laravel - Laravel Blade 模板 - 如何在 foreach 循环中使用增量变量
- unix - cd ./dirname 与 cd dirname 之间有什么区别?
- javascript - 从 tampermonkey 脚本调用 Javascript 文件中的函数
- node.js - 护照 req.isAuthenticated() 不起作用
- r - 在另一个数据框中查找最接近日期的数据点
- python - 交互式 Windows 服务?
- javascript - 跳过相同的字符串值
- php - SELECT 列表不在 GROUP BY 子句中,并且包含非聚合列“explore.ratings.id”