Як вважати бітрейт, -maxrate та -bufsize відео для Інтернету


13

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

Припустимо, у мене є відео розміром 70 Мб тривалістю 4 хвилини. Як я вважаю , що значення цих прапорів: -b:v, -maxrateі -bufsizeдля цієї команди?

ffmpeg -i input -codec:v libx264 -profile:v main -preset slow -b:v ? -maxrate ? -bufsize ? -vf "scale=720:trunc(ow/a/2)*2" -threads 0 -codec:a libfdk_aac -movflags +faststart output

Або є якесь нормальне значення, як для crfзначень 19-24? Я дуже вдячний за вашу допомогу та рекомендації.


Кодування відео - це мистецтво, і для цього є сотні параметрів. Зауважте, що кодування з двома проходами запропонує (набагато) кращу якість та стиснення у більшості сценаріїв, ніж грати з бітрейтами. Зазвичай кінцевий розмір і бітрейт відео залежать головним чином від розміру вихідного відео. ffmpeg є надзвичайно розумним, щоб вибрати максимальний і бітрейт, якщо ви скажете це зберегти однакову якість відео. Зауважте також, що створення відео в ширину 480 пікселів досить добре в більшості сценаріїв, і це заощадить набагато більше пропускної здатності, ніж грати з бітрейтами.
сережка

1
@earizon Я згоден, кодування відео - це мистецтво, і 480, як правило, досить добре. Однак мені також подобається доступ до більш високої роздільної здатності, оскільки я більше не використовую CRT на 640x480. Це, безумовно, кращий спосіб зменшити розміри, ніж обман з бітрейтами, але знову ж таки, мені подобаються варіанти.
Wyatt8740

Відповіді:


21

Це дійсно залежить від швидкості завантаження.

bufsizeвизначить, наскільки релігійний ffmpeg полягає в тому, щоб підтримувати бітрейт постійним. Якщо встановити bufsize64k, відповідно до Wiki FFmpeg: Обмеження вихідного бітрейту , він обчислює його поточний бітрейт кожні 64 кілобайти та коригує відповідно. Менші розміри bufsizeможуть бути шкідливими для якості, оскільки вони не дають достатньо місця між чеками для x264, щоб зробити різкі зміни - ви отримаєте блокаду.

Якщо ваш maxrate640kbps, а ваш bufsize64k, то кожну десяту частину секунди x264 перевірить. Це неоптимально - FFmpeg Wiki: Кодування для потокових сайтів рекомендує запускати його кожні 1 - 2 секунди. Якщо це не мало сенсу, подумайте про це як maxrate/ bufsize= частоту перевірок. Тримайте цю частоту, як правило, від 1 до 2 секунд.

Якщо ви встановите і те, maxrateі bufsizeвам, слід:

  • встановити maxrateбудь-яку найменшу швидкість завантаження (на прикладі вікі ffmpeg , це 80% загальної швидкості завантаження, але ваш пробіг може змінюватися).
  • встановити bufsizeдесь між тим самим, що і ваш maxrate(одну секунду) та двічі maxrate(2 секунди). Якщо це все ще недостатньо низько, опустіть maxrateі потім перевстановіть bufsizeвідповідно.

Тоді вам доведеться трохи пограти, але так як ви повинні почати десь, я просто почав би maxrateблизько 600 кілометрів, що, як правило, вистачало мені ще до того, як я crfвсе використовував .

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

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


1
Не слід "встановлювати величину" bufsize "десь між тим самим, що і ваш максимальний (одна секунда) та половина максимуму (2 секунди)" "не" встановлювати величину "bufsize" десь між тим самим, що і максимум (одна секунда) та вдвічі більшим (2 рази) секунд) "?
Елі

@Ely Я думаю, ти маєш рацію. Моя зробить це кожні півсекунди. Я це виправлю!
Wyatt8740

@ Wyatt8740 Вибачте, я був дуже зайнятий. Хоча лише одне питання. Якщо я використовую crf, то мені не потрібно вказувати bitrate, buffsizeі maxrate? І якщо так, то що є більш ефективним (використання crfабо bitrate, buffsizeі maxrate)?
Робін

@Robin Ви можете використовувати bufsize та maxrate з CRF. Пам'ятайте, що CRF налаштовує бітрейт на льоту, щоб відповідати певній якості, і якщо частини відео дуже складні, бітрейт зніматиметься в небі, і ви, мабуть, цього не хочете, тож краще "поставити замок" з великим розміром і максимум (але не надто суворо, інакше відео буде схоже на лайно! :))
Елі,

@Robin правильно, вам не потрібно використовувати CRF з іншими. Однак ви можете, якщо хочете обмежити це. crf намагається підтримувати постійну якість - ви можете змусити це робити в межах з bufsizeі maxrate. Не потрібно bitrate, хоча. Як сказала Елі, це полегшить трансляцію.
Wyatt8740
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.