Perl trim MP3 文件
Perl trim MP3 file
如何Trim MP3 文件有选择地从开始时间到结束时间。例如,如果我有 4 分钟的 mp3 文件,我需要 trim 仅在第二个 140 到第二个 170 之间播放文件的声音。如果是纯 Perl 模块或安装在 Windows 上的模块。
CPAN 上有两个模块。 MP3::Splitter
和 MP3::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
将在任何地方正常安装。
如何Trim MP3 文件有选择地从开始时间到结束时间。例如,如果我有 4 分钟的 mp3 文件,我需要 trim 仅在第二个 140 到第二个 170 之间播放文件的声音。如果是纯 Perl 模块或安装在 Windows 上的模块。
CPAN 上有两个模块。 MP3::Splitter
和 MP3::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
将在任何地方正常安装。