Перетворення відео в WebM за допомогою ffmpeg / avconv


18

В той час , намагаючись оптимізувати розмір мого домашнього відео я перетворив деякі з них WebM в якості тесту, використовуючи Pitivi на Xubuntu. Різниця в розмірах значна. Отриманий webm-файл складає приблизно 10% від початкового файлу, тоді як якість зображення виглядає приблизно однаково для мене.

Я також спробував зробити перетворення, використовуючи, avconvщоб я міг його скриптувати, але отриманий файл виглядає дійсно хитро. Переглянувши параметри візуалізації в Pitivi, я спробував деякі параметри:, avconv -i $1 -q 5 -qmin 0 -qmax 63 ${1%.*}.webmале якість все ще виглядає як лайно, тому, здається, я відсутній / використовую деякі неправильні параметри. Хтось знає, які правильні параметри використовувати для перетворення фільму h264 у веб-сайт та отримання такої ж якості, як у Pitivi?

Це налаштування в Pitivi: створення проекту Pitivi Надання в webm (html5 відео) конфігурація кодека

Відповіді:


53

Примітка. Ця інформація заснована на кодуванні FFmpeg Wiki для кодування VP9 . Будь ласка, зверніться до цієї статті для отримання додаткової інформації - вона буде постійно підтримуватися та поширюватися. Для найкращих результатів слід скористатись останньою версією ffmpeg, завантаживши її з їх веб-сайту (достатньо статичної збірки; вона містить libvps-vp9кодер).

Змінна швидкість передачі бітів

Кодування VBR дає вам оптимальну загальну якість, оскільки кодер може вільно обирати, скільки біт присвоїти кадру. Виберіть цей режим, якщо ви не готуєте відео для постійного бітрейт-потоку.

Варіант 1: Кодування постійної якості

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

ffmpeg -i input.mp4 -c:v libvpx-vp9 -crf 30 -b:v 0 output.webm

Значення CRF може бути від 0 до 63. Більш низькі значення означають кращу якість. Рекомендовані значення складають від 15–35, при цьому 31 рекомендовано для відео 1080p HD. У Google є довідник з додатковою інформацією про це .

Варіант 2: Кодування з двох проходів із цільовим бітрейтом

Якщо ви хочете, щоб ваш файл мав певний цільовий бітрейт або розмір файлу, вам потрібно вказати швидкість і скористатися двопрохідним кодуванням (що забезпечить оптимальний розподіл якості). Тут ми обираємо 5 Мбіт / с, що повинно вистачити для вмісту 1080p.

ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 1 -f webm /dev/null && \
ffmpeg -i input.mp4 -c:v libvpx-vp9 -b:v 5M -pass 2 output.webm

Користувачі Windows повинні використовувати NULзамість /dev/null, а ^замість \.

Постійна швидкість передачі бітів

Перш за все, libvpx пропонує постійні режими бітрейта та змінного режиму кодування . Слід уникати постійних бітрейтів, коли це можливо (якщо ви не орієнтуєтесь на конкретний розмір файлу чи сценарій потокового передачі), оскільки середня якість на розмір файлу буде гіршою. Однак ви можете спробувати встановити постійний бітрейт, якщо нічого іншого для вас не працює, наприклад, з 1 Мбіт / с:

ffmpeg -i input.mp4 -c:v libvpx-vp9 -minrate 5M -maxrate 5M -b:v 5M output.webm

Подивіться на вихід і збільшуйте або зменшуйте швидкість передачі бітів на свій смак (або обмеження розміру файлу). Наприклад, ви можете використовувати 500Kor 5M, et cetera.

Ви повинні вказати -minrate, -maxrateі бітрейт -b:vдля того , щоб кодер використовувати CBR. Всі вони повинні мати однакове значення - інакше він вибере інший цільовий бітрейт замість цього і зробить кодування VBR, але з поганою якістю.

Аудіо

Поточним аудіокодеком для кодування VP9 є Opus. FFmpeg вибере необхідний кодер і його параметри за замовчуванням. Якщо ви хочете чітко встановити -c:a libopus, ви також можете це зробити. Для отримання додаткових варіантів зверніться до libopusдокументації .


4
Наразі це єдиний найкращий посібник з кодування VP8 у всьому Інтернеті. Молодці, я хотів би, щоб я міг більше підкреслити це!
зол

@evilsoup Дякую Я все ще налаштовую його, і пізніше додамо нову сторінку у вікі FFmpeg.
slhck

Це справді чудова відповідь! Тепер я розумію, чому моє відео завжди було такої ж низької якості, тому що я фактично завжди використовував типовий 256 кбіт / с. Велике спасибі!
jeroen

Чим відрізнялися розміри між оригінальним mp4 та перетвореним webm?
switchz

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