gpt4 book ai didi

regex - 从perl中工作目录中的某些文件中提取音频

转载 作者:行者123 更新时间:2023-12-02 08:52:27 25 4
gpt4 key购买 nike

基本上,我要做的是从一组下载的 YouTube 视频中提取音频,这些视频的名称(部分)在使用句柄 打开的文件 (mus.txt) 中标识TXTFILELISTTXTFILELIST 每行包含一个 11 个字符的视频标识符(例如,“dQw4w9WgXcQ”),下载的文件格式为 [title]-[ID].mp4(在上一个示例中, "Rick ASTLey - Never Gonna Give You Up-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...

剩下的代码是有效的(我用几个视频检查过,替换变量,评论等),是合法的(我使用了strictwarnings pragmas),而且我认为它是无关紧要的,因为它与定义此代码段中使用的任何变量($opt_extract_audio 除外)无关。但是,这是给我带来麻烦的一段代码;我似乎无法从 @all_dir_files 中提取 TXTFILELIST 中标识的文件。我从其他 Stack Overflow 回答者那里得到了“问题行”的代码,但由于某种原因它无法正常工作。

TL;DR 我想要做的是:列出当前目录中的所有文件(假设该目录包含 mus.txt、“Rick ASTLey - Never Gonna Give You Up-dQw4w9WgXcQ.mp4”和 blah.mp4) ,仅选择使用 TXTFILELIST (dQw4w9WgXcQ) 中的 11 个字符 ID 识别的文件(Rick ASTLey 视频)并从中提取音频。是的,我在 Windows 上运行这个脚本,所以我不能使用 *nix 实用程序,如 ackfind

最佳答案

删除行

my @all_dir_files = `dir /b`;

并改用这个循环:

for my $file (<*${file_to_convert}.mp4>) {
say $file;
system(...);
}

<...>上面是一个glob,也可以写成glob "${file_to_convert}.mp4" .我认为使用 perl 函数几乎总是比依赖系统调用更好。

如前所述,"/${file...$/"不是正则表达式,而是字符串。由于您可以在 grep 中使用表达式,并且非空字符串始终为真,因此您的 grep 基本上什么都不做,并将所有值传递到您的数组中。

关于regex - 从perl中工作目录中的某些文件中提取音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7466287/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com