使用 ffmpeg 从/到位置剪切音频
Posted
技术标签:
【中文标题】使用 ffmpeg 从/到位置剪切音频【英文标题】:Using ffmpeg to cut audio from/to position 【发布时间】:2018-03-12 11:51:28 【问题描述】:我需要从一个位置到另一个位置剪切音频文件中的部分。当我尝试这个命令时
ffmpeg -ss 132 -t 139 -i original.mp3 new.mp3
它从第二个 132 开始,并将接下来的 139 秒添加到新文件中。
我需要的是从第 132 秒到第 139 秒。
当我尝试时
ffmpeg -ss 132 -to 139 -i original.mp3 new.mp3
它给了我一个错误:
Unrecognized option 'to'
Failed to set value '139' for option 'to'
(我不想说需要多少秒,只是从/到)。
-- 我有 ffmpeg 版本 0.8.20-6:0.8.20-0+deb7u1(使用 gcc 4.7.2 构建于 2017 年 1 月 19 日 11:13:36)。当我尝试更新它(apt-get install ffmpeg)时,它告诉我“ffmpeg 已经是最新版本”。
【问题讨论】:
【参考方案1】:使用 FFmpeg,参数的顺序很重要。直接出现在输入之前的所有参数都将应用于该输入。输出也是如此...直接应用于输出之前的参数。
考虑这个命令行:
ffmpeg -ss 132 -i input.mp3 output.mp3
-ss
是要查找的参数,因此 FFmpeg 将在 132 秒内查找输入文件,并在 00:00:00
处有效处理。与输出相关的其余 FFmpeg 命令不知道也不关心输入来自何处或如何查找。因此,当您使用-to
或-t
时,给定的时间或长度需要相对于输入。也就是说,如果你想要从 132 到 139 秒,你想寻找 132 的输入(-ss 132 -i input.mp3
),然后运行输出 7 秒(-t 7 output.mp3
或 -to 00:00:07 output.mp3
)。
您可以在文档中阅读有关此内容的更多信息,以及有关帧精确与否(是否重新编码)的详细信息:https://trac.ffmpeg.org/wiki/Seeking
至于-to
不在……
如上所示,我拥有最新版本的软件。
您绝对肯定不远程拥有最新版本的 FFmpeg。无论包管理器拥有什么分支,您都可能拥有最新版本,而且它可能是今年构建的,但如果您查看下载页面,截至本文撰写时的最新版本是 3.3.4。 https://www.ffmpeg.org/download.html
您可以处理您的包管理器和依赖地狱,或者根据您的许可限制,获取最近的静态构建:https://www.johnvansickle.com/ffmpeg/
最后,考虑-acodec copy
以确保您不会因转码而进一步损害音频质量,因为您保持相同的格式。
【讨论】:
对不起。不知道您对提高准确性的小修改很敏感。 @LordNeckbeard 我不是,但这不仅仅是一个小编辑,没有在我已经写的内容中添加任何实质内容,并添加了一些您的其他意见,这些意见将归因于我。 (并不是说我不同意你的观点:错误等等。我只是希望你将评论保留为归因于你的评论。)ffmpeg -ss <T0> -i <input file> -t <T1 - T0(duration in seconds)> <out file>
或 ffmpeg -ss <T0> -i <input file> -t <T0(format 00:00:00) + (T1 - T0)> <out file>
例如 ffmpeg -ss 00:15:30 -i "a.mp3" -t 25 "b.mp3"
或 ffmpeg -ss 00:15:30 -i "a.mp3" -t 00:00:25 "b.mp3"
【参考方案2】:
ffmpeg -i "original.mp3" -ss 60 -to 70 "new.mp3"
这对我有用。
【讨论】:
请注意,这是一种非常低效的搜索方式。在开始输出之前寻找输入的效率要高得多。 @Brad 这取决于原始海报想要什么。将 -ss 放在 -i 之前意味着首先发生搜索,这是到达起始时间戳的更快方法。但是,这可能并不总能产生帧精确剪切。如果您使用的是 ffmpeg 2.1 或更高版本,则 -ss before -i 会很快,因为 -ss 现在是帧精确的。有关详细信息,请参阅此链接trac.ffmpeg.org/wiki/Seeking【参考方案3】:使用 FFmpeg
修剪音频文件开始持续时间 = 00:00:00, endDuration = 00:00:10
audioPath = 音频.mp3, mp3Output = outputFile.mp3
cmd = "-ss $startDuration -i $audioPath -c copy -t $endDuration $mp3Output"
【讨论】:
【参考方案4】:这对我有用
ffmpeg -ss 60 -i input-audio.aac -t 15 -c copy output.aac
-ss 60 意思是“从第二个 60 开始”
-t 15 音频输出长度(以秒为单位).. 在本例中为 15 秒..
【讨论】:
【参考方案5】:-ss
是输入选项,而-t
和-to
是输出选项。所以你需要这样做:
ffmpeg -ss 60 -i 'les nuits 128k.m4a' -to 70 -c copy out.m4a
【讨论】:
它给了我一个错误:无法识别选项 'to',无法为选项 'to' 设置值 '139' - 并且没有创建输出文件 @Mike 是 4 年前添加的,所以这是你的问题 github.com/FFmpeg/FFmpeg/commit/2d70446 如上所示,我拥有最新版本的软件。那么您认为问题出在哪里?以上是关于使用 ffmpeg 从/到位置剪切音频的主要内容,如果未能解决你的问题,请参考以下文章