Який алгоритм зміни розміру вибрати для відео?


21

Я використовую VirtualDub для кодування з цими налаштуваннями . алгоритми зміни розміру

Однак я записую свої речі в 1920x1080 і змінюю розмір до 1280x720. Тепер питання: який алгоритм слід вибрати, приймаючи рішення про збалансовану якість та розмір файлу?

Я завжди ходив з Ланцосом, тому що це було попередньо налаштовано. Ці описи мені зовсім не допомагають у питанні.

Відповіді:


25

TL; DR

Під час відбору проб: Використовуйте фільтрацію Lanczos або Spline.

Під час відбору проб: Використовуйте фільтрування Bicubic або Lanczos.

Вони ґрунтуються на матеріалах, які я читав протягом багатьох років, і на тому, що я бачив, що використовується в галузі. Рекомендації можуть відрізнятися залежно від типу вмісту та області застосування.

Чому це важливо?

Можна стверджувати, що фільтри розміру не мають великого значення, коли ви зменшуєте масштаб відео. Що ще важливіше, вони впливають на якість при збільшенні масштабу, оскільки вам потрібно генерувати дані там, де їх не в першу чергу.

Усі ці фільтри мають лише незначний вплив на розмір файлу. Тому вам не варто турбуватися про величезні відмінності.

Фактом є, як завжди, при кодуванні відео, що результат сильно залежить від вихідного матеріалу. Ви не завжди можете передбачити результат, але просто подивіться, що найкраще підходить для вас.

Різні алгоритми

Як приклад, ось бікубічна та білінеарна інтерполяція :

     введіть тут опис зображення

Бачите, що двостулкова інтерполяція призводить до більш гладких країв? Це дуже загальне твердження… але огляд алгоритмів масштабування зображень ви можете знайти тут .

  • Білінеарна інтерполяція використовує середовище 2x2 пікселя, а потім бере середнє значення цих пікселів для інтерполяції нового значення. Це не найкращий алгоритм, але досить швидкий.

  • Бікубічна інтерполяція використовує піксельне середовище 4х4, зважуючи найпотаємніші пікселі, а потім приймає середнє значення для інтерполяції нового значення. Це - наскільки я переживаю - найпопулярніший.

  • Для усереднення області використовується відображення пікселів джерела та призначення, усереднення вихідних пікселів щодо частки пікселів призначення, які охоплюються. Згідно з цією сторінкою , вона повинна давати кращі результати при зниженні тиску.

  • Інтерполяція сплайну та синхронізації використовує поліноми вищого порядку, і тому їх важче обчислити, ніж двокутова інтерполяція. Я не думаю, що загальне збільшення часу на обробку варто використовувати їх.

  • Реконструкція Lanczos включає також фільтр sinc. Він дорожче обчислюється, але зазвичай описується як дуже якісний і може бути використаний для збільшення та зменшення кемпінгу.

  • hqx , а також 2xSaI- фільтри використовуються для піксельного масштабування (наприклад, емулятори гри). Я не думаю, що є вагомі причини використовувати їх у відео.

Порівняння Джеффа Етвуда

Виявляється, Джефф Етвуд зробив порівняння алгоритмів інтерполяції зображень . Його головне правило полягало в тому, щоб використовувати бикубическую інтерполяцію для пониження та білінеарної інтерполяції під час вибору. Однак, це не те, що зазвичай рекомендується для кодування відео - і деякі коментатори викликають сумніви щодо досвіду Atwood у цій галузі.

Однак він також зазначив, що ...

Зменшення зображень - це абсолютно безпечна та раціональна операція. Ви просто знижуєте точність та роздільну здатність, відкидаючи інформацію. Зробіть зображення настільки маленьким, наскільки ви хочете, і ви матимете повну вірність - в межах кількості дозволених пікселів. Ви отримаєте хороші результати незалежно від того, який алгоритм ви виберете. (Ну, якщо ви не вибрали алгоритми Pixel Resize або Найближчий сусід.)

Інші приклади

Ось ще кілька прикладів алгоритмів інтерполяції зображень , включаючи ті, про які я згадував вище.

Я також знайшов документи (правила сцени) зі сцени кодування відео, які явно забороняють бикубическую фільтрацію для пониження часу. Натомість вони схвалюють Lanczos, Spline або "Blackman" перекомпонування.


Я завжди використовував "точну двоярусну A = 100". Після повторної інсталяції оновленої програми Ланцос був дефолт, багатьом це сподобалось. Я так і залишив його надовго. Врешті-решт я дістаюсь до перегляду пізніше закодованих речей Ланцоса, і подумав, що це не так добре, наступний набір кодувань, я повернув його назад до бікубічного. Я також стискав стиснення, я думаю, що Ланцос міг би здатися кращим, якби я не намагався так зменшити загальний розмір даних.
Psycogeek

2
FWIW Я б не вважав Джеффа Етвуда експертом з обробки зображень, і в цій статті він не вивчає нічого, крім білінеарного, найближчого сусіда або (одного конкретного варіанту) двостулкової. Більшість людей погодиться з його рекомендацією використовувати білінеар, коли збільшення - це погано.
thomasrutter

1
@thomasrutter Дякую Я згоден з вами - тоді, коли я писав це, я, мабуть, не знав стільки про обробку зображень, скільки зараз. Я думаю, я видалю посилання на цю статтю і знайду якесь інше джерело.
slhck

9

Я знайшов гарне зображення, яке документує щось із цього.

введіть тут опис зображення

Повна версія тут .

Як правило, ви хочете м'який ефект різкості при створенні більшого зображення в менший і м'який ефект розмивання, коли зображення меншого розміру стає більшим. Фільтр MadVR встановив за замовчуванням Lanczos для збільшення масштабу та двостулкового для зменшення масштабу.


2

Ви перетворюєте 3x3 оригінальних пікселів у 2х2 цільові пікселі.

Якщо ви хочете зберегти різкі лінії, виберіть Lanczos або щось, що використовує більше оточуючих пікселів, щоб не розмити різкі лінії (наприклад, хутро або відбиття)

В іншому випадку вистачить середньої площі тощо (також білінеарний / трилінійний).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.