PHP / FFMPEG - почему преобразование моего видео приводит к пустому файлу? - PullRequest
0 голосов
/ 31 октября 2018

Я пытаюсь преобразовать видео, которое живет на моем сервере, из .webm в .mp4.

shell_exec('ffmpeg -i file.webm output.mp4');

Однако, это приводит к пустому mp4 (0 байт - или, иногда, и очень странно, 28 байт.) Входной файл существует и занимает 45 МБ.

Этот ответ рекомендуется явно копировать входной кодек, но результат тот же.

shell_exec('ffmpeg -i file.webm -vcodec copy -acodec-copy output.mp4');

Что я делаю не так?

[===== РЕДАКТИРОВАТЬ =====]

После нескольких попыток, вдохновленных комментариями, я все еще не испытываю радости от конвертации в MP4.

Кажется, я использую FFMPEG v.2.8.15. Это кажется намного ниже, чем текущий выпуск 4 ~, однако я установил его только неделю назад или около того, поэтому я не уверен, почему это так, и я не знаю, как его обновить (я нахожусь на WHM Cpanel.)

В любом случае, моя проблема не связана с pathing, потому что та же команда работает нормально, если я изменяю .mp4 на .webm - я получаю успешно преобразованный файл .webm.

Но когда я бегу:

$foo = shell_exec('ffmpeg -i file.webm -vcodec copy -acodec copy output3.mp4 -report');

... Я получаю этот вывод журнала FFMPEG .

Я также пробовал:

shell_exec('ffmpeg -fflags +genpts -i file.webm -r 24 KKK.mp4 -report');

... из этого ответа и

shell_exec ('ffmpeg -i file.webm -c: v copy III.mp4');

... из этой статьи .

Обе приводят к одной и той же проблеме, то есть к 0-байтовому файлу .mp4.

1 Ответ

0 голосов
/ 03 ноября 2018

Задача

Вы пытаетесь объединить видео VP9 и аудио Opus в контейнер MP4. В настоящее время мультиплексирование Opus в контейнер MP4 считается экспериментальным и требует -strict experimental (или -strict -2), но ваш ffmpeg слишком стар, чтобы поддерживать это. Скачать новую версию .

Решения

  • Не смешивайте типичные форматы WebM (VP9 или VP8 + Opus или Vorbis) в MP4. Вы можете перекодировать его в H.264 (или H.265) с аудио AAC, если вы хотите более распространенный набор форматов для MP4:

    ffmpeg -i input -c:v libx264 -c:a aac -movflags +faststart output.mp4
    
  • Или обновите свой ffmpeg и добавьте в свою команду параметр вывода -strict experimental (или -strict -2), если вы знаете, что хотите VP9 + Opus в MP4:

    ffmpeg -i input -c copy -strict experimental -movflags +faststart output.mp4
    
  • Или не перепихивать в MP4. HTML5-видео поддерживает VP9 + Opus в WebM, поэтому просто используйте оригинальный файл, если он поддерживается вашими целевыми браузерами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...