Які параметри я повинен дивитись, щоб зменшити розмір файлу .MOV?


12

Мій Canon 60D створює файли .MOV під час запису відео, і я з'ясував, що контейнер .MOV має відеопотік H264 та аудіопотік PCM.

Я використовував ffmpeg та GSpot для перегляду деяких моїх відео, і я бачу, що вони здаються досить високими бітрейтами (22 000kbps для 640x480, 45,000 для 1920x1080).

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

Відповіді:


21

Але мені цікаво, чи є спосіб визначити "добрий" цільовий бітрейт ...

Хорошою цільовою швидкістю передачі є швидкість передачі:

  • підтримується мережею, з якої ви передаєте матеріал (наприклад, мережа 3G, домашній WiFi тощо), що досить легко обчислити
  • виглядає добре для вас , що є вельми суб'єктивною мірою

22 Мбіт / с або 45 Мбіт / с дійсно є досить високими для середнього користувача, і особливо для вже стисненого відео, наприклад, h.264. Ви, безумовно, можете йти вперед і знизити швидкість передачі бітів до "розумного" значення, завжди щодо того, яку ємність ви можете собі дозволити і яку якість ви хочете втратити.

Ви також можете змінити розмір відео 1080p до 720p, якщо вам насправді не потрібен розмір або немає можливості обробки для його редагування.

… Або якщо є якийсь сенс намагатися зробити бітрейт змінної

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

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

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

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

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


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

У дуже простому випадку це означає встановити значення між 17 і 23. Я вибираю MP4 як вихідний контейнер замість MOV, тому що є кращі інструменти для ремультиплексування:

ffmpeg -i input.mov -c:v libx264 -crf 22 output.mp4

Чим менше значення, тим краща якість і більший вихід. Навпаки, чим вище, тим нижче якість. У той же час ви, звичайно, зменшите необхідну середню швидкість передачі бітів. Перегляньте посібник з кодування x264 для отримання додаткової інформації про ffmpeg.

Тепер ваше завдання - знайти значення CRF, яке:

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

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

О, і якщо вам не подобається командний рядок, Handbrake - це вільний, багатоплатформенний інструмент, який робить саме те саме. Він навіть має повзунок CRF:

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


Що стосується деталей, що рухаються, чи не регулярно перестарається в стисканні відео, чи я просто пам'ятаю погані приклади? Як помітне збільшення деталей, як тільки камера перестане панувати, тощо
Даніель Бек

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

У минулому я використовував Handbrake, перетворюючи DV avis з відеокамери на DivX та mp4, але мені було легше працювати з командним рядком, намагаючись розібратися з моїми варіантами переходу з .mov до h264 mp4s. Чи існує еквівалент -crf, коли ви створюєте DivX? (чи це повинно бути інше питання?)
Уорд - Відновіть Моніку

@Ward Ви можете використовувати -qscale. Для mpeg * масштаб лінійний від 1-31 (31 - найгірша якість), і подвоєння значення призведе до приблизно половини бітрейта. Значення 2 можна вважати приблизно візуально без втрат. 3-5 - це зазвичай хороший баланс, але, звичайно, якість є суб'єктивною, і вам просто потрібно буде спробувати.
логікан

Приємно! Деякі питання. (1) що означає число, яке слідує за "p" у "1080p відео до 720p"? (2) x264 використовує змінний бітрейт, але чому варіант у ffmpeg називається коефіцієнтом постійної швидкості? Спасибі!
Тім

2

Спробуйте HandBrake CLI

Мені хотілося стиснути деякі файли MOV і мені було все одно, щоб дізнатися всі подробиці про параметри відео. HandBrake CLI - це те, чим я користувався. Пресети приємні:

HandBrake пропонує жорстко закодовані фабрично свіжі пресети, які точно такі ж, як і вбудовані пресети в MacGui.

У моєму випадку це добре спрацювало:

HandBrakeCLI -i input.MOV -o output.mp4 --preset="Normal"

Без попередніх налаштувань, вихід був дуже малим, але не гарної якості. Настройка "Звичайна" виглядала добре для мене, але ви можете бачити інші доступні з ними HandBrakeCLI --preset-list, або налаштувати всі варіанти самостійно, якщо хочете.

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