Видео-кодирование

Список разделов Ogg Vorbis Потрепаться

Описание: Обсуждение всего, что не относится к тематике сайта

Сообщение #1 do0dlez » 04.01.2009, 04:25

Хочу поподробнее ознакомиться с этой проблемой.
Прошу помощи у знающих людей.
Конкретно интересует выбор кодировщиков (главное для меня не аппаратная поддержка и индустриальные стандарты, а качество) и описание параметров для кодирования.
do0dlez
Аватара
Откуда: Украина, Луганск
Репутация: 0
С нами: 15 лет 4 месяца

Сообщение #2 CMEPTb » 04.01.2009, 07:31

Единственное с чем можно определиться сразу: x264 - лучший кодер. Куча народу его вылизывает и ещё столько же выпускают к нему интересные патчи. Официальная версия обновляется в раз в два-пять дней в течении четырёх лет. С 2006 обошел своих платных конкурентов и постоянно прогрессирует.
А как его удобнее его использовать и с какими параметрами, это предмет тестов и споров на 50-300 страниц на других более видеопомешанных форумах. Я бы послал куда надо, но не хочу рекламить. В инете есть десятки faq как закодировать фильм и сотни индивидуально-лучших настроек фильтров и кодека от съевших собаку. Так зачем тут создавать свой кривой велосипед? :wacko: Тяжко это. Да и советчиков тут боюсь от силы человек 6 будет.

Ну если кто напишет или скопирует откуда нибудь faq, то возможно я поправлю или дополню что нибудь, а начинать ну совсем уж влом. Ненужное это всё...
CMEPTb
Аватара
Откуда: Москва
Репутация: 8
С нами: 17 лет 11 месяцев

Сообщение #3 B3ND3R » 04.01.2009, 15:42

x264 - лучший кодер
Только на стационарном DVD проигрывателе H.264 не поддерживается, а таких пока что много. Поэтому если для аппартных проигрывателей, то лучше будет использовать XviD. А если на компьюетере или если есть соттвествующее устройство, вроде TviX или Dune или EGreat — то однозначно x264.

Я вот когда кодировал видео mencoder'ом, с x264, и делал сначала crop, потом scale (в соответствии с aspect ratio DVD), все это выводилось в raw поток. После raw поток муксил в MP4, а потом уже в MKV. Так вот я так и не понял где, но где-то видимо или mencoder, или у x264 такая фича (вот это наврятли), сохранялись оригинальные пропорции фильма. То есть scale делал так, что ширина и высота делилась на 16 (или на 8, уже не помню), при этом был какой-то процент расхождения с оригинальным соотношением сторон (всегда выбирал наименьшее, < 1%), вот этот вот процент mencoder где-то сохранял и в итоге видео при просмотре тем же mplayer'ом увеличивалось, например 720x400 -> 720x405. Так я это дело и забросил. А теперь вот думаю, может и не стоило scale делать, а сделать видео анаморфным.
B3ND3R
Репутация: 1
С нами: 16 лет 10 месяцев

Сообщение #4 CMEPTb » 04.01.2009, 17:02

Про стационары было сказано ясно:
B3ND3R: (главное для меня не аппаратная поддержка и индустриальные стандарты, а качество)
Хотя при желании можно найти железный плеер. Кому нужны адреса в москве могу показать. От 4 тыщ и с поддержкой hdtv. А теперь думаю количество плееров будет расти потому что новый divx уже перешел на avc и будет иметь aac звук. То есть будет кодировать в тот же формат что и x264. Да и к hdtv качеству народ уже привыкает.
А про наше будущее - blueray и hddvd плееры и говорить не надо. Формат видео у них уже в формате avc. Так что можете кодить фильм в x264, записывать его на blueray болванку и смотреть.

d[o_0]dleZ:Я вот когда кодировал видео mencoder'ом, с x264, и делал сначала crop, потом scale (в соответствии с aspect ratio DVD), все это выводилось в raw поток. После raw поток муксил в MP4, а потом уже в MKV. Так вот я так и не понял где, но где-то видимо или mencoder, или у x264 такая фича (вот это наврятли), сохранялись оригинальные пропорции фильма.

Это x264. Посмотри параметр --sar ;-) А можно расчитывать без учёта деления на 16. Качество страдает очень незначительно.
CMEPTb
Аватара
Откуда: Москва
Репутация: 8
С нами: 17 лет 11 месяцев

Сообщение #5 do0dlez » 04.01.2009, 20:38

спасибо за ответы.А можете дать ссылку на ресурс, в котором описывается весь процессе кодирования?
я просто видео до этого всё время кодил через MediaCoder, а сейчас интересно стало попробовать понастраивать процесс кодирования.

ЗЫ. CMEPTb, Вы перепутали авторов цитат ;)
do0dlez
Аватара
Откуда: Украина, Луганск
Репутация: 0
С нами: 15 лет 4 месяца

Сообщение #6 CMEPTb » 05.01.2009, 01:40

Сам не знаю как перепутал. :crazy:
А по поводу процесса это смотря какие стоят задачи. Зависит от сложности. Скажи лучше что хочешь мутить. Двд рипнуть, или монтаж сделать и улучшить видео, или просто его конвертнуть, а может видеозахват с тв тюнера осуществить или кассету оцифровывать с камеры или видака. А я предложу наиболее простой но качественный способ.
А может и нет :-)
CMEPTb
Аватара
Откуда: Москва
Репутация: 8
С нами: 17 лет 11 месяцев

Сообщение #7 B3ND3R » 08.01.2009, 02:14

Посмотри параметр --sar
Да, параметр получает тот, вот только как его отключить в mencoder'e x264encopts непонятно. Можно правда и другим путем пойти.
B3ND3R
Репутация: 1
С нами: 16 лет 10 месяцев

Сообщение #8 do0dlez » 08.01.2009, 04:19

CMEPTb:Скажи лучше что хочешь мутить
  1. конвертнуть после монтажа.
  2. Уменьшить размер без заметной потери качества уже имеющегося видео
do0dlez
Аватара
Откуда: Украина, Луганск
Репутация: 0
С нами: 15 лет 4 месяца

Сообщение #9 CMEPTb » 11.01.2009, 04:35

Простой проги для перекодирования видео в x264 я не нашел. Двд риперы есть, а конвертилки нету. Не говоря уж такой, в которой были бы гибкие настройки, постоянно свежие библиотеки и муксер. Иначе пользовался бы ей и оставался бы тупым дальше, не влезая в дебри кодирования. Можно кодировать не x264ым, а meinconcept h.264 encoder например или ateme. Конечно они хуже намного, зато можно выбрать файл, пресет, нажать encode и они сами всё сделают.

А те кто выбирают непревзойдённый x264, извращаются в несколько действий в нескольких прогах (по крайней мере все, кого я знаю). Да и от обилия прог разного назначения глаза разбегаются. Что советовать я прям растерялся. Вариантов масса.

Наверно посоветую самое простое. Скачай megui версию ни ниже 3, при запуске ей надо разрешить выйти в инет. Пусть качает всё необходимое и сама обновится до последней версии. Второе что нужно скачать это avisynth версии не меньше 2.5.8 чтоб megui научился работать с avs скриптами. Возможно ещё придётся установить net framework, хотя не уверен. На всякий случай предупредил.
Получается скачать нужно 2 проги, с одной из которых даже разбираться по первости не надо, только установить.

Теперь как кодировать:
Создаём текстовый файлик.
Внутри пишем:

DirectShowSource("d:\films\terminator 2.avi")

То что красным заменить на своё. Меняем расширение с .txt на .avs Всё скриптик создан. Открываем .avs файлик в megui и можно кодировать и видео и звук в нём же. Там разобраться не сложно.

Кстати .avs файлы и всенародно любимый virtual dub ест. Что очень хорошо, потому что виртуал дуб воспринимает только avi и wmv файлы. А в avs он сожрёт что угодно, что понимает стандартный видеопроигрыватель в системе. Если занимаешься монтажем в нём, то можно в нём же и кодировать, тогда megui не нужен. x264 для виртуалдуба вот. Только минус виртуалдуба в том, что он сохраняет видео только в avi. Значит звук в ворбис или аац не положить. А менять контейнер, экстрактить аудиопотоки, кодировать в аудиоконверторе и муксить всё это добро в другой контейнер типа mkv это ещё как минимум 2-3 проги надо.

