Кодування x264 + Vorbis

Привіт Хабр.
Власне написати перший пост я вирішив після того, як прочитав цей . У ньому автор постарався викласти своє бачення, але, на мій погляд, не досяг успіху.
 
Отже, дано: BDRemux, 1080p, 25 серій.
Завдання: Зробити максимально якісний рип 480p (або 720р), в 10 біт.
 
Відразу обмовлюся, що кодувати будемо аніме.
 
Для роботи нам знадобляться:
1. x264 , для кодування відеопотоку.
2. ffmpeg , будемо використовувати тільки для кодування звуку, так на мій погляд простіше.
3. mkvtoolnix , для складання цього дива в контейнер mkv.
 
Так як серій у нас багато, напишемо нескладний батник, який стане в нагоді для наступних ріпів.
 
 

Відео

Спочатку наведу код, потім поясню параметри:
 
 
"...\x264-10b.exe" "...\имя файла источника.m2ts" --input-res 1920x1080 --fps 23.976 --profile high10 --preset medium --tune animation --crf=15.5 --me=umh --ref=9 --deblock=-1,-1 --merange=24 --bframes=12 --trellis=1 --video-filter resize:width=854,height=480,method=lancoz --output "...\имя выходного файла.264"

 
 
Параметри
 
--input-res 1920x1080 --fps 23.976

Підказуємо x264 дозвіл і частоту кадрів джерела. (Можна підглянути в MediaInfo)
 
 
--profile high10

Варіанти: baseline, main, high, high10, high422, high444.
Вказуємо профіль. У даному випадку кодуємо в 10 біт, тому high10, якщо в 8 — high.
 
 
--preset medium

Варіанти: ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo.
Баланс швидкості кодування і якості. Тобто вище швидкість — гірше якість.
В основному використовую medium, slow і іноді veryslow.
 
 
--tune animation

Варіанти: film, animation, grain, stillimage, psnr, ssim, fastdecode, zerolatency.
Предустановки, що залежать від вхідного відео. Для фільмів одне, для аніме іншого.
 
 
--crf=15.5

Діапазон: 1-50.
Режим постійної якості і його рівень. Чим менше — тим краще якість. Дозволяє кожному кадру використовувати власний QP, заснований на складності кадру.
Детальніше англійською можна почитати тут .
Це кращий метод для однопрохідного кодування.
Можливі варіанти на заміну: — bitrate або — qp, розглядати їх не будемо.
 
 Далі перевизначити деякі параметри, т.к. не всі вони з пресету medium нам підходять:
 
 
--me=umh

Варіанти: dia, hex, umh, esa, tesa.
Метод оцінки руху повного пікселя. Рекомендую umh.
 
 
--ref=9

Діапазон: 1-16.
Кількість референсних кадрів. Чим більше, тим повільніше буде кодувати. Якщо слідувати специфікаціям для підтримки побутової техніки, 4 — максимум для 1080p, і 9 — максимум для 720p.
При 6 і вище особливої ​​різниці в якості не побачите, а швидкість кодування сильно впаде.
 
 
--deblock=-1,-1.

Деблокінгу, у форматі
сила:порог
. Якщо коротко, то чим вище сила деблокінгу, тим сильніше він застосовується, чим вище поріг, тим більше блоків йому попадається.
Добре розписано тут .
Так як ми кодуємо BDRemux аніме, силу і поріг бажано знизити, щоб зменшити розмиття ліній. Я використовую -1: -1, але зустрічалися ріпи і з -2: -2.
 
 
--merange=24

Діапазон: 4-64.
Визначає максимальну кількість спроб знаходження оптимального варіанту при пошуку вектора руху макроблоку. Чим більше, тим краще якість.
Не має особливого сенсу ставити більше 24.
 
 
--bframes=12

Діапазон: 1-16.
Встановлює максимальне число паралельних B-фреймів. Велике значення може привести до значного поліпшення ефективності ступеня стиснення.
 
 
--trellis=1

Діапазон: 0-2.
Треллис квантування для підвищення ефективності стиснення. 0 — відключено. 1 — Варіант «на макроблоків». 2 — «скрізь».
1 — хороший компроміс між втратою швидкості і ефективністю стиснення. Найкраще 2, але спільно з
--psy-rd
, інакше замилити дрібні деталі.
 
 
ресайз
 
