在php中的目录中查找特定的文件类型,并在转换后将其发送到其他目录

在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

我有一个目录,其中有一个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_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);
    }
  }

?>