Самую ламерскую схему наваял с чего начать, писать много впадлу, тем более это на других ресурсах разжевано, и с картинками (хотя иногда и лишнего много и софт с настройками устаревшие в описании). Будут вопросы по проблемам или настройкам - спрашивай. Не хочется зря писать много для того, кому возможно уже спрашивать ничего не надо. 3 дня как никак прошло. :hi:
CMEPTb
Аватара
Откуда: Москва
Репутация: 8
С нами: 17 лет 11 месяцев

Сообщение #10 do0dlez » 11.01.2009, 05:50

спасибо :good:
do0dlez
Аватара
Откуда: Украина, Луганск
Репутация: 0
С нами: 15 лет 4 месяца

Сообщение #11 Зелёный » 11.01.2009, 12:12

Очень познавательно, спасибо!..
От себя могу добавить, что конвертирую (с использованием MEncoder'a) видео при помощи программы "MediaCoder". Достаточно гибок по настройке, есть русский интерфейс, поддерживает множество форматов и контейнеров (в том числе MKV, MP4, OGG), а также работу с субтитрами и, конечно, AVS-скриптами.
Зелёный M
Аватара
Откуда: Великий Новгород
Репутация: 5
С нами: 17 лет 2 месяца

Сообщение #12 CMEPTb » 11.01.2009, 17:17

2. Уменьшить размер без заметной потери качества уже имеющегося видео
Забыл ответить на вторую часть вопроса. Режим кодирования однопроходный - constant quality (он же --crf). Не уступает по качеству дву и трёхпроходному кодированию. Качество устанавливается от --crf 1 (самое лучшее) до crf --64 (самый маленький размер) Битрейт выбирается автоматически и зависит от сложности и разрешения видео, зато всегда предсказуемый на глаз результат. Есть и режим кодирования без потерь. --crf 0. Так что можно x264 использовать как lossless кодировщик для yv12 видео.
Вообще по мнению разных людей незаметная на глаз потеря качества достигается в значении от 20 до 18. А просто качественную картинку и очень хороший размер можно получить на 27-23. Я ставлю 19 и ни разу не разочаровался.
Ещё стоит посмотреть и кучу других настроек отключенных по умолчанию которые огого как поднимают качество или экономят битрейт. Особенно если проц быстрый. Описаний и тестов в инете море.

Greenm@n
Скачал MediaCoder. Закодил ролик. Имхо лучшая програма из конвертилок. Понимает avisynth, многоядерность, есть демуксер, муксер, режим copy audio. А настроек x264 в ней кот наплакал.
Закодировал ролик, поставив всё что можно на максимум, проверил настройки:

cabac=1 / ref=16 / deblock=1:0:0 / analyse=0x3:0x133 / me=umh / subme=6 / psy_rd=1.0:0.0 / mixed_ref=0 / me_range=16 / chroma_me=1 / trellis=1 / 8x8dct=1 / cqm=0 / deadzone=21,11 / chroma_qp_offset=-2 / threads=3 / nr=0 / decimate=1 / mbaff=0 / bframes=3 / b_pyramid=0 / b_adapt=1 / b_bias=0 / direct=3 / wpredb=1 / keyint=250 / keyint_min=25 / scenecut=40(pre) / rc=2pass / bitrate=800 / ratetol=1.0 / qcomp=0.60 / qpmin=10 / qpmax=51 / qpstep=4 / cplxblur=20.0 / qblur=0.5 / ip_ratio=1.40 / pb_ratio=1.30 / aq=1:1.00 ...слабоватенько.
Максимум качества из x264 при помощи этого транскодера не выжать. Оптимальное соотношение скорости и качества тоже не получить. Настройки для первого и второго прохода разные тоже не сделать. Есть ещё расширенные настройки, но зайти не даёт ссылаясь на отсутствие xul based interface. Могли бы уж в инсталятор засунуть... Кстати версию x264 пишет несуществующую, но какая-то новая это точно. Не знаю скачивает она обновления или нет, но в инет по 80 порту при запуске ломится.
Ещё бы элементарные функции - ресайз, деинтерлейс, кроп, сплит, или редактор тех же функций для ависинта... И строчку куда можно дописать вручную дополнительные команды для энкодера, было бы идеально. Моя оценка 5 баллов! Вердикт лучшая прога для ламера! :good:

А для наилучшего результата и экономии времени лучше денёк поколупаться с megui и пару дней с avisynth. Процесс кодирования видео всё таки более времяёмкий процесс, чем процесс изучения правильного и гибкого софта.
CMEPTb
Аватара
Откуда: Москва
Репутация: 8
С нами: 17 лет 11 месяцев

Сообщение #13 Зелёный » 11.01.2009, 18:29

Спасибо за консультацию, приму к сведению :)
Зелёный M
Аватара
Откуда: Великий Новгород
Репутация: 5
С нами: 17 лет 2 месяца

