将MP3裁剪到前30秒


103

原始问题

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

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

有任何想法吗?

答案

这两个mp3splitffmpeg都是很好的解决方案。我选择ffmpeg是因为它通常安装在linux服务器上,并且也可以轻松地用于Windows。这是一些使用ffmpeg生成预览的更好的命令行参数

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

您可以复制原始的轨道设置(如Tim Farley所建议的那样),而不用设置-ab和-ar,方法是:

  • -acodec copy

我没有将其用于此特定目的,但我敢打赌ffmpeg可以做到。
grapefrukt

只是想一想:您可能想跳过原始歌曲的开头。再说了,你可以使用30秒片开始在第三的歌曲。在某些歌曲中,最初的30秒并不能告诉您太多,因为这只是“设置场景”的一部分,例如Pink Floyd的Shine On You Crazy Diamond》
Tomas Sedovic

恰如其分,我在CentOS上使用ffmpeg,mptsplit和mp3cutter时过得非常糟糕,他们都报告“ Header Missing”。因此,我不得不使用MP3类和一些数学方法来减少文件大小。
Gardner

我不知道ffmpeg可以做到这一点。谢谢。
Sridhar Sarnobat

Answers:


142

我还建议使用ffmpeg,但是John Boker建议的命令行会有意外的副作用:它将文件重新编码为默认比特率(至少在我这里使用的版本中为64 kb / s)。这可能会使您的客户对声音文件的质量有错误的印象,并且需要花费更长的时间。

这是一个命令行,无需转换即可切成30秒:

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

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

注意:该命令已根据Oben Sonne的评论进行了更新


21
最新ffmpeg版本(至少从0.10.6开始)根据位置对选项的解释有所不同。与输入相关的选项必须出现在之前,-i ...而与输出相关的选项必须出现在之后-i ...。这意味着ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3现在是正确的答案。
Oben Sonne 2012年

我可以从15秒的输入文件中提取30秒的音频吗,这意味着如果文件磨碎了30秒然后提取了30秒,但是如果文件15秒则重复并提取了30秒。
Girish Patidar '16

6
如果要设置开始时间(偏移),可以使用-ss hh:mm:ss[.xxx]。示例:将从00h 00m 15s 500ms开始ffmpeg -t 30 -ss 00:00:15.500 -i inputfile.mp3 -acodec copy outputfile.mp3切为30秒
patryk.beza

1
由于某种原因,上面的命令对我不起作用,但是如果我将其更改为:ffmpeg -i inputfile.mp3 -t 30 -acodec copy outputfile.mp3那么它运行得很好
Krishnendu

对我来说,-t和-s选项必须在2个命令中分别使用。但这有效,谢谢!
严景贤

57

如果您想删除前30秒(保留剩余的时间),请使用以下命令:

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



11

您可以使用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场景中完成类似的操作。


2
二手MP3Split成功用于mp3切割
Freshblood 2014年

0

我在执行相同操作时遇到错误

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

0

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

我还为aslo添加了一个选项,-t该选项可以替代使用,-e这意味着假设我要修剪下4分36秒的视频,我不必担心手动添加这些时间,我在裁剪视频时也提供了类似的便利,请参见示例在README中,您会明白为什么它的CLI比简单的ffmpeg更容易。我同意它不是那么强大,但对于普通人来说它是方便的工具。
srbcheema1

2
ffmpeg具有-to-t可能会做的选择。
llogan's

关于自述文件中“作物子选项”下的“作物百分比年龄”选项呢?我只是按需创建了一个工具,这个人花了我几美元,因为他们不想担心庞大的cli选项列表,只是他们想要一个可以轻松完成某些任务的工具,即使ffmpeg中有所有选择,但是对于noob来说,仍然很难在其命令行帮助部分中找到所有这些对象。这个工具有一个简单的帮助部分,对于
新手来说

当然,-vf "crop=iw*0.1:ih*0.1:0:0"
llogan's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.