使用 ffmpeg 从/到位置剪切音频

Mik*_*ike 31 audio mp3 ffmpeg cut

我需要从一个位置到另一个位置剪切音频文件中的部分。当我尝试这个命令时

ffmpeg -ss 132 -t 139 -i original.mp3 new.mp3
Run Code Online (Sandbox Code Playgroud)

它从第二个 132 开始,并将接下来的 139 秒添加到新文件中。

我需要的是从 132 秒到 139 秒。

当我尝试

ffmpeg -ss 132 -to 139 -i original.mp3 new.mp3
Run Code Online (Sandbox Code Playgroud)

它给了我一个错误:

Unrecognized option 'to'
Failed to set value '139' for option 'to'
Run Code Online (Sandbox Code Playgroud)

(我不想告诉需要多少秒,只是从/到)。

-- 我有 ffmpeg 版本 0.8.20-6:0.8.20-0+deb7u1(建于 2017 年 1 月 19 日 11:13:36,gcc 4.7.2)。当我尝试更新它(apt-get install ffmpeg)时,它告诉我“ffmpeg 已经是最新版本”。

Bra*_*rad 41

使用 FFmpeg,参数的顺序很重要。所有直接出现在输入之前的参数都将应用于该输入。输出也是如此……直接应用于输出之前的参数。

考虑这个命令行:

ffmpeg -ss 132 -i input.mp3 output.mp3
Run Code Online (Sandbox Code Playgroud)

-ss是要查找的参数,因此 FFmpeg 将在 132 秒内查找输入文件并在00:00:00. 与输出相关的其余 FFmpeg 命令不知道或不关心输入来自何处或如何寻找。因此,当您使用-toor 时-t,给定的时间或长度需要相对于 input。也就是说,如果您想要 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确保您不会通过转码进一步损害音频质量,因为您保持相同的格式。

  • `ffmpeg -ss <T0> -i <输入文件> -t <T1 - T0(以秒为单位的持续时间)> <输出文件>` 或 `ffmpeg -ss <T0> -i <输入文件> -t <T0(格式00:00:00) + (T1 - T0)> <输出文件>` 例如 `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”` (4认同)
  • 对不起。不知道你对细微的编辑很敏感,以提高准确性。 (3认同)
  • @LordNeckbeard 我不是,但这不仅仅是一个小的编辑,没有为我已经写的内容添加任何实质内容,并添加了一些您认为应该归于我的其他意见。(并不是说我不同意你 re:bugginess 和什么不同意。我只是希望你保留评论作为你的评论。) (3认同)

小智 20

这对我有用

ffmpeg -ss 60 -i input-audio.aac -t 15 -c copy output.aac
Run Code Online (Sandbox Code Playgroud)
  • -ss 60表示“从第二个 60 开始”
  • -t 15以秒为单位的音频输出长度.. 在这种情况下,15 秒..


小智 15

ffmpeg -i "original.mp3" -ss 60 -to 70 "new.mp3"
Run Code Online (Sandbox Code Playgroud)

这对我有用。

  • @Brad,这取决于原始海报想要什么。将 -ss 放在 -i 之前意味着首先进行查找,这是到达起始时间戳的更快方法。然而,这可能并不总是产生帧精确剪切。如果您使用 ffmpeg 2.1 或更高版本,那么 -i 之前的 -ss 会很快,因为 -ss 现在是帧精确的。有关更多详细信息,请参阅此链接 https://trac.ffmpeg.org/wiki/Seeking (2认同)

小智 6

-ss是输入选项,而-t-to是输出选项。所以你需要这样做:

ffmpeg -ss 60 -i 'les nuits 128k.m4a' -to 70 -c copy out.m4a
Run Code Online (Sandbox Code Playgroud)