LINUX.ORG.RU
ФорумTalks

ffmpeg. Сравнение качества ресемплинга

 , ,


2

2

Есть сравнение аудио кодеков, где можно наглядно убедиться в превосходстве Nero AAC над другими кодеками, в частности Opus и Vorbis - http://bernholdtech.blogspot.ru/2013/03/Nine-different-audio-encoders-100-pas...
Где все остальные кодеки (за исключением Apple AAC, они почти на равных) пестрят искажениями и замыливанием, в то время как Nero AAC даже после 100 прогонок lossy-lossy еще можно как-то слушать.

Можно сделать тоже самое с алгоритмами ресемплинга изображений, дабы доказать то, о чем я писал уже давно, но чему не верили и не видели на одной прогонке, а именно - о превосходстве spline над остальными.

Для этого понадобится не более 10 прогонок, код для ffmpeg выглядит следующим образом:

ffmpeg -i test.jpg -vf ^
[in]scale=iw-1:-1:sws_flags=sinc[middle];^
[middle]scale=iw-1:-1:sws_flags=sinc[middle];^
[middle]scale=iw-1:-1:sws_flags=sinc[middle];^
[middle]scale=iw-1:-1:sws_flags=sinc[middle];^
[middle]scale=iw-1:-1:sws_flags=sinc[middle];^
[middle]scale=iw-1:-1:sws_flags=sinc[middle];^
[middle]scale=iw-1:-1:sws_flags=sinc[middle];^
[middle]scale=iw-1:-1:sws_flags=sinc[middle];^
[middle]scale=iw-1:-1:sws_flags=sinc[middle];^
[middle]scale=iw-1:-1:sws_flags=sinc[out] sinc.png
Изображение в процессе будет уменьшаться на 1 пиксель 10 раз с выбранным ресемплингом.

Результаты:

Оригинал: https://pic4a.ru/712/xqX.jpg

bilinear: https://pic4a.ru/712/LNf.png
bicubic: https://pic4a.ru/712/ixz.png
sinc: https://pic4a.ru/712/5iR.png
lanczos: https://pic4a.ru/712/wjj.png
spline: https://pic4a.ru/712/eTF.png

Сравнение lanczos vs. bicubic: http://screenshotcomparison.com/comparison/126932
Сравнение bicubic vs. spline: http://screenshotcomparison.com/comparison/126933

Итого: bilinear - сплошное мыло, lanczos - дает артефакты на краях контрастных объектов, bicubic - меньше артефактов, но мыльнее, spline - без артефактов, лучшая четкость.
Отдельно хочется упомянуть sinc, который дал самую четкую картинку, но с ghosting-эффектом. При ресемплинге одним проходом под конечное разрешение, разумеется, этого не наблюдается, и его можно назвать самым лучшим алгоритмом, дающим самую четкую картинку, на которой не замылились детали даже после 10 прогонок. Но использовать его для работы с материалом все же не стоит, ибо при ближайшем рассмотрении (увеличении изображения в несколько раз) все-таки просматривается вышеупомянутое искажение. В программе просмотра изображений, которая все еще остается передовой и единственной в мире используется именно sinc: Просмотрщику картинок нового поколения таки быть!

Ответ на: комментарий от Moderators

Получится очень чёткая картинка с несколькими артефактами. При определённой реализации nearest neighbour вообще выдаст идеальный результат для данного теста.

Sadler ★★★
()
Последнее исправление: Sadler (всего исправлений: 1)

А если спуститься в комменты, то автор Opus написал, что нашёл причину сего перформанса своего кодека и то, что она была исправлена (причём сильно до написания своих комментов, я в коммитлоге фикса не нашёл, может его и не было?).

chupasaurus
()
Ответ на: комментарий от RazrFalcon

Нулевая погрешность при hidpi.

Условия теста одни для всех, что будет с neighbor в результате прогонки ты и сам прекрасно представляешь. Он годится только для кратного увеличения изображения

Moderators ★★
() автор топика
Ответ на: комментарий от Sadler

Получится очень чёткая картинка с несколькими артефактами. При определённой реализации nearest neighbour вообще выдаст идеальный результат для данного теста.

Если только для просмотра на ЭЛТ, с «аппаратным» ресемплингом))

Moderators ★★
() автор топика
Ответ на: комментарий от chupasaurus

А если спуститься в комменты, то автор Opus написал, что нашёл причину сего перформанса своего кодека и то, что она была исправлена

