裁剪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