Що таке опція “sameq” або “same_quant” у FFmpeg? Чи означає це «однакова якість»?


29

Часто я бачив команди FFmpeg, використовуючи sameq, наприклад, параметр

ffmpeg -i input.mp4 -sameq output.avi

Що це означає? Чи означає це "однакова якість"? Якщо ні, то що я повинен використовувати замість цього?

Відповіді:


57

sameq не означає "однакова якість"

Кілька ресурсів в Інтернеті сприяють використанню sameqабо same_quantваріанту, але, по суті, вони помиляються. Використання sameqне дає результату з такою ж якістю, як введення.
Не використовуйте його ніколи.

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

Ось що говориться в документації FFmpeg :

Зауважте, що це НЕ ІСНЕ ЯКІСТЬ. Не використовуйте цю опцію, якщо ви не знаєте, що вона вам потрібна.

Насправді розробники FFmpeg вже змінили назву від sameqдо same_quantпросто щоб переконатися, а потім видалені sameq/same_quant повністю; Це означає, що цього варіанту не існує в останніх FFmpeg, але ця стаття все ще корисна для тих, хто використовує старі версії FFmpeg.


Як працює стиснення відео?

Тепер, коли ми це прояснили, давайте розберемося в деяких технічних подробицях.

Щоб зрозуміти, чому це не працює надійно, нам потрібно зрозуміти, що означає "якість" для загального кодера відео та що впливає на якість. Чому одне відео виглядає краще, ніж інше, якщо його стискають з різною швидкістю передачі бітів? Що робить конверсію втратою, і чому після кодування відео менше, ніж оригінал?

Коли ви кодуєте відео, ваші вхідні дані перетворюються в інший вимір, спочатку застосовуючи математичне перетворення до блоків пікселів. Це перетворення, здебільшого дискретна косинова трансформація , створює матрицю чисел, яка описує, скажімо, поле 8 × 8 пікселів у відео.

Отже, ваші 8 × 8 пікселів та відповідна матриця спочатку виглядали б так: 1

Оригінальне зображення  

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

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

Це призведе до матриці, в якій зараз значно менше чисел, і багато нулів:

Стиснене зображення  

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

Тут матриця квантування визначає якість . Це важливо. Ми можемо використовувати різні матриці квантування для різної якості. Деякі матриці квантування залишають початкову матрицю майже неушкодженою, інші - ні. Чим більше цифр ми видалимо, тим гірша буде якість, але чим більше ми можемо стиснути відео, тому що в основному ми можемо тут «викинути» нулі.

Що це стосується sameq?

Припустимо, ви кодуєте відео і хочете встановити певну якість. Як ми вже дізналися, різні матриці квантування призводять до різної якості, тому коли ми скажемо нашому кодеру використовувати якість x, він вибере відповідну матрицю квантування, yщоб отримати цю якість, якою б вона не була. Результат - відео, яке було стиснене за допомогою yматриці. 2

І ось цікава частина: sameqозначає "той самий квантователь". Не "однакова якість". Якщо у вас є недавня версія FFmpeg, ви все одно можете її знайти в ffmpeg --help:

ffmpeg --help 2>&1 | grep sameq

Отже, коли тепер ви берете це перетворене відео та кодуєте його знову, і застосовуєте sameqпараметр, FFmpeg, просто кажучи, вибере ті самі матриці квантування, які були використані для вхідного відео.

Це дещо працює, коли ви використовуєте абсолютно той самий кодек для введення та виводу, наприклад, при перетворенні з XviD відео в XviD відео, але ви все одно отримаєте гіршу якість. 3 Це бескаусне кодування того, що вже закодовано, викине ще більше інформації. У наведеному вище прикладі ми створимо ще більше нулів у нашій матриці, і результат буде виглядати гірше.

Він взагалі не працює для різних відеокодеків. Скажіть, ви перетворюєте відео, закодоване XviD, з x264. 4 Для цих двох кодеків матриці квантування, що використовуються внутрішньо, різні - вони не мають однакових коефіцієнтів. Тож цей варіант навіть не має сенсу! На жаль, FFmpeg все ще дозволяє використовувати його.

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

Нарешті, якщо ви хочете прочитати про те, як зберегти свою якість при повторному кодуванні, перегляньте ці повідомлення:


1) Матриця насправді не відповідає зображенню тут. Це лише приклад.
2) Насправді в наші дні більшість процесів кодування не використовують лише одну матрицю. Коли ви встановлюєте певну швидкість передачі, кодер використовує різні матриці, щоб отримати середню швидкість передачі бітів в секунду. Так само, встановлюючи певну якість, сучасні кодери використовують різні матриці залежно від вмісту. Це пояснюється тим, що деякі вмісти "легше" стискати, ніж інші, і для отримання однакового коефіцієнта стиснення потрібно менше квантування.
3) Приклад: ffmpeg -i input.avi -sameq -c:v libxvid output.avi. Не використовуйте це. Будь ласка.
4) Приклад: ffmpeg -i input.avi -sameq -c:v libx264 output.mp4. Не використовуйте і цього. Я серйозно.


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