裁剪MP3到第30秒

原来的问题

我希望能够从现有的MP3文件中生成一个新的(完全有效的)MP3文件,以用作预览 – “先试后买”的样式。 新文件应该只包含轨道的前n秒。

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

任何任何想法?

答案

mp3split和ffmpeg都是很好的解决scheme。 我select了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,但是John Bokerbuild议的命令行有一个意想不到的副作用:它将文件重新编码为默认比特率(至less在这里是64kb / s)。 这可能会让您的客户对声音文件的质量产生错误的印象,而且这样做也需要更长的时间。

这是一个命令行,将切片到30秒,而不需要转码:

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

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

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

如果你想删除前30秒(并保留余下的),那么使用这个:

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

尝试:

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

你可以使用mp3cut:

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

这是在Ubuntu的回购,所以只是: sudo apt-get install cutmp3

你可能想试试Mp3Splt 。

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

只是一个想法:你可能想跳过原始歌曲的开头。 比方说,你可以在歌曲的第三部分使用30秒。
在一些歌曲中,前30秒没有告诉你,因为它只是“设置场景”的一部分 – 例如Pink Floyd的 “ 闪耀钻石” 。

我没有用它来达到这个目的,但我敢打赌, ffmpeg可以做到这一点。

这个命令也是完美的。 我把我的音乐从20秒缩短到了40秒。

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

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

我已经使用这个: http : //mp3splt.sourceforge.net/mp3splt_page/home.php之前有很好的结果

正如我注意到的,我在CentOS上使用ffmpeg,mptsplit和mp3cutter的时间非常糟糕,他们都报告“Header Missing”。 所以,我必须去MP3类和一些math文件大小削减。

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

 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