...

четверг, 5 июня 2014 г.

[Из песочницы] Кодирование 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




Поскольку у меня две кривые руки, один и тот же код написан дважды.

Всем спасибо за внимание.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий