将MP3剪裁为前30秒。

118

原始问题

我想要生成一个新的(完全有效的)MP3文件,以供预览 - 类似试用购买。新文件应仅包含曲目的前n秒。

现在,我知道我可以在传递文件时在n秒处“切割流”(从比特率和标头大小计算),但这有点不好,并且对于VBR曲目而言真的很麻烦。我希望能够生成一个正确的MP3文件。

有人有任何想法吗?

答案

mp3splitffmpeg都是很好的解决方案。我选择了ffmpeg,因为它通常安装在Linux服务器上,而且也很容易在Windows上使用。以下是使用ffmpeg生成预览的更多好的命令行参数:

  • -t <seconds> 在指定的秒数后切割
  • -y 强制文件覆盖
  • -ab <bitrate> 设置比特率,例如-ab 96k
  • -ar <rate Hz> 设置采样率,例如-ar 22050表示22.05kHz
  • -map_meta_data <outfile>:<infile> 将曲目元数据从infile复制到outfile

您可以使用以下命令而不是设置-ab和-ar来复制原始曲目设置,如Tim Farley所建议:

  • -acodec copy

我没有针对这个特定的目的使用过它,但我打赌 ffmpeg 可以胜任。 - grapefrukt
只是一个想法:您可能希望跳过原歌曲的开头。比如说,您可以使用从歌曲的第三个位置开始的30秒片段。在某些歌曲中,前30秒并没有告诉您太多信息,因为它只是一个“设置场景”的部分 - 比如 Pink FloydShine On You Crazy Diamond - Tomas Sedovic
只是提醒一下,我在CentOS上使用ffmpeg、mptsplit和mp3cutter时遇到了很多问题,它们都报告“Header Missing”。因此,我不得不使用MP3类和一些数学方法按文件大小进行切割。 - Gardner
我没想到ffmpeg可以做到那个。谢谢。 - Sridhar Sarnobat
8个回答

165
我也推荐使用ffmpeg,但是John Boker建议的命令行有一个意外的副作用:它会重新编码文件为默认比特率(至少在我这个版本中为64 kb/s)。这可能会给您的客户留下音频质量不佳的假象,并且需要更长的时间处理。
以下是一个不需要转码就可以将文件切片为30秒的命令行:
ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3

-acodec开关告诉ffmpeg使用特殊的“copy”编解码器,它不进行转码。这非常快速。
注意:根据Oben Sonne的评论,命令已更新。

26
最近的 ffmpeg 版本(至少从0.10.6开始)根据位置不同解释选项。与输入相关的选项必须出现在-i ...之前,而与输出相关的选项必须出现在-i ...之后。这意味着ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3 现在是正确的答案。 - Oben Sonne
我能从15秒的输入文件中提取30秒的音频吗?这意味着如果文件大于30秒,则提取30秒,但如果文件只有15秒,则重复并提取完整的30秒。 - Girish Patidar
10
如果你想设置开始时间(偏移量),你可以使用 -ss hh:mm:ss[.xxx]。例如:ffmpeg -t 30 -ss 00:00:15.500 -i inputfile.mp3 -acodec copy outputfile.mp3 将从 00时00分15秒500毫秒 开始切割,切割 30秒 的音频。 - patryk.beza
2
由于某些原因,上述命令对我不起作用,但如果我将其更改为:ffmpeg -i inputfile.mp3 -t 30 -acodec copy outputfile.mp3,那么它就完美地工作了。 - Krishnendu
对我来说,必须在两个命令中分别使用-t和-s选项。但它有效,谢谢! - Yan King Yin

70

如果你想要删除开头的30秒钟(并保留剩余部分),请使用以下代码:

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

18

尝试:

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

16

这个命令也可以完美地运行。

我将我的音乐文件从20秒剪辑到40秒。

-y:强制输出文件覆盖已有文件。
ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3

2
太好了!感谢分享这个。 - HerrimanCoder

12

你可以使用mp3cut:

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

它在Ubuntu仓库中,所以只需运行以下命令:sudo apt-get install cutmp3


7

您可以尝试使用Mp3Splt

我曾在一个C#服务中使用过它,该服务只是简单地包装了mp3splt.exe win32进程。我认为在您的Linux/PHP环境中也可以做类似的事情。


2
成功使用了MP3Split来剪辑MP3。 - Freshblood

2
我在做相同的事情时遇到了错误。
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

1

我的软件包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

你可以访问我的代码库https://github.com/srbcheema1/medipack并查看README中的示例。


1
这个包装器有什么优势?因为它似乎并不比 ffmpeg -i input -ss <start time> -to <end time> output 更简单。 - llogan
2
ffmpeg-to选项,这就是你的-t选项所做的事情。 - llogan
在裁剪子选项下的README中提到的裁剪百分比选项怎么样?它也可用吗?我只是按照某人的要求创建了这个工具,他们支付了我一些钱,因为他们不想担心庞大的cli选项列表,只是想要一个可以轻松完成某些任务的工具,即使在ffmpeg中有所有选项,但对于新手来说,在其命令行帮助部分中找到所有选项仍然很困难。这个工具有一个简单的帮助部分,易于新手理解。 - srbcheema1
这只是一个粗略的示例,以展示语法。请参阅裁剪滤镜文档 - llogan
基本上,这就是构建包装器的动机,以减少对具有最低要求的人的搜索和文档查找。我自己大多数时候直接使用FFmpeg,但包装器主要是为那些具有最低要求和较少技术背景的人设计的。 - srbcheema1
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接