FFMPEG / libx264: Як вказати змінну частоту кадрів, але з максимальною?


16

Замість того, щоб надати FFMPEG / libx264 (-r / -framerate) фіксовану частоту кадрів, я хотів би вказати змінну частоту кадрів зі значенням MAXIMUM та дозволити libx264 зменшити частоту кадрів, як вважає за потрібне. Ідея тут полягає в тому, щоб отримати додаткове стиснення, коли є щось на зразок розширеного нерухомого кадру (що трапляється ЛОГО у моїх джерелах відео).

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


1
Де (або як) ви насправді говорите x264 самому використовувати VFR?
slhck

Це моє запитання.
Марк Героліматос

2
Ваше питання полягав у тому, як визначити максимум VFR . Мені навіть не відомо про будь-який спосіб вказати кодування VFR, використовуючи x264. (Я також не говорю про ffmpeg в цей момент, тому що це ще один шар між вашим джерелом та x264.)
slhck

@MarkGerolimatos Ви знайшли свою відповідь ?!
Dr.jacky

Ні, я ніколи цього не робив.
Марк Героліматос

Відповіді:


19

Розчарувавшись, що ви так і не знайшли відповіді, я збирався принаймні відповісти на запитання інших людей про те, як увімкнути VFR (не V B R) вихід із FFMPEG.

Відповідь на це - дивно названий -vsyncваріант. Ви можете встановити його на кілька різних варіантів, але той, який ви хочете, - "2" або vfr. На чоловіковій сторінці:

-vsync параметр
Метод синхронізації відео. З міркувань сумісності старі значення можна вказати як числа. Нещодавно додані значення повинні бути завжди задані як рядки.

  • 0, перехід

    • Кожен кадр передається зі своєю міткою часу від деміксера до муксера.
  • 1, пор

    • Кадри будуть дублюватися та опускатися для досягнення точно потрібної постійної частоти кадрів.
  • 2, vfr

    • Кадри пропускаються за допомогою часової позначки або опускаються так, щоб 2 кадри не мали однакової часової позначки.
  • крапля

    • Як пройдене, але руйнує всі часові позначки, змушуючи муксери генерувати свіжі часові позначки на основі частоти кадрів.
  • -1, авто

    • Вибирає між 1 і 2 залежно від можливостей муксера. Це метод за замовчуванням.

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

За допомогою -map ви можете вибрати, з якого потоку потрібно брати часові позначки. Ви можете залишити відео або аудіо без змін і синхронізувати залишок потоку (-ів) з незмінним.

Однак у мене зовсім не достатньо репутації, щоб розмістити коментар, щоб просто відповісти на те "підпитання", яке, здається, є у всіх. Але у мене було кілька ідей, до яких я не був чесно налаштований… Але перша, яку я спробував, справді спрацювала . Так.

Вам просто потрібно поєднувати -vsync 2опцію з -r $maxfpsопцією, звичайно там, де ви замінюєте $maxfpsмаксимальний кадр, який хочете! І це РОБОТА! Він не дублює кадри з вихідного файлу, але буде випадати кадри, які змушують файл перейти за максимальний кадр!

За замовчуванням здається, що -r $maxfpsсаме по собі це просто призводить до дублювання / скидання кадрів для досягнення постійної частоти кадрів, а -vsync 2само по собі змушує втягувати кадри безпосередньо, не впливаючи на значення PTS.

Я не був оптимістичним щодо цього, тому що я вже знав, що -r $maxfpsце ставить це на постійні рамки. Я чесно очікував, що помилка чи вона просто підкоряється тому, що настало першим чи останнім чи будь-яким іншим. Той факт, що він робить саме те, що я хотів, мене дуже задовольнив розробників FFMPEG.

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


3
-copytsможе бути корисним також
rogerdpack

1

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

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

Незважаючи на те, що потік x264 має кадр (и), частота кадрів є більшою проблемою на рівні контейнера, ніж кодек.

У кодовому кодері VFR знайдеться, що по суті є текстовим файлом, який детально визначає, яка частота кадрів перевищує рамки / часи, а при кодуванні джерела така функція, як tcfile-in або tcfile-out, передає часові позначки до коду , щоб відобразити місця розташування швидкості та зберегти відео суб'єктивно відповідно до джерела.

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

Джерело також є проблемою: джерела VFR за замовчуванням збережуть свою мінливість кадру, але, мабуть, кодування файлу CFR за бітрейтом змінної (хороша ідея, іноді, коли потрібен телецин) просто призведе до того ж CFR.

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

Крім того, видалення кадрів, що містять такі речі, як I та B кадри, зменшує кількість доступних деталей з часом, що призводить до того, що рух виглядає "степовим" і може втручатися в інші основні параметри відео та спричиняє артефакти на зразок згладжування.

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

І нарешті, причина, що не так багато варіантів робити те, що ви хочете, полягає в тому, що x264 справді добре керує бітрейтом, просто використовуючи тимчасове стиснення (запис змін у часткові кадри). Перехід до 1/2 кадрів не скоротить розмір файлу навпіл; 10% - це, мабуть, реалістичний приріст, який можна очікувати від низького руху або анімації.

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

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

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

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

- інструменти асизинтної децимації

- комутатори fps та -r
- x264 Загальні (tcfile, fps)
- стандарти файлу з тимчасовим кодом
- Рівні та профілі
- Короткий, чіткий підсумок встановлення CFR / VFR (розділ "кадр")

теоретичні дискусії
1 2 3 4 5 6 7

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