Сообщение #14 do0dlez » 11.01.2009, 18:33

ооо.спасибо!
CMEPTb:Не знаю скачивает она обновления или нет, но в инет по 80 порту при запуске ломится.
МедиаКодер ломится в нет за RSS-рассылкой
обновления он проверяет, но скачиваются отдельно.
CMEPTb:А для наилучшего результата и экономии времени лучше денёк поколупаться с megui и пару дней с avisynth.
Согласен. Вот мучаюсь ;)
Кстати, не могли бы Вы поделиться какой-нибудь ссылочкой на ресурс,в котором подробно описываются все настройки х264? ...желательно на русском...
do0dlez
Аватара
Откуда: Украина, Луганск
Репутация: 0
С нами: 15 лет 4 месяца

Сообщение #15 CMEPTb » 12.01.2009, 01:43

Полной справки, да ещё на русском пожалуй не найду...

Код: Выделить всё
x264 core:65 r1074M b6bb3d4
Syntax: x264 [options] -o outfile infile [widthxheight]

Infile can be raw YUV 4:2:0 (in which case resolution is required),
  or YUV4MPEG 4:2:0 (*.y4m),
  or AVI or Avisynth if compiled with AVIS support (yes).
Outfile type is selected by filename:
 .264 -> Raw bytestream
 .mkv -> Matroska
 .mp4 -> MP4 if compiled with GPAC support (yes)

Options:

  -h, --help                  List the more commonly used options
      --longhelp              List all options

Frame-type options:

  -I, --keyint <integer>      Maximum GOP size [250]
  -i, --min-keyint <integer>  Minimum GOP size [25]
      --scenecut <integer>    How aggressively to insert extra I-frames [40]
      --pre-scenecut          Faster, less precise scenecut detection.
                                  Required and implied by multi-threading.
  -b, --bframes <integer>     Number of B-frames between I and P [0]
      --b-adapt               Adaptive B-frame decision method [1]
                                  Higher values may lower threading efficiency.
                                  - 0: Disabled
                                  - 1: Fast
                                  - 2: Optimal (slow with high --bframes)
      --b-bias <integer>      Influences how often B-frames are used [0]
      --b-pyramid             Keep some B-frames as references
      --no-cabac              Disable CABAC
  -r, --ref <integer>         Number of reference frames [1]
      --no-deblock            Disable loop filter
  -f, --deblock <alpha:beta>  Loop filter AlphaC0 and Beta parameters [0:0]
      --interlaced            Enable pure-interlaced mode (tff)
      --tff                   Alias for --interlaced
      --bff                   Enable pure-interlaced mode (bff)

