1

Я пытаюсь разрезать видеофайл на мелкие части (0,5-5 с) и кодировать эти части в h.264/aac с помощью ffmpeg. Я использую эту команду:

ffmpeg -i 1.avi -ss 00:05:00 -t 00:00:01,50 -vcodec libx264 -threads 0 -vpre default -acodec libfaac out1.mp4

В VLC некоторые пьесы воспроизводятся без видео, только со звуком, у других пьес есть такие видео артефакты:

Может быть, я пропустил некоторые необходимые аргументы для ffmpeg?

1 ответ1

3

Я попробовал это с FFmpeg версии 0.8.5, используя входной файл AVI, как вы.

Следующая команда дала правильные результаты:

ffmpeg -i 1.avi -ss 00:00:05 -t 00:00:01.50 -vcodec libx264 -vpre default -acodec libfaac out1.mp4

Вот несколько советов, как заставить это работать:

Обновление до последней версии FFmpeg.

Для Ubuntu следуйте инструкциям здесь. Я использовал их сам.

В OS X установите FFmpeg с помощью Homebrew, вызвав brew install ffmpeg .

В Windows просто скачайте скомпилированные версии.

Используйте правильный формат длины.

Обратите внимание, что в формате продолжительности используются десятичные точки, а не запятые, например, hh:mm:ss[.xxx] .

Удалите -threads 0 .

Включение -threads 0 однако, дало мне ошибку "nal buffer is small small". Я даже не знаю, почему они допускают здесь нулевое значение, и если у вас нет конкретной причины для этого, я бы просто пропустил этот аргумент. В идеале он должен включать auto-threads в libx264 , но может быть ошибка, о которой я не знаю.

Кодировать без B-картинок.

В зависимости от размера выходного видео, я не знаю, сможет ли libx264 даже надежно произвести вывод, используя B-изображения, которые ссылаются на одно или несколько внутренне кодированных изображений. Это может даже привести к артефактам, которые вы описываете.

Вы можете попытаться отключить B-картинки (или «B-кадры») с -bf 0 .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .