Форум: ТЕХНИЧЕСКАЯ ЧАСТЬ
Тема: x264 (глубокие настройки)
автор: SmiT

сообщение оставил SmiT , 18 января 2012, 21:03
Столкнулся с таким нюансом.
Есть задача. Сжать видео в x264 с максимальным качеством. Т.е. чтобы разницы между оригиналом и пережатым не было никакой. Ставлю высокий биттрейт, трехпроходной режим, плацебо. Потерь почти нет, кроме одного. Во время пережатия кодек делит картинку на мелкие квадратики (примерно 2х2 пикселя). Это заметно на очень контрастных и резких краях.  Плавные тонкие линии превращаются в "зубчатые". Если не всматриваться, то все ОК. Но я глазастый, и эта штука мне не нравится.
Как заставить кодек не делить видео на такие мелкие квадратики?




Добавлено (через 59 мин. и 49 сек.):

Дополнение, чтобы было ясно о чем я говорю...


сообщение оставил aZZa , 19 января 2012, 09:11
SmiT
Дело не в x264. Смени рендерер. Ошибка только на красном канале, заметь, соты на фоне без артефактов.

сообщение оставил SmiT , 19 января 2012, 12:21
А на что я его сменю? Сжимал через MeGUI с последними обновлениями.
сообщение оставил aZZa , 19 января 2012, 15:35
SmiT
При чём здесь MeGui =_=. А какой сейчас используется рендерер? Пробуй EVR, Haali, VMR 7, VMR 9, Overlay mixer наконец.

сообщение оставил SmiT , 19 января 2012, 17:17
Угу... Догнал о чем ты... Я просто никогда в жизни не лазил в фильтры.
В общем, наверно ты прав. Файл воспроизводится без артефактов с помощью Haali и VMR-7
Спасибо за помощь.

сообщение оставил Lenchik , 20 января 2012, 00:02
и проблема эта называется то ли subsampling error, то ли sampling error
сообщение оставил Armed , 02 ноября 2012, 12:51
Интересно, если у меня постоянная частота смены сцен, ну 8 кадров на сцену при 15 фпс, то можно ли задать в настройках эту частоту для ключевых кадров, и как оно повлияет на качество кодирования?
сообщение оставил Artofeel , 02 ноября 2012, 12:56
Цитата (Armed @ 02 ноября 2012, 14:51)
можно ли задать в настройках эту частоту для ключевых кадров
да
--keyint 150 --min-keyint 15
для твоих 15 фпс
Цитата (Armed @ 02 ноября 2012, 14:51)
и как оно повлияет на качество кодирования?
мне приятно думать, что положительно :rolleyes:
на практике: это улучшает seeking (перемотку), т.к. плееры в основном мотают по секундам
в теории: если установить keyint в 2 или 4 или более раз чем фпс, это улучшит компрессию, но сильно урежет возможность перемотки (что в случае с клипом не так критично)



сообщение оставил Armed , 06 ноября 2012, 12:07
Цитата (Artofeel @ 02 ноября 2012, 12:56)
--keyint 150 --min-keyint 15
для твоих 15 фпс

Спасибо, а как это логически расшифровывается! Что то тут цифры 8 не получается.
Цитата (Artofeel @ 02 ноября 2012, 12:56)
в теории: если установить keyint в 2 или 4 или более раз чем фпс, это улучшит компрессию, но сильно урежет возможность перемотки (что в случае с клипом не так критично)
Кодирую в AMVSimple пока, судя по перемотки ключевых кадров у меня куда меньше чем через каждые 8 кадров. Качество ужасно при разрешении 320x224.



сообщение оставил Artofeel , 06 ноября 2012, 13:14
Цитата (Armed @ 06 ноября 2012, 13:07)
а как это логически расшифровывается! Что то тут цифры 8 не получается.
а при чем тут 8?
ты просил на 15 фпс
--keyint фпс*10
--min-keyint фпс
Цитата (Armed @ 02 ноября 2012, 14:51)
ну 8 кадров на сцену при 15 фпс
аа..я не обратил внимания на это...эмм.."выражение"
поясни пожалуйста, что для тебя значит Frames Per Second ?

сообщение оставил Armed , 06 ноября 2012, 13:41
Цитата (Artofeel @ 06 ноября 2012, 12:14)
поясни пожалуйста, что для тебя значит Frames Per Second

Тут видимо надо внести другую аббревиатуру! Выражение "8 кадров на сцену при 15 фпс" - это означает, что из 15 кадров в секунде у меня практически 2 сцены длиной по 8 кадров или пол секунды! Короче нашел правильную аббревиатуру - iFPS! :lol: Или (минимальное) количество ключевых кадров в секунду!
Цитата (Artofeel @ 06 ноября 2012, 12:14)
ты просил на 15 фпс
--keyint фпс*10
--min-keyint фпс

