Позвольте мне сначала придумать, является ли это повторной отправкой / похожим сообщением, поскольку я сделал все возможное, чтобы найти конкретное решение моей проблемы в уже созданных сообщениях здесь и в 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.