ffmpeg/PHP - проблемы с преобразованием любого видео формата в ogg - прерывистое видео / без звука - win64

Позвольте мне сначала извиниться, если это повторная публикация / аналогичная публикация, поскольку я сделал все возможное, чтобы найти конкретное решение моей проблемы в уже созданных сообщениях здесь и в Google, но не смог.

Я использую ffmpeg на локальном хосте в системе win64 для создания / тестирования сценариев преобразования видео перед их загрузкой на сервер.

Я могу успешно конвертировать в / из mp4/flv/wmv/mov без проблем, однако всякий раз, когда я пытаюсь конвертировать в.ogg из любого другого формата, я сталкиваюсь с проблемами.

Сначала я попробовал это:

exec($ffmpegPath." -i ".$srcFile." ".$destFile);

но в итоге получился поврежденный файл без видео / звука. Затем я немного почитал это и нашел несколько постов, в которых говорилось, что вы должны явно включить libvorbis/libtheora при конвертации в.ogg, поэтому я попробовал это:

$aCodec = ' -acodec libvorbis';
$vCodec = ' -vcodec libtheora';
exec($ffmpegPath." -i ".$srcFile.$aCodec.$vCodec." ".$destFile);

На этот раз я получил действительный файл.ogg со звуком, однако вывод видео ОЧЕНЬ прерывистый. В надежде попытаться найти проблему, я начал вносить изменения в строку exec и закончил с этим:

$ffmpegObj = new ffmpeg_movie($srcFile);
$srcVB = intval($ffmpegObj->getVideoBitRate());
$vCodec = ' -vcodec libtheora';
exec($ffmpegPath." -i ".$srcFile.$vCodec." -vb ".$srcVB." ".$destFile);

который выводит видео.ogg в хорошем качестве, но без звука.

Любые идеи относительно того, что еще может быть этой проблемой до необходимости установки дополнительного программного обеспечения (ffmpeg2theora) и т. Д.?

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

100 buffers queued in output stream 0:1, something may be wrong.
[ogg @ 00000000024bf780] st:0 PTS: 6743 DTS: 6743 < 7745 invalid, clipping
[ogg @ 00000000024bf780] st:0 PTS: 6871 DTS: 6871 < 7746 invalid, clipping
[ogg @ 00000000024bf780] st:0 PTS: 6999 DTS: 6999 < 7747 invalid, clipping
[ogg @ 00000000024bf780] st:0 PTS: 7127 DTS: 7127 < 7748 invalid, clipping
[ogg @ 00000000024bf780] st:0 PTS: 7255 DTS: 7255 < 7749 invalid, clipping
[ogg @ 00000000024bf780] st:0 PTS: 7383 DTS: 7383 < 7750 invalid, clipping

Кажется, что libvorbis и libtheora не играют хорошо вместе?

Наконец, я несколько раз менял сборки ffmpeg.exe и до сих пор получаю ту же проблему.

Заранее спасибо.

РЕДАКТИРОВАТЬ: В качестве возможного обходного пути, есть ли способ, которым я могу просто кодировать видео / аудио отдельно, а затем соединить их обратно вместе? Это вызвало бы возможные проблемы синхронизации аудио / видео?

1 ответ

Решение

Как обычно, после размещения моего вопроса здесь (после бесчисленных часов устранения неполадок), я полагаю, что я, возможно, исправил проблему. Мне нужно было указать не только аудио / видео кодеки для преобразования файла, но также аудио / видео битрейт для выводимого видео.ogg:

//CREATE CLASS INSTANCE
$ffmpegObj = new ffmpeg_movie($srcFile);
//GET AUDIO BITRATE FROM SOURCE FILE
$srcAB = intval($ffmpegObj->getAudioBitRate());
//GET VIDEO BITRATE FROM SOURCE FILE
$srcVB = intval($ffmpegObj->getVideoBitRate());

//SET THE AUDIO CODEC TO LIBVORBIS
$aCodec = ' -acodec libvorbis';
//SET THE VIDEO CODEC TO LIBTHEORA
$vCodec = ' -vcodec libtheora';

exec($ffmpegPath." -i ".$srcFile.$vCodec." -vb ".$srcVB." -ab ".$srcAB." ".$destFile);

Это выводит видео / аудио с качеством, очень близким к исходному видеоформату.

Очевидно, что любой, кто пытается использовать приведенный выше код, должен будет добавить ссылки на $ffmpegPath/$srcFile/$destFile и иметь класс ffmpeg, доступный для их сценария.

Кроме того, при первоначальном просмотре видео.ogg в Firefox локально на моем компьютере, видео будет зависать при первом запуске, а затем через несколько секунд перейдет в правильное положение (относительно аудио), однако, если воспроизведение с начала будет играть без проблем. Я предполагаю, что моя видеокарта просто не на высоте; который объяснил бы проблему при первом просмотре файла после преобразования.

В любом случае, приведенный выше код должен работать для любых других, у которых были проблемы с преобразованием в формат.ogg должным образом с использованием ffmpeg и php.

Другие вопросы по тегам