По сути, я пытаюсь извлечь аудио из набора загруженных видео с YouTube, имена которых (частично) идентифицированы в файле (mus.txt), который был открыт с помощью ручки TXTFILELIST
, TXTFILELIST
содержит один 11-символьный идентификатор для видео в каждой строке (например, «dQw4w9WgXcQ»), а загруженный файл имеет форму [title] - [ID] .mp4 (в предыдущем примере «Rick Astley - Никогда не собираюсь поднять тебя - dQw4w9WgXcQ.mp4 ").
#snip...
if ($opt_extract_audio) {
open(TXTFILELIST, "<", "mus.txt") or die $!;
my @all_dir_files = `dir /b`;
my $file_to_convert;
foreach $file_to_convert (<TXTFILELIST>) {
my @files = grep("/${file_to_convert}\.mp4$/", @all_dir_files); #the problem line!
print "files: @files\n";
foreach $file (@files) {
system("ffmpeg.exe -i ${file} -vn -y -acodec pcm_s16le -ac 2 ${file}.wav");
}
}
#snip...
Остальная часть отсканированного кода работает (я проверил его с несколькими видео, заменив vars, комментируя и т. Д.), Является законным (я использовал прагмы strict
и warnings
) и, я считаю, не имеет значения, потому что это не имеет никакого отношения к определению любых переменных (кроме $opt_extract_audio
), используемых в этом фрагменте. Тем не менее, это один кусочек кода, который доставляет мне проблемы; Я не могу извлечь файлы, идентифицированные в TXTFILELIST
из @all_dir_files
. Я получил код «проблемной строки» от других специалистов по переполнению стека, но по какой-то причине он не работает.
TL; DR. Я хочу сделать следующее: перечислить все файлы в текущем каталоге (скажем, каталог содержит mus.txt, «Rick Astley - Never Gonna Give You Up-dQw4w9WgXcQ.mp4» и blah.mp4) выберите только идентифицированные файлы (видео Рика Эстли), используя 11-символьный идентификатор в TXTFILELIST
(dQw4w9WgXcQ), и извлеките из него аудио. И да, я запускаю этот скрипт в Windows, поэтому я не могу использовать утилиты * nix, такие как ack
или find
.