Да, но при 2 сценах в секунду получается 2 ключевых кадра в секунду;) А почему именно умножать на 10?
Понял откуда взялось число 10:
Цитата
Рекомендации: Значение по умолчанию применимо в большинстве случаев. Если Вы хотите использовать собственное значение, используйте следующую формулу: fps*10 (значение должно быть целым числом, кратным 10-и). Если Вы кодируете для Blu-ray или потокового видео, то возможно, Вам придется использовать значения, равные частоте кадров итогового видео. Большие значения полезны только для статичного видео.
То есть для частоты кадров в 25 нужно выбирать 250, для 23,976 - 240 и для 29,970 - 300.

< http://forum.kinozal.tv/showthread.php?t=189299 >
Но вот думаю это хорошо только для Рипов, но не клипов.
Цитата
в теории: если установить keyint в 2 или 4 или более раз чем фпс, это улучшит компрессию, но сильно урежет возможность перемотки (что в случае с клипом не так критично)

Мне кажется количество ключевых кадров желательно увеличивать при увеличении количества сцен в клипе. Я хочу, чтобы на каждую новую сцену приходился новый ключевой кадр.

И еще настройки для исходника в HD и 320x224 - думаю должны как то отличаться?
Просто смотрю у людей в HD кодится лучше чем у меня 320x224.

Вот энциклопедя по x264
< http://wiki.oszone.net/index.php/X264 >

Короче я тут пытаюсь разобраться
-I, --keyint         Maximum GOP size
-i, --min-keyint     Minimum GOP size
Цитата
GOP - это группа изображений, содержит последовательность кадров. Может включать до 15 кадров и должна обязательно начинаться с I кадра.

У меня минимальная последовательность 8 кадров, максимальная пусть 16, а почему тогда сказано до 15? Тоесть
--keyint 16 --min-keyint 8
Ну как?;)
Теперь надо с разрешением разобраться:
Цитата
Блок - данные по яркости и цветности для блоков 8х8 изображения. Блоки анализируются по значениям Y (яркость), CB и CR (цветоразностные сигналы)
Макроблок - как следует из названия, состоит из 4 простых блоков в окне 16х16 пикселей соответственно. В формате 4:2:0 макроблок содержит 4 блока яркостных данных Y и по одному CB и CR.
Слой - содержит несколько смежных макроблоков
Кадр - состоит из группы слоев, содержащих изображение, которое, в свою очередь, может быть как I, так P или B.

А блок 8x8 при 320x224 - это разве не много по сравнению с 1920x1080, его можно в настройках изменить? Или я так понимаю x264 изначально заточен под HD, и с 320x224 он будет справляться хуже, ну если только самому не покапаться.



сообщение оставил Artofeel , 06 ноября 2012, 15:55
мой моск...так его еще не насиловали...зачем я это прочитал...
сообщение оставил Armed , 06 ноября 2012, 20:08
Artofeel, лано сорри буду разбираться сам. А ты не подскажешь как менять настройки x264 в AMVSimple и AMVComplex? Я могу только через MeGui.


сообщение оставил Artofeel , 06 ноября 2012, 21:37
у сипла вроде ничего не поменять
у коплекса в папке tools файлик: preset.txt
в нем все написано, твой пресет будет работать под "Пользовательские настройки"
почитай еще < это >, актуальная статья по настройкам х264, не то что ты там ссылался, на 2008 год...

сообщение оставил Armed , 11 ноября 2012, 09:11
Цитата (Artofeel @ 06 ноября 2012, 20:37)
почитай еще это, актуальная статья по настройкам х264

Да встречал такую, но голова от всего этого пухнит! :smile:
Пока у Симпла результат лучше, ибо в Комплексе старые требования к превью и полной 2/12, а можно ли перекинуть настройки x264 взятые из Mediainfo или другой проге в Megui или Комплекс, без ручного ввода?



сообщение оставил Artofeel , 11 ноября 2012, 17:25
Цитата (Armed @ 11 ноября 2012, 10:11)
в Megui или Комплекс, без ручного ввода?
как без ручек то, ты собрался перекидывать, а? Само оно, ничего, никуда, не пойдет.
в Megui кучу своих пресетов можно делать
в Коплексе только один


Добавлено (через 5 час. 24 мин. и 30 сек.):

А! олсо, ты можешь в < ProcessExplorer'e > найти процесс x264 и скопировать всю командную строку, если из MediaInfo тебе проблематично
сообщение оставил Armed , 11 ноября 2012, 20:22
Цитата (Artofeel @ 11 ноября 2012, 16:25)
А! олсо, ты можешь в ProcessExplorer'e найти процесс x264 и скопировать всю командную строку, если из MediaInfo тебе проблематично