Ну, это легко проверить тем же ffmpeg

Moderators ★★
() автор топика
Ответ на: комментарий от Moderators

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

Sadler ★★★
()
Ответ на: комментарий от Sadler

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

Не наблюдал такого у представленных алгоритмов

Moderators ★★
() автор топика
Ответ на: комментарий от Moderators

Не наблюдал такого у представленных алгоритмов

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

Кстати, для большей наглядности можно не уменьшать 10 раз на 1 пиксель, а уменьшать-увеличивать, чтобы результат был того же размера, что и исходник.

[middle]scale=iw-1:ih-1:sws_flags=$1[middle]; 
[middle]scale=iw+1:ih+1:sws_flags=$1[middle]; 
Sadler ★★★
()
Последнее исправление: Sadler (всего исправлений: 2)
Ответ на: комментарий от Moderators

Вот только тест показывает не «насколько сильно кодек гробит звук», а «на сколько сильно кодек гробит звук при многократном реенкоде этим кодеком». Не вносить дополнительных искажений при реенкоде с теми-же параметрами это хоть приятная, но далеко не самая важная особенность кодека.
Гипотетический кодек срезающий весь сигнал выше определённой частоты пройдёт такой тест идеально (результат первого прохода будет идентичен результату сотого, и тысячного), но звук он при этом может гробить круче кондового MP3.
Подозреваю что для многих кодеков можно реализовать оптимизацию как минимум сильно снижающую накопление искажений в подобных тестах, но значимый прок от этого будет только в подобных тестах

MrClon ★★★★★
()

Есть сравнение аудио кодеков, где можно наглядно убедиться в превосходстве Nero AAC над другими кодеками, в частности Opus и Vorbis

По ссылке нет сравнения кодеков.

Можно сделать тоже самое с алгоритмами ресемплинга изображений

А можно поковырять пальцем в носу. Смысла даже чуть больше.

Для этого понадобится не более 10 прогонок, код для ffmpeg выглядит следующим образом:
Изображение в процессе будет уменьшаться на 1 пиксель 10 раз с выбранным ресемплингом.

В первую очередь для этого понадобится ампутация мозга.

redgremlin ★★★★★
()
Ответ на: комментарий от MrClon

Вот только тест показывает не «насколько сильно кодек гробит звук», а «на сколько сильно кодек гробит звук при многократном реенкоде этим кодеком».

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

Moderators ★★
() автор топика
Ответ на: комментарий от Moderators

Кодек, вносящий меньше искажений, покажет меньше искажений и после 100-проходов

Психоакустическая модель lossy-кодека не предполагает кодирование сложных многократно наложенных искажений, потому нет.

Sadler ★★★
()
Ответ на: комментарий от Moderators

Кодек, вносящий меньше искажений, покажет меньше искажений и после 100-проходов

Нет. Учи матчасть.

redgremlin ★★★★★
()
Ответ на: комментарий от Sadler

Психоакустическая модель lossy-кодека не предполагает кодирование сложных многократно наложенных искажений, потому нет.

Вот только мне интересно, откуда они берутся у MP3, но не берутся у Nero AAC, чем «многократно накладываются»? (чешу репу)

Moderators ★★
() автор топика
Ответ на: комментарий от Moderators

Вносимые кодеком искажения накладываются
Кодек, вносящий меньше искажений, покажет меньше искажений

Не обязательно, смотри пример про срезание выше энной частоты. Это конечно кондовый синтетический пример, но суть иллюстрирует

MrClon ★★★★★
()
Ответ на: комментарий от MrClon

Не обязательно, смотри пример про срезание выше энной частоты. Это конечно кондовый синтетический пример, но суть иллюстрирует

Там, вроде, равные условия, ничего ни у кого не «срезалось». Зачем срезать у MP3, но не срезать у Nero AAC?

Moderators ★★
() автор топика
Ответ на: комментарий от Moderators

откуда они берутся у MP3, но не берутся у Nero AAC, чем «многократно накладываются»

Реакция кодека на искажения сильно зависит от реализации кодека, я не спец в каждом из них, чтобы объяснить, почему тот же Vorbis сгенерировал страшные скрипящие звуки, а MP3 просто запесочил сигнал и сильно порезал по частоте.

Sadler ★★★
()
Ответ на: комментарий от Moderators