Ratecontrol:

  -q, --qp <integer>          Set QP (0=lossless) [26]
  -B, --bitrate <integer>     Set bitrate (kbit/s)
      --crf <float>           Quality-based VBR (nominal QP)
      --vbv-maxrate <integer> Max local bitrate (kbit/s) [0]
      --vbv-bufsize <integer> Enable CBR and set size of the VBV buffer (kbit) [
0]
      --vbv-init <float>      Initial VBV buffer occupancy [0.9]
      --qpmin <integer>       Set min QP [10]
      --qpmax <integer>       Set max QP [51]
      --qpstep <integer>      Set max QP step [4]
      --ratetol <float>       Allowed variance of average bitrate [1.0]
      --ipratio <float>       QP factor between I and P [1.40]
      --pbratio <float>       QP factor between P and B [1.30]
      --chroma-qp-offset <integer>  QP difference between chroma and luma [0]
      --aq-mode <integer>     AQ method [1]
                                  - 0: Disabled
                                  - 1: Variance AQ (complexity mask)
      --aq-strength <float>   Reduces blocking and blurring in flat and
                              textured areas. [1.0]
                                  - 0.5: weak AQ
                                  - 1.5: strong AQ

  -p, --pass <1|2|3>          Enable multipass ratecontrol
                                  - 1: First pass, creates stats file
                                  - 2: Last pass, does not overwrite stats file
                                  - 3: Nth pass, overwrites stats file
      --stats <string>        Filename for 2 pass stats ["x264_2pass.log"]
      --qcomp <float>         QP curve compression: 0.0 => CBR, 1.0 => CQP [0.60
]
      --cplxblur <float>      Reduce fluctuations in QP (before curve compressio
n) [20.0]
      --qblur <float>         Reduce fluctuations in QP (after curve compression
) [0.5]
      --zones <zone0>/<zone1>/...  Tweak the bitrate of some regions of the vide
o
                              Each zone is of the form
                                  <start frame>,<end frame>,<option>
                                  where <option> is either
                                      q=<integer> (force QP)
                                  or  b=<float> (bitrate multiplier)
      --qpfile <string>       Force frametypes and QPs

Analysis:

  -A, --partitions <string>   Partitions to consider ["p8x8,b8x8,i8x8,i4x4"]
                                  - p8x8, p4x4, b8x8, i8x8, i4x4
                                  - none, all
                                  (p4x4 requires p8x8. i8x8 requires --8x8dct.)
      --direct <string>       Direct MV prediction mode ["spatial"]
                                  - none, spatial, temporal, auto
      --direct-8x8 <-1|0|1>   Direct prediction size [1]
                                  -  0: 4x4
                                  -  1: 8x8
                                  - -1: smallest possible according to level
  -w, --weightb               Weighted prediction for B-frames
      --me <string>           Integer pixel motion estimation method ["hex"]
                                  - dia: diamond search, radius 1 (fast)
                                  - hex: hexagonal search, radius 2
                                  - umh: uneven multi-hexagon search
                                  - esa: exhaustive search
                                  - tesa: hadamard exhaustive search (slow)
      --merange <integer>     Maximum motion vector search range [16]
      --mvrange <integer>     Maximum motion vector length [-1 (auto)]
      --mvrange-thread <int>  Minimum buffer between threads [-1 (auto)]
  -m, --subme <integer>       Subpixel motion estimation and mode decision [6]
                                  - 0: fullpel only (not recommended)
                                  - 1: SAD mode decision, one qpel iteration
                                  - 2: SATD mode decision
                                  - 3-5: Progressively more qpel
                                  - 6: RD mode decision for I/P-frames
                                  - 7: RD mode decision for all frames
                                  - 8: RD refinement for I/P-frames
                                  - 9: RD refinement for all frames
      --psy-rd                Strength of psychovisual optimization ["1.0:0.0"]
                                  #1: RD (requires subme>=6)
                                  #2: Trellis (requires trellis, experimental)
      --mixed-refs            Decide references on a per partition basis
      --no-chroma-me          Ignore chroma in motion estimation
  -8, --8x8dct                Adaptive spatial transform size
  -t, --trellis <integer>     Trellis RD quantization. Requires CABAC. [0]
                                  - 0: disabled
                                  - 1: enabled only on the final encode of a MB
                                  - 2: enabled on all mode decisions
      --no-fast-pskip         Disables early SKIP detection on P-frames
      --no-dct-decimate       Disables coefficient thresholding on P-frames
      --nr <integer>          Noise reduction [0]

      --deadzone-inter <int>  Set the size of the inter luma quantization deadzo
ne [21]
      --deadzone-intra <int>  Set the size of the intra luma quantization deadzo
ne [11]
                                  Deadzones should be in the range 0 - 32.
      --cqm <string>          Preset quant matrices ["flat"]
                                  - jvt, flat
      --cqmfile <string>      Read custom quant matrices from a JM-compatible fi