--video-filter resize:width=854,height=480,method=lancoz

Вказуємо ширину і висоту, а так же метод. Я використовую lancoz.
Варіанти: fastbilinear, bilinear, bicubic, experimental, point, area, bicublin, gauss, sinc, lanczos, spline.
 
 

Аудіо

Для кодування будемо використовувати ffmpeg.
 
 
"...\ffmpeg\bin\ffmpeg.exe" -i "...\имя файла источника.m2ts" -vn -c:a libvorbis -qscale:a 6 "...\имя выходного файла.ogg"

 
Тут все просто:
 
 
-vn

Відключаємо кодування відео.
 
 
-c:a libvorbis -qscale:a 6

Вказуємо кодер і якість.
Діапазон: 0-10.
Чим більше, тим краще якість.
6 це ~ 192 Кбіт / с.
 
 

Складання:

Кодуємо першу серію.
 
Відкриваємо GUI mkvtoolnix, вибираємо отримані відео і аудіо, задаємо параметри (наприклад, для відео корисно буде задати аспект і частоту кадрів, а для аудіо — мова доріжки) і тиснемо скопіювати в буфер обміну, отримуємо щось на кшталт:
 
 
"...\mkvtoolnix\mkvmerge.exe" -o "...\имя выходного файла.mkv"  "--default-track" "0:yes" "--forced-track" "0:no" "--aspect-ratio" "0:16/9" "--default-duration" "0:23.976fps" "-d" "0" "-A" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "...\имя перекодированного видео.264" ")" "--language" "0:jpn" "--default-track" "0:yes" "--forced-track" "0:no" "-a" "0" "-D" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "...\имя перекодированного аудио.ogg" ")" "--track-order" "0:0,1:0"

Повний код для 25 серій:
 
 
@echo off
for /L %%i in (1,1,9) do (
"...\ffmpeg\bin\ffmpeg.exe" -y -i "...\имя 0%%i.m2ts" -vn -map 0:2 -c:a libvorbis -qscale:a 6 "...\имя 0%%i.ogg"
"...\x264\x264-10b.exe" "...\имя 0%%i.m2ts" --input-res 1920x1080 --fps 23.976 --profile high10 --preset medium --tune animation --crf=15.5 --me=umh --ref=9 --deblock=-1,-1 --merange=24 --bframes=12 --trellis=1 --video-filter resize:width=854,height=480,method=lancoz --output "...\имя 0%%i.264"
"...\mkvtoolnix\mkvmerge.exe" -o "...\имя 0%%i.mkv"  "--default-track" "0:yes" "--forced-track" "0:no" "--aspect-ratio" "0:16/9" "--default-duration" "0:23.976fps" "-d" "0" "-A" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "...\имя 0%%i.264" ")" "--language" "0:jpn" "--default-track" "0:yes" "--forced-track" "0:no" "-a" "0" "-D" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "...\имя 0%%i.ogg" ")" "--track-order" "0:0,1:0"
)
for /L %%i in (10,1,25) do (
"...\ffmpeg\bin\ffmpeg.exe" -y -i "...\имя %%i.m2ts" -vn -map 0:2 -c:a libvorbis -qscale:a 6 "...\имя %%i.ogg"
"...\x264\x264-10b.exe" "...\имя %%i.m2ts" --input-res 1920x1080 --fps 23.976 --profile high10 --preset medium --tune animation --crf=15.5 --me=umh --ref=9 --deblock=-1,-1 --merange=24 --bframes=12 --trellis=1 --video-filter resize:width=854,height=480,method=lancoz --output "...\имя %%i.264"
"...\mkvtoolnix\mkvmerge.exe" -o "...\имя %%i.mkv"  "--default-track" "0:yes" "--forced-track" "0:no" "--aspect-ratio" "0:16/9" "--default-duration" "0:23.976fps" "-d" "0" "-A" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "...\имя %%i.264" ")" "--language" "0:jpn" "--default-track" "0:yes" "--forced-track" "0:no" "-a" "0" "-D" "-S" "-T" "--no-global-tags" "--no-chapters" "(" "...\имя %%i.ogg" ")" "--track-order" "0:0,1:0"
)
pause

Оскільки у мене дві криві руки, один і той же код написаний двічі.
 
Всім дякую за увагу.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.