искать файл mp4 внутри каталога и отправлять его в другой каталог после преобразования в mp3 в php? - PullRequest
0 голосов
/ 13 мая 2019

У меня есть каталог с именем coming_folder , в котором находится файл mp4.

Чего я хочу добиться с помощью php-кода, это сканировать Папка входящего_файла , найдите файл mp4 и отправьте его в outgoing_folder после преобразования его в mp3.

Технически outgoing_folder должен иметь mp3-версию mp4 из messages_folder

Вот графическое представление того, что я хочу:

enter image description here

Попробовал следующий код, хотя он сканирует каталог входящих_файлов, но преобразование через ffmpeg не происходит.

<?php
$dir    = 'in_folder';  /* Place where mp4 file is present */
$files1 = scandir($dir);
print_r($files1);    /* It lists all the files in a directory including mp4 file*/

$destination = 'out_folder';  /* Place where mp3 file need to be send after conversion from mp4 */

    <?php
    foreach($files1 as $f)
    {
      $parts = pathinfo($f);

      switch($parts['extension'])
      {
        case 'mp4' :
          system('ffmpeg -i '.$f.' -map 0:2 -ac 1 '.$destination.DS. $parts['filename'].'.mp3', $result);

          if ($result) {
            // Do something with result if you want
            // log for example
          }
          break;

        case 'mp3' :
          // copy($f, $destination. DS . $parts['filename']. '.' . $parts['extension']);
          copy($f, $destination.DS.$parts['filename'].'.mp3');
          break;  
      }
    }
    ?>

Формулировка проблемы:

Мне интересно, какие изменения я должен внести в код php, чтобы преобразование файла происходило из прибывающих_файлов и он должен перейти в outgoing_folder .

1 Ответ

1 голос
/ 14 мая 2019

Основная проблема, которую я вижу, заключается в том, что вы передаете имя файла только в ffmpeg, а не путь к файлу.Вам нужно добавить $dir.DS к имени файла.

<?php
$filePath = $dir . DS . $f;
system('ffmpeg -i ' . $filePath . ' -map 0:2 -ac 1 ' . $destination . DS . $parts['filename'] . '.mp3', $result);

После того, как я исправил это, ffmpeg не сработал, жалуясь на параметры вашей карты потока.Я изменил их на это, и это сработало, YMMV.

<?php           
system('ffmpeg -i ' . $filePath . ' -acodec libmp3lame -ac 2 -ab 160k -ar 48000 ' . $destination . DS . $parts['filename'] . '.mp3', $result);

Редактировать: Полный обновленный код

<?php
const DS = '/';
$dir    = 'in_folder';  /* Place where mp4 file is present */
$files1 = scandir($dir);
print_r($files1);    /* It lists all the files in a directory including mp4 file*/

$destination = 'out_folder';  /* Place where mp3 file need to be send after conversion from mp4 */


foreach ($files1 as $f)
{

    $parts = pathinfo($f);
    switch ($parts['extension'])
    {
        case 'mp4' :
            $filePath = $dir . DS . $f;
            system('ffmpeg -i ' . $filePath . ' -acodec libmp3lame -ac 2 -ab 160k -ar 48000 ' . $destination . DS . $parts['filename'] . '.mp3', $result);

            if ($result)
            {
                // Do something with result if you want
                // log for example
            }
            break;

        case 'mp3' :
            // copy($f, $destination. DS . $parts['filename']. '.' . $parts['extension']);
            copy($f, $destination . DS . $parts['filename'] . '.mp3');
            break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...