le
                                  Overrides any other --cqm* options.
      --cqm4 <list>           Set all 4x4 quant matrices
                                  Takes a comma-separated list of 16 integers.
      --cqm8 <list>           Set all 8x8 quant matrices
                                  Takes a comma-separated list of 64 integers.
      --cqm4i, --cqm4p, --cqm8i, --cqm8p
                              Set both luma and chroma quant matrices
      --cqm4iy, --cqm4ic, --cqm4py, --cqm4pc
                              Set individual quant matrices

Video Usability Info (Annex E):
The VUI settings are not used by the encoder but are merely suggestions to
the playback equipment. See doc/vui.txt for details. Use at your own risk.

      --overscan <string>     Specify crop overscan setting ["undef"]
                                  - undef, show, crop
      --videoformat <string>  Specify video format ["undef"]
                                  - component, pal, ntsc, secam, mac, undef
      --fullrange <string>    Specify full range samples setting ["off"]
                                  - off, on
      --colorprim <string>    Specify color primaries ["undef"]
                                  - undef, bt709, bt470m, bt470bg
                                    smpte170m, smpte240m, film
      --transfer <string>     Specify transfer characteristics ["undef"]
                                  - undef, bt709, bt470m, bt470bg, linear,
                                    log100, log316, smpte170m, smpte240m
      --colormatrix <string>  Specify color matrix setting ["undef"]
                                  - undef, bt709, fcc, bt470bg
                                    smpte170m, smpte240m, GBR, YCgCo
      --chromaloc <integer>   Specify chroma sample location (0 to 5) [0]

Input/Output:

  -o, --output                Specify output file
      --sar width:height      Specify Sample Aspect Ratio
      --fps <float|rational>  Specify framerate
      --seek <integer>        First frame to encode
      --frames <integer>      Maximum number of frames to encode
      --level <string>        Specify level (as defined by Annex A)

  -v, --verbose               Print stats for each frame
      --progress              Show a progress indicator while encoding
      --quiet                 Quiet Mode
      --no-psnr               Disable PSNR computation
      --no-ssim               Disable SSIM computation
      --threads <integer>     Parallel encoding
      --thread-input          Run Avisynth in its own thread
      --non-deterministic     Slightly improve quality of SMP, at the cost of re
peatability
      --asm <integer>         Override CPU detection
      --no-asm                Disable all CPU optimizations
      --visualize             Show MB types overlayed on the encoded video
      --dump-yuv <string>     Save reconstructed frames
      --sps-id <integer>      Set SPS and PPS id numbers [0]
      --aud                   Use access unit delimiters
      --nal-hrd               Use NAL HRD parameters
      --pulldown <integer>    Use 3:2 pulldown
                                  - 32: TBT,BT,BTB,BT pattern
                                  - 64: triple,double *recommended for 720p

вот что выдаёт x264 при поманде --longhelp. В мегуе тоже справка выскакивает если к параметру мышку навести и подержать. Хотя по секрету могу сказать что незачем вникать в теорию. Если не знаешь чем b кадры отличаются от p или i кадров, какой метод предсказания движения лучше ромбообразный или шестиугольный, что такое кванты, матрицы и адаптивная квантинизация, блочность, то этот хэлп едва ли поможет. В теорию пусть програмисты вникают.

Лучше знать только
1) какие значения для хорошего качества люди ставят всегда
2) какие всё таки стоит понизить до апгрейда, ибо капельку возросшее качество не стоит замедления кодирования в 2-3 раза
3) некоторые настройки могут как поднять качество так и снизить в зависимости от исходника - тут уж можно проверить на коротком отрезке, а можно средние значения выбрать.

У кого дьявольский мощный комп или не западло кодировать фильм от 6 до 30 часов непрерывно пункт 2 пропустить.

Я например тупо взял чужие настройки которые стоят у всех. А какие у людей разные, выбирал экспериментально. Кодировал короткие отрезки видео меняя только один параметр и сравнивал как было и как стало. При помощи ssim, vqm метрик и покадрово на глаз. Ну и скорость кодирования засекал. А только потом стал понимать что для чего и зачем.
Последний раз редактировалось CMEPTb 12.01.2009, 06:24, всего редактировалось 1 раз.
CMEPTb
Аватара
Откуда: Москва
Репутация: 8
С нами: 17 лет 11 месяцев

След.

Вернуться в Потрепаться



cron