PHP-FFMpeg видео вывод усекается - PullRequest
0 голосов
/ 24 июня 2019

Я использую найденную библиотеку PHP-FFMpeg здесь и код из раздела " Основное использование ".

Выводимое видео выглядит обрезанным.Я использую исходное видео длиной 28 секунд, но вывод составляет всего 9 секунд.Что происходит не так?

Здесь я проверяю продолжительность исходного видео:

$ffprobe = FFMpeg\FFProbe::create();
$duration = $ffprobe
  ->format('test/source.mp4')
  ->get('duration');

28.700000

Затем генерируем выходное видео:

$ffmpeg = FFMpeg\FFMpeg::create();
$video = $ffmpeg->open('test/source.mp4');
$video->save(new FFMpeg\Format\Video\X264(), 'test/export.mp4');

Затем проверяется длительность выходного видео:

$ffprobe = FFMpeg\FFProbe::create();
$duration = $ffprobe
  ->format('test/export.mp4')
  ->get('duration');

9.234000

1 Ответ

2 голосов
/ 24 июня 2019

Спасибо slhck за предложение изучить журнал конверсий.
Кажется, мой исходный файл поврежден.
Я задокументировал свой процесс ниже.


Я не знаю, как получить вывод ffmpeg из библиотеки PHP-FFMpeg.
Поэтому я использовал getFinalCommand() для вывода команды ffmpeg:

$video = $ffmpeg->open('test/source.mp4');
echo $video->getFinalCommand(new FFMpeg\Format\Video\X264(), 'test/export.mp4')[0];

-y -i test / source.mp4 -vcodec libx264 -acodec libfaac -b: v 1000k -refs 6 -кодер 1 -sc_threshold 40 -flags + loop -me_range 16 -subq 7 -i_qfactor 0.71 -qcomp 0.6 -qdiff 4 -trellis 1 -b: 128k -pass 1 -passlogfile / tmp / ffmpeg-pass5d108f0d5007cirj2x / pass-5d108f0d500f9 test / export.mp4

Я выполнил командуэта ошибка:

[libx264 @ 0x2395ec0] ratecontrol_init: невозможно открыть файл статистики
Ошибка инициализации выходного потока 0: 0 - Ошибка при открытии кодировщика для выходного потока
# 0:0 - возможно, неверные параметры, такие как bit_rate, rate, width или height

Кажется passlogfileЭто вызвало проблемы, поэтому я удалил его и получил:

поврежденный входной пакет в потоке 0: 04.76 битрейт = 880.0 кбит / с скорость = 3.15x
[h264 @ 0x7b4500] Неверный NALразмер блока (51618> 33287).
[h264 @ 0x7b4500] Ошибка разделения входа на блоки NAL.
Ошибка при декодировании потока # 0: 0: при обработке ввода

* 1038 обнаружены неверные данные* Похоже, что мой исходный видеофайл был поврежден.
Я перегрузил его, и ошибка исчезла.

В процессе, я также обнаружил, что "аудиокодек libfaac был удален из ffmpeg "( iki789 ), что" есть лучшие альтернативы "( llogan ), и что для аудиокодека можно установить значение" aac ", например так:

$format = new \FFMpeg\Format\Video\X264();
$format->setAudioCodec("aac");

$video = $ffmpeg->open('test/source.mp4');
$video->save($format, 'test/export.mp4');
...