原始问题
我希望能够从现有的MP3文件生成一个新的(完全有效的)MP3文件,以用作预览 - 先试后买的风格。新文件应该只包含曲目的第一个 n 秒。
现在,我知道我可以在传递文件时在 n 秒(从比特率和标头大小计算)中“切断流”,但这有点脏,真正的PITA on一个VBR轨道。我希望能够生成一个合适的MP3文件。
任何想法?
答案
mp3split
和ffmpeg
都是很好的解决方案。我选择了ffmpeg,因为它通常安装在linux服务器上,也是easily available for 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
答案 0 :(得分:126)
我也推荐使用ffmpeg,但John Boker建议的命令行有一个意想不到的副作用:它将文件重新编码为默认比特率(至少我在这里的版本是64 kb / s)。这可能会让您的客户对声音文件的质量产生错误的印象,而且还需要更长的时间。
这是一个命令行,在没有转码的情况下切片到30秒:
ffmpeg -t 30 -i inputfile.mp3 -acodec copy outputfile.mp3
-acodec开关告诉ffmpeg使用不转码的特殊“复制”编解码器。它闪电般快。
注意:该命令已根据Oben Sonne的评论更新
答案 1 :(得分:50)
如果您想要删除前30秒(并保留剩余部分),请使用:
ffmpeg -ss 30 -i inputfile.mp3 -acodec copy outputfile.mp3
答案 2 :(得分:17)
尝试:
ffmpeg -t 30 -i inputfile.mp3 outputfile.mp3
答案 3 :(得分:11)
你可以使用mp3cut:
cutmp3 -i foo.mp3 -O 30s.mp3 -a 0:00.0 -b 0:30.0
这是在ubuntu repo中,所以只需:sudo apt-get install cutmp3
。
答案 4 :(得分:9)
此命令也可以完美运行。 我将音乐文件从20秒到40秒裁剪。
-y:强制输出文件覆盖。
ffmpeg -i test.mp3 -ss 00:00:20 -to 00:00:40 -c copy -y temp.mp3
答案 5 :(得分:5)
您可能想尝试Mp3Splt。
之前我在C#服务中使用过它,它只包含了mp3splt.exe win32进程。我假设你的Linux / PHP场景可以做类似的事情。
答案 6 :(得分:3)
我没有将它用于此特定用途,但我打赌ffmpeg可以做到这一点。
答案 7 :(得分: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
答案 8 :(得分: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中签出示例。