【问题标题】:Using ffmpeg to cut audio from/to position使用 ffmpeg 从/到位置剪切音频
【发布时间】: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 已经是最新版本”。

【问题讨论】:

    标签: audio ffmpeg mp3 cut


    【解决方案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
        • 如上所示,我拥有最新版本的软件。那么您认为问题出在哪里?
        猜你喜欢
        • 1970-01-01
        • 2018-01-30
        • 2019-09-29
        • 2013-09-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-01
        • 2015-12-04
        相关资源
        最近更新 更多