【问题标题】:Crop MP3 to first 30 seconds将 MP3 裁剪到前 30 秒
【发布时间】:2010-09-07 19:37:27
【问题描述】:

原始问题

我希望能够从现有的 MP3 文件生成一个新的(完全有效的)MP3 文件以用作预览 - 先试后买风格。新文件应仅包含曲目的前 n 秒。

现在,我知道在传送文件时我可以在 n 秒(根据比特率和标头大小计算)“截断流”,但这有点脏,而且是真正的 PITA一个 VBR 轨道。我希望能够生成正确的 MP3 文件。

有人有什么想法吗?

答案

mp3splitffmpeg 都是很好的解决方案。我选择了 ffmpeg,因为它通常安装在 linux 服务器上,也是easily available for windows。这里有一些更好的命令行参数,用于使用 ffmpeg 生成预览

  • -t <seconds>在指定秒数后斩波
  • -y 强制文件覆盖
  • -ab <bitrate> 设置比特率,例如-ab 96k
  • -ar <rate Hz> 设置采样率,例如-ar 22050 用于 22.05kHz
  • -map_meta_data <outfile>:<infile> 将轨道元数据从 infile 复制到 outfile

您可以按照 Tim Farley 的建议复制原始轨道设置,而不是设置 -ab 和 -ar:

  • -acodec copy

【问题讨论】:

  • 我没有将它用于这个特定目的,但我敢打赌ffmpeg 可以做到。
  • 只是一个想法:您可能想跳过原始歌曲的开头。比如说,你可以从歌曲的第三开始使用 30 秒的乐曲。在某些歌曲中,前 30 秒并不能说明什么,因为它只是“设置场景”的一部分——例如 Pink FloydShine On You Crazy Diamond
  • 请注意,我在 CentOS 上使用 ffmpeg、mptsplit 和 mp3cutter 时遇到了非常糟糕的情况,它们都报告“缺少标题”。所以,我不得不使用 MP3 类和一些数学来削减文件大小。
  • 我没有意识到 ffmpeg 可以做到这一点。谢谢。

标签: mp3 ffmpeg


【解决方案1】:

我也推荐 ffmpeg,但 John Boker 建议的命令行有一个意想不到的副作用:它将文件重新编码为默认比特率(在我这里的版本中至少是 64 kb/s)。这可能会让您的客户对您的声音文件的质量产生错误的印象,而且这也需要更长的时间。

这是一个无需转码的命令行,将切片到 30 秒:

ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3

-acodec 开关告诉 ffmpeg 使用不转码的特殊“复制”编解码器。速度快如闪电。

注意:命令是根据 Oben Sonne 的评论更新的

【讨论】:

  • 最近的ffmpeg 版本(至少从 0.10.6 开始)根据位置不同地解释选项。输入相关选项必须出现在-i ... 之前,输出相关选项必须出现在-i ... 之后。这意味着ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3现在成为正确答案。
  • 我可以从 15 秒的输入文件中提取 30 秒的音频吗,这意味着如果文件 grater 然后 30 秒然后提取 30 秒,但如果文件 15 秒然后重复并提取完整的 30 秒。
  • 如果你想设置开始时间(偏移量)你可以使用-ss hh:mm:ss[.xxx]。示例:ffmpeg -t 30 -ss 00:00:15.500 -i inputfile.mp3 -acodec copy outputfile.mp3 将从 00h 00m 15s 500ms 开始切片到 30 秒
  • 由于某种原因,上面的命令对我不起作用,但如果我将其更改为:ffmpeg -i inputfile.mp3 -t 30 -acodec copy outputfile.mp3 那么它工作得很好
  • 对我来说 -t 和 -s 选项必须在 2 个命令中单独使用。但它有效,谢谢!
【解决方案2】:

如果您希望删除前 30 秒(并保留剩余部分),请使用:

ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3

