在php中的目录中查找特定的文件类型,并在转换后将其发送到其他目录
我有一个目录,其中有一个mp4文件(也包括其他文件),我想将其转换为mp3,然后将其发送到不同的目录。我使用了下面的命令行命令转换成mp3,它的工作非常好在php中的目录中查找特定的文件类型,并在转换后将其发送到其他目录,php,ffmpeg,mp3,mp4,scandir,Php,Ffmpeg,Mp3,Mp4,Scandir,我有一个目录,其中有一个mp4文件(也包括其他文件),我想将其转换为mp3,然后将其发送到不同的目录。我使用了下面的命令行命令转换成mp3,它的工作非常好 ffmpeg -i 36031P.mp4 -map 0:2 -ac 1 floor_english.mp3 mp4文件位于\u文件夹的内。使用ffmpeg,我想将mp4文件转换成mp3,并将其发送到out\u文件夹 <?php $dir = 'in_folder'; $files1 = scandir($dir); print
ffmpeg -i 36031P.mp4 -map 0:2 -ac 1 floor_english.mp3
mp4文件位于\u文件夹的内。使用ffmpeg,我想将mp4文件转换成mp3,并将其发送到out\u文件夹
<?php
$dir = 'in_folder';
$files1 = scandir($dir);
print_r($files1); /* It lists all the files in a directory including mp4 file*/
?>
打印($files1)列出目录中的所有文件,包括mp4file
问题陈述:
我想知道我需要编写什么php代码,以便它只在目录中查找mp4文件,并在转换为mp3后将其发送到不同的目录(比如out\u文件夹)
我想要的东西的图形表示法:
在“思考”中,这就是你想要的:
我觉得这一切都可以变得更健壮、更短
这样就可以了。我测试了这个解决方案,它是有效的。我必须为ffmpeg命令更改一个参数。在我的机器上,它抛出了一个映射错误。我在映射后添加了一个问号以忽略错误
代码采用以下文件夹结构:
我可以知道为什么它的下行循环使用opendir
和readdir
。在循环中,检查文件类型并仅复制这些文件。为什么不直接在最终文件夹或子目录中转换mp3;)或者用循环检查文件扩展名,看看赏金闪光怎么样?谢谢你的回答。看起来真的很棒。我还想在代码中包含转换过程。我想知道我应该在哪里集成ffmpeg过程。它的工作方式应该是扫描目录以查找mp4文件,然后在将其转换为mp3后将其发送到不同的目录。php代码应该扫描目录(文件夹a中的mp4文件)以查找mp4文件,然后在将其转换为mp3后将其发送到不同的目录(文件夹B中的mp3文件)。所有逻辑看起来都正常。我在我的代码库中复制了你的代码。我有什么遗漏吗?因为它似乎并没有将mp4转换成mp3并将其发送到不同的文件夹。也许我们已经接近了。有些东西不见了。我将发布另一个问题来给出答案。我有一个与ffmpeg相关的类似问题。我想知道你是否可以看一看。我用你的代码试过了。它一直运行到//一个过滤器,只留下以.mp4结尾的条目,不区分大小写。
代码不在该行后面。让我知道我需要做哪些更改。
<?php
error_reporting(E_ALL);
$in_folder = sprintf("%s/mp4", __DIR__);
$out_folder = sprintf("%s/mp3", __DIR__);
if(!file_exists($in_folder)){
mkdir($in_folder);
}
if(!file_exists($out_folder)){
mkdir($out_folder);
}
$items = scandir($in_folder);
foreach($items as $item){
if(preg_match('/^.*\.mp4$/', $item)){
$file_name = str_replace(".mp4", "", $item);
$in_file = sprintf("%s/%s.mp4", $in_folder, $file_name);
$out_file = sprintf("%s/%s.mp4", $out_folder, $file_name);
if(file_exists($out_file)){
unlink($out_file);
}
$cmd = sprintf("ffmpeg -i %s -map 0:2? -ac 1 %s", $in_file, $out_file);
print "$cmd\n";
exec($cmd);
}
}
?>