Чето у меня такого процесса нет. В MediaInfo есть экспорт, но отображение параметров в ином виде, который Комплекс не понимает, конечно можно попробовать исправить, но хочется более автоматизированный процесс! :biggrin:



сообщение оставил Artofeel , 11 ноября 2012, 20:40
Цитата (Armed @ 11 ноября 2012, 21:22)
Чето у меня такого процесса нет
*посмотреть во время енкодинга :rolleyes:

сообщение оставил Armed , 11 ноября 2012, 20:49
У меня при запущенном ProcessExplorer'e и Windows Media Player Classic с воспроизведенным видео, x264 в процессах не появляется, только mplayer2.


сообщение оставил Artofeel , 11 ноября 2012, 22:09
Цитата (Armed @ 11 ноября 2012, 21:49)
У меня при запущенном ProcessExplorer'e и Windows Media Player Classic с воспроизведенным видео, x264 в процессах не появляется, только mplayer2.
так включил мозги, быстро, решительно.
x264.exe это приложение которое кодит
MeGUI\AMVSimple\AMVComplex это всего лишь гуи, которые вызывают его.
что тебе нужно сделать?

сообщение оставил Armed , 12 ноября 2012, 08:37
Все спасибо, x264 появился! Строку тоже скопировал, Комплекс с ней работает, есть только неудобство: копировать надо при каждом проходе, черт.
А как в MeGui создать пресет?



сообщение оставил Artofeel , 12 ноября 2012, 10:30
Цитата (Armed @ 12 ноября 2012, 09:37)
А как в MeGui создать пресет?
ручками, как еще.
делаешь необходимые настройки и жмешь на кнопку New, что в Config
осло, в MeGUI можно тупо всю командную строку с параметрами добавить в закладке "Misc", в поле "Custom Command Line" и она будет применять после всех заданных параметров (читай, переписывать их). Только смотри входящий и исходящий файлы не закопипасть :)

сообщение оставил Artofeel , 25 декабря 2012, 17:19
Дорогие любители кодить свое видео в 10 бит. Прошу, забейте на это. Есть более действенный способ "сохранить оригинальную картинку". Я говорю о кодировании RGB, да последние билды х264 его поддерживают.
И так, что и как нужно:
В ависинтовском скрипте не должно быть никаких конвертов (ConvertToYV12 и пр..) Вообще для кодирования х264'м, "костыль" под названием ависинт, больше не нужен. Так что ждем появления более универсальных гуи, если конечно авторы захотят их делать...
в х264.exe нужно послать во такие строчки:
Исходный код
--input-csp rgb --output-csp rgb --colormatrix GBR

И все. Ваше видео будет таким каким вы его вывели из редактора (артефакты сжатия в расчет не берем ^^)

Далее, если вы все же хотите использовать YUV и 10 бит, то раз аппаратного декодинга 10 бит нет, неплохо бы тогда вместо < 420 > делать и < 422 >
Исходный код
--video-filter resize:csp=i422 --output-csp i422 --input-range pc --range pc --colorprim bt709 --transfer bt709 --colormatrix bt709

или даже < 444 >
Исходный код
--video-filter resize:csp=i444 --output-csp i444 --input-range pc --range pc --colorprim bt709 --transfer bt709 --colormatrix bt709

как вы ведите, указан (--input-range и --range) диапазон pc (0-255), можно поменять на tv (16-235) если надо

олсо, при обычном конверте ависинтом в YUV с сохранением полного диапазона (ConvertToYV12(matrix="pc.709")), оно на самом деле нифига не сохраняется...может проблема у меня одного, но я все же рекомендую конвертить цвета внутри x264
т.е. для сохранения всего диапазона (0-255) нужно:
Исходный код
--video-filter resize:csp=i420 --output-csp i420 --input-range pc --range pc --colorprim bt709 --transfer bt709 --colormatrix bt709


остается отметить, что RGB, на данный момент, декодит ffdshow и LAV (естественно ни о каком аппаратном декодинге речи и не идет, так что аккуратнее, любители fullHD+60fps)
YUV 444 в 10 битах, декодит только ffdshow

ах да, RGB закодированное х264 в lossless, побитово совпадает с оригиналом.

сообщение оставил KenjiKyou , 25 декабря 2012, 17:53
Цитата (Artofeel @ 25 декабря 2012, 15:19)
при обычном конверте ависинтом в YUV с сохранением полного диапазона (ConvertToYV12(matrix="pc.709")), оно на самом деле нифига не сохраняется

Я когда свой клип кодировал с этой строчкой цвета уплывали. Не было настроения ковырять причину, оставил по дефолту.

Вечерком попробую
Цитата
--input-csp rgb --output-csp rgb --colormatrix GBR

Powered by Ikonboard 3.1.2a
Ikonboard © 2001 Jarvis Entertainment Group, Inc.