Каковы лучшие кодеки и варианты кодирования для видео с последовательностью изображений?

Я пытаюсь сделать видео из последовательности изображений, где каждый кадр длится секунду.

Последовательность изображений содержит один и тот же объект, снятый с разных расстояний. Я предполагаю, что большинство конвертеров видео по умолчанию оптимизируют движение, но в этом сценарии мне нужно получить наименьший размер файла без изменения частоты кадров.

Какой кодек (H.264, VP8, VP9) может обеспечить наилучшее соотношение размера и качества?

Также есть ли какие-либо флаги для H.264, которые я могу оптимизировать для этого случая?

Какое программное обеспечение вы используете и в каком формате ваши файлы?
@LetTheWritersWrite Я использую VirtualDub, чтобы сделать .aviиз видео, а затем ручник для кодирования .aviв .mp4настоящее время. Что касается формата, мне нужно или mp4илиwebm

Ответы (2)

Я иногда делаю видео из изображений слайдов. Я обнаружил, что получаю наилучшее качество и сжатие, помещая изображения на временную шкалу в предпочитаемом вами видеоредакторе (я использую Vegas Pro 13), сохраняя их в формате jpeg*, а затем используя ffmpeg для преобразования в H264. Я использую -crf 28, что, наверное, называется "постоянное качество" в Handbrake. При разрешении 1024x768 я легко получаю битрейт ниже 100 кбит/с, и они выглядят великолепно. Вы можете увеличить значение crf, чтобы получить большее сжатие, или уменьшить его, чтобы получить лучшее качество, чтобы вы могли точно настроить его по своему вкусу.

Могу поспорить, что с помощью этого метода, описанного выше, H264 и VP8 сопоставимы. VP9, вероятно, будет лучше, но он работает не со всем и кодирование занимает намного больше времени.

Моя теория, почему это работает:

Motion JPEG — это только внутрикадровое сжатие. Каждый отдельный кадр сжимается как изображение, а затем добавляется в поток; отсутствует межкадровое сжатие (сжатие между кадрами). В нем нет I-фреймов или чего-то такого сложного. Так что целую секунду в вашем видео все кадры идентичны, а не просто «выглядят одинаково». Они технически идентичны.

Таким образом, H264 обладает большой мощностью для сжатия движущегося изображения в формате JPEG. Он видит строку идентичных кадров, затем делает эквивалент полного сохранения первого кадра, а затем использует «эталонные кадры» почти без данных для остальных.


*Motion JPEG будет относительно большим файлом. Так совпало, что когда я записываю презентацию со слайдами, я сначала кодирую как движущийся jpeg, потому что большая часть презентации будет состоять из статических слайдов.

VP9 даст вам наилучшее соотношение качества и размера, но вы также можете получить неплохие результаты и с H.264.

Чтобы максимизировать эффективность сжатия, если каждое изображение отображается ровно одну секунду (или ровно две секунды, или ровно три секунды, или ровно и т. д .), тогда вы устанавливаете частоту кадров 1,00 FPS и говорите кодировщику не использовать P -frames или B-frames (также известные как «опорные кадры») и установите для GoP значение 1. После этого запустите кодирование с постоянным качеством и используйте коэффициент скорости, который обеспечивает приемлемый уровень качества при приемлемом размере файла.

скажите кодировщику не использовать P-кадры или B-кадры (также известные как «опорные кадры») -> I-кадры являются каноническими опорными кадрами. Кадры P и B являются предсказанными кадрами и в современных кодеках также могут служить эталоном для других кадров P и B. При GOP, равном 1, оценка/компенсация движения невозможна, а сжатие будет хуже. Кроме того, некоторые плееры не могут обрабатывать видео с частотой 1 кадр/с. 5считается безопасным минимумом. По крайней мере, с x264 идентичные предсказанные кадры занимают очень мало места, поэтому увеличение частоты кадров не является большой проблемой.
Как уже было сказано, FPS 1, скорее всего, не будет воспроизводиться, а также не даст большого преимущества по сравнению с чем-то вроде 15. Если 15 кадров идентичны, правильная настройка может очень хорошо сжимать.