Легко проверил, заметил как говнит ffmpeg, добавляя с десяток мс в начало выхлопа. Прогнал аналогично через opusenc/opusdec, в результате получил, что 100 прогонов 96 кб/с звучат очень близко к AAC 256 кб/с из того бенча (с характерным дерьмом в самом тихом месте перед второй строкой).

chupasaurus
()
Ответ на: комментарий от Sadler

я не спец в каждом из них, чтобы объяснить, почему тот же Vorbis сгенерировал страшные скрипящие звуки, а MP3 просто запесочил сигнал и сильно порезал по частоте.

Может быть просто потому, что они вносят больше искажений?

Moderators ★★
() автор топика
Ответ на: комментарий от Moderators

чем «многократно накладываются»?

Енкодером, при енкоде.
Опять-же вообразим гипотетический кодек срезающий при энкоде n-процентов самой малозначительной информации. При достаточном числе проходов он срежет вообще всё

Объясню на овцах, ЛОРовцах:
Представим двух модераторов. Один модератор при каждом заходе на ЛОР банит всех идиотов, второй модератор при каждом заходе банит одного самого тупого.
После одного прохода первого модератора ЛОР ощутимо опустеет.
После одного прохода второго модератора ЛОР почти не изменится.
Но после достаточного количества проходов второго модератора ЛОР вовсе вымрет, а у первого модератора после первого захода ничего менять не будет.
Мысль понятна?
Разумеется мы рассматриваем сферический ЛОР в вакууме на который не приходят новички и не возвращаются забаненые

MrClon ★★★★★
()
Ответ на: комментарий от MrClon

Опять-же вообразим гипотетический кодек

Но ведь там все итак прекрасно слышно, делайте выводы, господа

Moderators ★★
() автор топика
Ответ на: комментарий от Moderators

То есть, то, что вносит кодек - не искажение оригинального звука?

То есть то, что вносит кодек на синтетических данных, может сильно отличаться от работы кодека на чистых входных данных.

Sadler ★★★
()
Ответ на: комментарий от Moderators

Может быть просто потому, что они вносят больше искажений?

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

redgremlin ★★★★★
()
Ответ на: комментарий от Sadler

То есть то, что вносит кодек на синтетических данных, может сильно отличаться от работы кодека на чистых входных данных.

Когда эти данные стали синтетическими? Задача кодека - максимально точно повторить оригинал. Тут подоспело 100-проходное кодирование новым Opus. Теперь - он лидирует в тесте. Парни все сделали не так?

Moderators ★★
() автор топика
Ответ на: комментарий от Sadler

А по делу всё уже сказал. Данные стали синтетическими в момент прохождения через lossy-энкодер.

То есть в новом Opus они менее синтольны? Что есть плохо

Moderators ★★
() автор топика
Ответ на: комментарий от Moderators

В новом Opus ошибка на синтетических данных не растёт. Это неплохо, но не связано с сохранением исходного звучания.

Sadler ★★★
()
Ответ на: комментарий от Moderators

Когда эти данные стали синтетическими?

Прохода после десятого, или вроде того

Тут подоспело 100-проходное кодирование новым Opus. Теперь - он лидирует в тесте. Парни все сделали не так?

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

MrClon ★★★★★
()
Ответ на: комментарий от Sadler

В новом Opus ошибка на синтетических данных не растёт. Это неплохо, но не связано с сохранением исходного звучания.

Они специально для прохождения данного теста потрудились или все это входит в воссоздание верной психоакустической модели?

Moderators ★★
() автор топика
Ответ на: комментарий от Sadler

Это вопрос к ним, я об этом Opus впервые слышу.

Приехали.

Moderators ★★
() автор топика
Ответ на: комментарий от Moderators

Задача кодека - максимально точно повторить оригинал

Нет, такой задачи у lossy-кодеков нет.

Теперь - он лидирует в тесте

Нет никакого теста. Он «лидирует» в бессмысленной хрени.

redgremlin ★★★★★
()
Ответ на: комментарий от TheAnonymous

Мыло не может быть идемпотентно?

Нет

Moderators ★★
() автор топика
Ответ на: комментарий от MrClon

Подозреваю что парни добавили оптимизацию позволяющую пропускать некоторые действия при енкоде

А ты тоже об Opus впервые слышишь?

Moderators ★★
() автор топика
Ответ на: комментарий от MrClon

Нет. А вот ты похоже в первый раз слышишь как работает сжатие звука

Тогда откуда эта чушь? Вот кому нужно подкрутить гайки в знаниях о сжатии звука

Moderators ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.