Основная проблема, которую я вижу, заключается в том, что вы передаете имя файла только в 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;
}
}