原始问题

我希望能够从现有 MP3 文件生成新的(完全有效)MP3 文件以用作预览 - 先试后买的风格。新文件应该只包含第一个 n 轨道的秒数。

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

有人有什么想法吗?

答案

两个都 mp3splitffmpeg 都是很好的解决方案。我选择 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 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 场景中完成。

我没有将它用于这个特定目的,但我敢打赌 ffmpeg 可以做到。

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

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top