Perl trim MP3 文件

Perl trim MP3 file

如何Trim MP3 文件有选择地从开始时间到结束时间。例如,如果我有 4 分钟的 mp3 文件,我需要 trim 仅在第二个 140 到第二个 170 之间播放文件的声音。如果是纯 Perl 模块或安装在 Windows 上的模块。

CPAN 上有两个模块。 MP3::SplitterMP3::Cut::Gapless,两者都包含 C 代码,目前无法在 Windows 下编译。请注意,Windows 并不完全是 Windows 的错,MP3::Splitter 似乎在最近的 Perls 中不起作用。由于依赖关系中断 (MPEG::Audio::Frame),它失败了,我正在调查,也许我可以找到修复方法。

同时,如果您使用 Windows 10,您可以尝试 Windows (WSL) 的 Linux 子系统,并从那里 运行 您的脚本.

use MP3::Cut::Gapless;

my $cut = MP3::Cut::Gapless->new(
    file      => 'input.mp3',
    start_ms  => 140000,
    end_ms    => 170000,
);

open my $out, '>', 'output.mp3' or die "Can't write MP3";

while ( $cut->read( my $buf, 4096 ) ) {
    syswrite $out, $buf;
}

close $out;

或者你可以安装一个名为 ffmpeg 和 shell 的轻量级工具

`ffmpeg -ss 00:02:20 -t 00:00:30 -i input.mp3 output.mp3`

好的,这是一个更新

我调查了 MPEG::Audio::Frame 的问题,只是测试失败了 ¹!

也就是说,您可以先强制安装 MPEG::Audio::Frame,然后再常规安装 MP3::Splitter。那么你可以运行这个脚本

use MP3::Splitter;
mp3split('yourfile.mp3', {verbose => 1}, [140, 30]);

然后您将在与输入文件相同的目录中找到新文件“01_yourfile.mp3”。这是一个笨拙的界面,但至少它可以工作。

¹我联系了作者。问题是测试从 DATA 读取数据,但作者没有使用 binmode。因此,在 Windows 下,DATA 被读取为文本,并且狗屎出错了。

最后更新

我设法获得了 MPEG::Audio::Frame 的维护权并修复了错误。新版本 0.10 现在在 CPAN 上。因此,通过此修复,MP3::Splitter 将在任何地方正常安装。