【讨论】:

    【解决方案3】:

    尝试:

    ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3
    

    【讨论】:

      【解决方案4】:

      此命令也可以完美运行。 我将音乐文件从 20 秒缩短到 40 秒。

      -y : 强制覆盖输出文件。

      ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3
      

      【讨论】:

      • 完美!感谢分享。
      【解决方案5】:

      你可以使用 mp3cut:

      cutmp3 -i foo.mp3 -O 30s.mp3 -a 0:00.0 -b 0:30.0
      

      它在 ubuntu 存储库中,所以只需:sudo apt-get install cutmp3

      【讨论】:

        【解决方案6】:

        你可能想试试Mp3Splt

        我之前在一个简单地包装了 mp3splt.exe win32 进程的 C# 服务中使用过它。我假设在你的 Linux/PHP 场景中可以做类似的事情。

        【讨论】:

        • 使用 MP3Split 成功剪切 mp3
        【解决方案7】:

        我在做同样的事情时遇到了错误

        Invalid audio stream. Exactly one MP3 audio stream is required.
        Could not write header for output file #0 (incorrect codec parameters     ?): Invalid argumentStream mapping:
        

        对我的修复是:

        ffmpeg -ss 00:02:43.00 -t 00:00:10 -i input.mp3 -codec:a libmp3lame out.mp3
        

        【讨论】:

          【解决方案8】:

          我的包medipack是一个非常简单的命令行应用程序,作为ffmpeg的包装器。

          您可以使用以下命令来修剪视频:

          medipack trim input.mp3 -s 00:00 -e 00:30 -o output.mp3
          medipack trim input.mp3 -s 00:00 -t 00:30 -o output.mp3
          

          您可以查看 trim 子命令的选项:

          srb@srb-pc:$ medipack trim -h
          usage: medipack trim [-h] [-s START] [-e END | -t TIME] [-o OUTPUT] [inp]
          
          positional arguments:
            inp                   input video file ex: input.mp4
          
          optional arguments:
            -h, --help            show this help message and exit
            -s START, --start START
                                  start time for cuting in format hh:mm:ss or mm:ss
            -e END, --end END     end time for cuting in format hh:mm:ss or mm:ss
            -t TIME, --time TIME  clip duration in format hh:mm:ss or mm:ss
            -o OUTPUT, --output OUTPUT
          

          您还可以使用 medipack -h 探索其他选项

          srb@srb-pc:$ medipack --help
          usage: medipack.py [-h] [-v] {trim,crop,resize,extract} ...
          
          positional arguments:
            {trim,crop,resize,extract}
          
          optional arguments:
            -h, --help            show this help message and exit
            -v, --version         Display version number
          

          您可以访问我的 repo https://github.com/srbcheema1/medipack 并查看自述文件中的示例。

          【讨论】:

          • 这个包装器有什么好处?因为它看起来并不比ffmpeg -i input -ss <start time> -to <end time> output 简单
          • 我还添加了-t 选项,它可以替代-e 使用,这意味着假设我要修剪下一个 4 分 36 秒的视频,我不必担心手动添加这些时间,我在裁剪视频时也提供了类似的便利,请参阅 README 中的示例,您会明白为什么它的 CLI 比简单的 ffmpeg 更容易。我同意它不是那么强大,但对于普通人来说它是方便的工具。
          • ffmpeg 具有 -to 选项,这正是您的 -t 可能所做的。
          • 自述文件中crop 子选项下提到的crop %age 选项怎么样,是否也可用?我刚刚由付给我几块钱的人按需创建了该工具,因为他们不想担心大型 cli 选项列表,只是他们想要一个可以轻松完成某些任务的工具,即使 ffmpeg 中有所有选项,但是对于菜鸟来说,仍然很难在其命令行帮助部分中找到所有这些。这个工具有一个简单的帮助部分,菜鸟很容易理解
          • 当然,-vf "crop=iw*0.1:ih*0.1:0:0"
          猜你喜欢
          • 2015-08-29
          • 1970-01-01
          • 2010-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-26
          • 2020-12-25
          • 2017-05-08
          相关资源
          最近更新 更多