Итак, я запускаю команду ffmpeg на своем сервере Linux с помощью команды php exec:
exec("(nohup nice -n 19 " . $ffmpegPath . " -y -i " . $srcFile . " -f mp4 -pass 1 -passlogfile " . $video_pass_log . " -vcodec libx264 -cpu-used 0 -threads 1 -profile:v baseline -vf \"movie=/var/www/vhosts/examplesite.com/httpdocs/images/ae-ffmpeg.png [logo]; [in] scale=".$srcWidth.":floor(ow*(".$srcWidth."/ow)/dar/hsub)*hsub+2[scale]; [scale][logo] overlay=main_w-overlay_w-1:main_h-overlay_h-1 [out]\" ".$options." -r 25 -g 25 -keyint_min 25 -b:v ".$bitrate."k -an " . $destFile . ".mp4 && " . $ffmpegPath . " -y -i " . $srcFile . " -f mp4 -pass 2 -passlogfile " . $video_pass_log . " -vcodec libx264 -cpu-used 0 -threads 1 -profile:v baseline -ac 2 -ab 128k -vf \"movie=/var/www/vhosts/examplesite.com/httpdocs/images/ae-ffmpeg.png [logo]; [in] scale=".$srcWidth.":floor(ow*(".$width."/ow)/dar/hsub)*hsub+2[scale]; [scale][logo] overlay=main_w-overlay_w-1:main_h-overlay_h-1 [out]\" ".$options." -r 25 -g 25 -keyint_min 25 -b:v ".$bitrate."k " . $destFile . ".mp4 && " . $mp4boxpath . " -tmp /tmp -isma -inter 500 " . $destFile . ".mp4 && rm -f " . $video_pass_log . "* && " . $ffmpegPath . " -y -i " . $srcFile . " -vcodec libvpx -cpu-used 0 -threads 1 -acodec libvorbis -vf \"movie=/var/www/vhosts/examplesite.com/httpdocs/images/ae-ffmpeg.png [logo]; [in] scale=".$srcWidth.":floor(ow*(".$srcWidth."/ow)/dar/hsub)*hsub+2[scale]; [scale][logo] overlay=main_w-overlay_w-1:main_h-overlay_h-1 [out]\" ".$options." -ac 2 -ab 128k -r 25 -g 25 -keyint_min 25 -b:v ".$bitrate."k -f webm " . $destFile . ".webm) > /dev/null 2>/dev/null &");
Я почти уверен, что команда ffmpeg exec в порядке, потому что странно то, что если я изменю путь назначения преобразованного видео на «обычную» папку на моем веб-сайте, тогда оба файла сохранятся, что хорошо, но затем, когда я изменю путь к месту, где у меня есть смонтированная папка, будет сохранен только файл webm.
Итак, моя "нормальная" папка находится по адресу http://examplesite.com/tmp/ и моя смонтированная папка http://examplesite.com/files/
Довольно странно, что видео webm не имеет проблем с сохранением в смонтированную папку, а видео mp4 есть ... и, как я уже сказал, оба файла сохраняются в папке tmp
Разрешения как для обычных, так и для подключенных папок установлены на 777 для целей тестирования, а папки подключенных дисков настроены так же, как и все другие папки на моем сайте.
Есть идеи, как я могу это исправить?
После попытки выполнить команду exec с двумя проходами и удаленным блоком mp4 все работало нормально. Затем я попробовал два прохода отдельно, задаваясь вопросом, была ли это проблема с файлом журнала проходов, и это тоже сработало. Очевидно, проблема была вызвана MP4Box. После некоторого чтения я обнаружил, что MP4Box не сохраняет из одного раздела в другой.
ВНИМАНИЕ: MP4Box может создать файл в этом временном каталоге, а затем переименовать его в выходное имя. Если конечная конечная папка и временная папка находятся на разных разделах диска, MP4Box не сможет переименовать файл. Это относится ко всем операциям редактирования с использованием существующего входного файла и сохранению результата в этом же файле (без использования переключателя -out для указания другого выходного файла).
Источник: http://gpac.wp.mines-telecom.fr/mp4box/mp4box-documentation/
Папка tmp, которую я использовал для двухпроходной команды ffmpeg, а также MP4Box находились в другом разделе моей конечной папки назначения.