Для работы нам понадобятся:
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 1920×1080 --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.
"...ffmpegbinffmpeg.exe" -i "...имя файла источника.m2ts" -vn -c:a libvorbis -qscale:a 6 "...имя выходного файла.ogg"
Тут всё просто:
-vn
Отключаем кодирование видео.
-c:a libvorbis -qscale:a 6
Указываем кодер и качество.
Диапазон: 0-10.
Чем больше, тем лучше качество.
6 это ~192 Кбит/с.
Сборка:
Кодируем первую серию.
Открываем GUI mkvtoolnix, выбираем получившиеся видео и аудио, задаем параметры (например, для видео полезно будет задать аспект и частоту кадров, а для аудио — язык дорожки) и жмем скопировать в буфер обмена, получаем что-то вроде:
"...mkvtoolnixmkvmerge.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 ( "...ffmpegbinffmpeg.exe" -y -i "...имя 0%%i.m2ts" -vn -map 0:2 -c:a libvorbis -qscale:a 6 "...имя 0%%i.ogg" "...x264x264-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" "...mkvtoolnixmkvmerge.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 ( "...ffmpegbinffmpeg.exe" -y -i "...имя %%i.m2ts" -vn -map 0:2 -c:a libvorbis -qscale:a 6 "...имя %%i.ogg" "...x264x264-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" "...mkvtoolnixmkvmerge.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
Поскольку у меня две кривые руки, один и тот же код написан дважды.
Всем спасибо за внимание.
UPD:
--input-res 1920x1080 --fps 23.976
Можно не указывать. Это необходимо только если вы скармливаете x264 чистый raw поток.
--profile high10
Так же можно не указывать, т.к.
Битность определяется на этапе компиляции и скодировать в 8 и 10 одним бинарником не выйдет. Так что и смысла выставлять профиль в принципе нет (если только не надо 4:2:2 или 4:4:4).
Спасибо tp7.
Также, на мой взгляд, имеет смысл поднять --subme до 9.