ffmpeg / PHP – Проблемы с конвертированием любого видеоформата в ogg – Choppy Video / No Audio – win64

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

Я использую ffmpeg на localhost в системе 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 и по-прежнему получаю ту же проблему.

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

EDIT: Как возможное решение проблемы, есть ли способ, который я могу просто кодировать видео / аудио отдельно, а затем удалять их вместе? Из-за этого возникнут проблемы с аудио / видеосинхронизацией?

Как обычно, после размещения моего вопроса здесь (после бесчисленных часов поиска неисправностей), я считаю, что я, возможно, исправил проблему. Мне нужно было указать не только аудио / видео кодеки для преобразования файла, но также битрейт аудио / видео для выводимого видео .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.