Какой алгоритм контроля скорости лучше всего сохраняет быстрое движение?

Я выяснил, что следующие алгоритмы управления скоростью обычно используются при кодировании современных видеоформатов, таких как h264, HEVC или VP9.

  • При постоянном квантователе ( -qpв терминах ffmpeg) все кадры кодируются с одинаковой степенью сжатия. Любой неподвижный кадр, который можно извлечь из результирующего видео, должен иметь одинаковое визуальное качество, независимо от того, насколько динамичной или сложной является сцена.
  • Коэффициент постоянной скорости ( -crfпараметр) применяет большее сжатие к сложным частям, чтобы, в свою очередь, оставить простые сцены относительно несжатыми. Таким образом, появляется больше артефактов, например, в кадрах с быстрым движением, которые в обычном приложении менее заметны для человеческого глаза, что обеспечивает хорошее субъективное качество при сохранении размера файла.
  • Третий вариант заключается в нацеливании на файл определенного размера с двумя проходами с переменным битрейтом ( -b). Первый проход собирает данные для каждого кадра, так что второй проход может выделить больше битов частям видео, качество которых трудно сохранить в противном случае. Это эффективно делает обратную CRF, присваивая более высокое качество сложным сценам.

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

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

Ответы (1)

Вот мое понимание FFMPEG, для VQ есть 4 настройки: «кодек», «crf», «предустановка» и «настройка». Что касается «кодека», FFMPEG плохо работает с VP9; остальные - H.264 и H.265. Для «настройки» я предпочитаю «пленку» для H.264 и «зерно» для H.265. "crf" и "preset" могут получить отличный VQ, но есть недостатки: долгое время кодирования и большой размер файла (битрейт)

«кодек» отвечает за битрейт, H.265 имеет меньший размер файла (битрейт), который сохраняет тот же уровень VQ, но дольше время транскодирования.

«crf» отвечает за квантование и битрейт, чем меньше crf, тем лучше качество видео, но тем больше время перекодирования и больше размер файла.

«предустановка» отвечает за битрейт, чем медленнее предустановка, тем меньше размер файла (битрейт), но тем больше время перекодирования.

Вернемся к вашему сценарию - видео с быстрым движением, мы имеем дело с высокочастотным контентом. Мы не хотим видеть блочные изображения; поэтому нам нужен более высокий битрейт, но мы хотим разумное время транскодирования.

Поэтому я предпочитаю H.265 «кодек» и «настроенное» зерно. Затем нам нужно настроить «crf» и «preset» на основе результатов SSIM и PSNR. Я провел несколько экспериментов с демонстрационным потоком MainConcept (контент 1080p).

  • По умолчанию) codec=h.264 crt=23, предустановка=medium, транскодирование заняло 27,9 с, битрейт= 3118 кбит/с , SSIM= 0,994413 , PSNR= 48,644
  • Настройка 1) codec=H.265, crt=23, preset=medium, tuning=grain, транскодирование заняло 130с, байт 3949кб/с, SSIM=0.99487, PSNR=50.894298
  • Настройка 2) кодек=H.265, crt=1, предустановка=средний, настройка=зернистость, транскодирование заняло 202,37 с, битрейт= 60883 кб/с , SSIM= 0,999738 , PSNR= 65,497223
  • Настройка 3) codec=H.265, crt=23, preset=slow, tuning=grain, транскодирование заняло 329,36с, битрейт=4338кб , SSIM= 0,9952 , PSNR= 51,452838

Настройка 3) имеет лучшую производительность VQ с приемлемыми недостатками, или вы можете продолжать настраивать «crt» и «preset», чтобы добраться до точки, которая достигает вашего приемлемого времени транскодирования и результатов битрейта.

Удачи!

Время не имеет значения: я могу запустить все кодировки с -preset veryslow. Я ценю идею, которая -tune grainдействительно может улучшить быстрые сцены, и буду экспериментировать с этим. Кроме того, я был бы очень заинтересован в том, как я могу настроить кодирование с переменным битрейтом, которое действительно распределяет больший битрейт или повышает качество в быстрых сценах. Может быть, вы или кто-то еще может уточнить это.
Это команды vbr, Потоки без движения — без векторов движения и остатка — низкий битрейт Потоки с движением — да векторы движения и остатка — высокий битрейт Не знаете, чего вы хотите добиться?