原始问题
我希望能够从现有的MP3文件生成一个新的(完全有效的)MP3文件,用作预览 - 先试后买的风格.新文件应仅包含曲目的前n秒.
现在,我知道我可以在传送文件时在n秒(从比特率和标题大小计算)"切断流" ,但这有点脏,并且在VBR轨道上是真正的PITA.我希望能够生成一个合适的MP3文件.
任何想法?
答案
这两个mp3split
和ffmpeg
都是很好的解决方案.我选择了ffmpeg,因为它通常安装在Linux服务器上,也很容易用于Windows.这里有一些更好的命令行参数,用于使用ffmpeg生成预览
-t
在指定的秒数后切断
-y
强制文件覆盖
-ab
设置比特率,例如-ab 96k
-ar
设置采样率,例如-ar 22050为22.05kHz
-map_meta_data
将跟踪元数据从infile复制到outfile
而不是设置-ab和-ar,您可以像Tim Farley建议的那样复制原始曲目设置:
-acodec copy
Tim Farley.. 130
我还推荐使用ffmpeg,但是John Boker建议的命令行有一个意想不到的副作用:它将文件重新编码为默认比特率(至少我在这里的版本是64 kb/s).这可能会让您的客户对声音文件的质量产生错误的印象,而且还需要更长的时间.
这是一个命令行,在没有转码的情况下切片到30秒:
ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3
-acodec开关告诉ffmpeg使用不转码的特殊"复制"编解码器.它闪电般快速.
注意:该命令是根据Oben Sonne的评论更新的
我还推荐使用ffmpeg,但是John Boker建议的命令行有一个意想不到的副作用:它将文件重新编码为默认比特率(至少我在这里的版本是64 kb/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
.
这个命令也很完美.我将音乐从20秒缩短到40秒.
-y:强制输出文件覆盖.
ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3
您可能想尝试Mp3Splt.
我之前在C#服务中使用过它,它只包含了mp3splt.exe win32进程.我假设你的Linux/PHP场景可以做类似的事情.