Perl обрезать MP3-файл - PullRequest
       9

Perl обрезать MP3-файл

1 голос
/ 05 октября 2019

Как выборочно обрезать MP3-файл от времени начала до конца. Например, если у меня есть 4-минутный файл mp3, и мне нужно обрезать звук файла только между вторым 140 и вторым 170. Если это чистый Perl-модуль или модуль, который устанавливается в Windows.

1 Ответ

2 голосов
/ 05 октября 2019

В CPAN есть два модуля. MP3::Splitter и MP3::Cut::Gapless, оба из которых содержат C-код и в настоящее время не компилируются под Windows. Имейте в виду, что не совсем вина Windows, MP3::Splitter, похоже, нигде не работает с последними Perls. Сбой из-за сломанной зависимости (MPEG::Audio::Frame), я смотрю на это, может быть, я найду исправление.

Тем временем, если вы используете Windows 10, вы можете дать подсистему Linux дляWindows (WSL) попытайтесь запустить свой сценарий оттуда.

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 и выполнить оболочку для этого

`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 данные читаются как текст, а дерьмо идет не так.

Окончательное обновление

Мне удалось получить сопровождение MPEG::Audio::Frame и исправить ошибку. Новая версия 0.10 теперь на CPAN. Следовательно, с этим исправлением MP3::Splitter будет нормально работать везде.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...