Я попробовал это с 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
.