Страница 1 из 1

Кодирование WebM

Добавлено: 23.07.2015 09:27
Bizdelnick
Хочу залить видеоролик в Wikimedia Commons. Туда принимают только Theora или WebM. Исходник — MJPEG в AVI с зеркалки, довольно неплохого качества. Поскольку с Theora раньше был не сильно позитивный в плане качества опыт, решил попробовать WebM. Кодирую avconv по инструкции для ffmpeg, так как ffmpeg в репах нет, а нормальную доку по avconv фиг найдёшь. Вроде бы все те же опции понимает (кроме -lossless).
Сначала пробовал avconv -i ~/Photo/Archive/20100523/DSC_4148.AVI -c:v libvpx-vp9 -crf 0 -b:v 0 -c:a libvorbis Larus_ichthyaetus.webm. Картинка получилась просто отвратительная. Немножко улучшить качество удалось только с постоянным битрейтом: avconv -i ~/Photo/Archive/20100523/DSC_4148.AVI -c:v libvpx-vp9 -b:v 1M -c:a libvorbis Larus_ichthyaetus_hq.webm. Но есть несколько «но»: во-первых, когда открываю результат в VLC, ползунок воспроизведения сразу стоит в конце (там индекса, что ли, нет?), а во-вторых, иногда в начале воспроизведения происходит какой-то сбой (выпадение кадра?) и дальше до конца ролика на экране только мусор (нет ключевых кадров?).
В связи с этим вопросы:
  • Можно ли получить вменяемую картинку, не форсируя постоянный битрейт?
  • Предусмотрен ли в WebM индекс, и как его добавить?
  • Предусмотрены ли в VP9 ключевые кадры, и как их добавить?

Upd. Предполагаю, что вопрос номер 2 разрешится вместе с номером 3.

Re: Кодирование WebM

Добавлено: 23.07.2015 11:21
Hephaestus
Bizdelnick писал(а):
23.07.2015 09:27
Немножко улучшить качество удалось только с постоянным битрейтом
Нет в Вашей команде постоянного битрейта.
Ваша первая команда - кодирование с постоянным квантователем (кстати, почему плохая картинка получилась - непонятно).
Вы не обратили внимание, какой битрейт отображался в процессе кодирования? И кстати, какой отображается в итоговом файле?

Ваша вторая команда - кодирование с переменным битрейтом.
Чтобы получить постоянный битрейт, нужно задавать --minrate и --maxrate, причём они должны быть равны.

Bizdelnick писал(а):
23.07.2015 09:27
когда открываю результат в VLC, ползунок воспроизведения сразу стоит в конце
Это могут быть проблемы VLC. Что показывают другие плееры? Mplayer, например.



Bizdelnick писал(а):
23.07.2015 09:27
нормальную доку по avconv фиг найдёшь.
Мы же это уже обсуждали. Документация на официальном сайте.
Она же присутствует у Вас в системе в составе пакета libav-doc или что-то в этом роде.
В этом же пакете есть FAQ.
Но в целом, да, ffmpeg и avconv очень похожи.

Re: Кодирование WebM

Добавлено: 23.07.2015 11:39
Bizdelnick
Hephaestus писал(а):
23.07.2015 11:21
Нет в Вашей команде постоянного битрейта.

А что такое тогда -b:v 1M?
Upd. А, ну да, это средний битрейт.

Hephaestus писал(а):
23.07.2015 11:21
Ваша первая команда - кодирование с постоянным квантователем (кстати, почему плохая картинка получилась - непонятно).
Вы не обратили внимание, какой битрейт отображался в процессе кодирования? И кстати, какой отображается в итоговом файле?

Вот и мне непонятно. Получилось чуть больше 300 кбит/с, что для 720p явно маловато.

Hephaestus писал(а):
23.07.2015 11:21
Что показывают другие плееры? Mplayer, например.

А он в этом файле картинку вообще не показывает, только звук воспроизводит.

Hephaestus писал(а):
23.07.2015 11:21
Документация на официальном сайте.

Ну да, только по сабжу там ничего вменяемого нет (и, кстати, всего несколько часов назад у меня по этому самому URL была ошибка 404). По ffmpeg — только страничка в вики.

Я тут внезапно вспомнил о наличии у avconv пресетов и запустил кодирование с пресетом libvpx-720p. Вечером отчитаюсь о результате.

Re: Кодирование WebM

Добавлено: 23.07.2015 11:55
Hephaestus
Bizdelnick писал(а):
23.07.2015 11:39
А что такое тогда -b:v 1M
Переменный битрейт. По умолчанию он, грубо говоря, плавает между minrate и maxrate.
Задавая все три параметра равными друг другу, мы тем самым не даём ему плавать и получаем постоянный битрейт.
Там есть ещё какой-то параметр, определяющий эту плавучесть. Что-то вроде tolerance в TeX. Может быть, даже имеет схожее название. Не помню.
Я сам этим никогда не пользовался, ибо задать minrate и maxrate вполне достаточно.

Кстати, битрейт в 1M - не маловато ли? 1М - это ведь 1024k?
Смотрите сами: для mpeg4 приемлемое качество получается от 1500K и выше.
Для DVD (mpeg2) - это 6000K или 9000K.
Что такое 1024K? Пустяк.
Я знаю только один кодек, который даёт хорошее качество при битрейте в районе 1000K - это h264, но и то, используют пресеты, по большей части.
А вот какой надо для vp9 - сие мне не ведомо.
А вообще, там обязательно нужно vp9, по-другому никак?

Re: Кодирование WebM

Добавлено: 23.07.2015 12:02
Bizdelnick
Hephaestus писал(а):
23.07.2015 11:55
Кстати, битрейт в 1M - не маловато ли? 1М - это ведь 1024k?

Может и маловато. Это пока для эксперимента было. В пресете прописано 2M.

Hephaestus писал(а):
23.07.2015 11:55
там обязательно нужно vp9, по-другому никак?

Ну либо theora, либо VP8/VP9, насколько я понимаю. Хотя не удивлюсь, если окажется, что и VP9 они не принимают.

Re: Кодирование WebM

Добавлено: 23.07.2015 12:53
Bizdelnick
Ещё нашлась дока от проекта WebM: http://wiki.webmproject.org/ffmpeg/vp9-encoding-guide
С ней уже что-то начинает проясняться.

Re: Кодирование WebM

Добавлено: 23.07.2015 13:01
Red Gremlin
Bizdelnick писал(а):
23.07.2015 09:27
ffmpeg в репах нет

Есть же на DMO.

Re: Кодирование WebM

Добавлено: 23.07.2015 13:04
Hephaestus
Ну, в глаза бросается двухпроходное кодирование (хотя искренне не понимаю, зачем оно здесь).
И наличие незнакомых мне опций, возможно, специфических для vp9.
Если Вам что-то стало ясно - это хорошо. Мне яснее не стало.
А совсем хорошо будет, если те рекомендации дадут результат.

Re: Кодирование WebM

Добавлено: 23.07.2015 13:06
Bizdelnick
Red Gremlin писал(а):
23.07.2015 13:01
Есть же на DMO.

Я тут при обновлении до Jessie долго и мучительно выгребал из системы кучу старых пакетов оттуда, так что подключать снова без острой необходимости не хочется. Если окажется, что avconv не умеет чего-то, очень для меня нужного, то подключу или из тестинга ffmpeg поставлю.

Re: Кодирование WebM

Добавлено: 23.07.2015 13:15
Hephaestus
Bizdelnick писал(а):
23.07.2015 13:06
Если окажется, что avconv не умеет чего-то, очень для меня нужного
Я не заметил разницы за многие месяцы использования.
Более того, ffmpeg как бинарник присутствовал в wheezy наряду с libav-tools.
И я первое время по привычке набирал ffmpeg вместо avconv - всё абсолютно то же самое, за исключением пары опций, поменявших имена.

Re: Кодирование WebM

Добавлено: 23.07.2015 22:25
Bizdelnick
С пресетом получилось почти нормально. Вот его содержимое:

Код: Выделить всё

g=120
lag-in-frames=16
deadline=good
cpu-used=0
profile=0
qmax=51
qmin=11
slices=4
b=2M

#ignored unless using -pass 2
maxrate=24M
minrate=100k
auto-alt-ref=1
arnr-maxframes=7
arnr-strength=5
arnr-type=centered
Здесь g — это максимальное число кадров в группе, то есть как часто должны вставляться ключевые кадры. Вместе с ними, как я и ожидал, появился и индекс.
В получившемся файле мне не нравится то, что при воспроизведении в VLC в самом начале стабильно выпадают кадры (там происходит движуха, и соответственно битрейт повышенный), из-за чего портится кусок до второго ключевого кадра (почти что все 5 с). Думаю уменьшить значения g и maxrate, чтобы это побороть.
Назначение опций кодирования описано тут: http://wiki.webmproject.org/ffmpeg

Re: Кодирование WebM

Добавлено: 23.07.2015 22:50
Hephaestus
g=120 - это явно много. В мане, помнится рекомендованное значение до 25, умолчальное - 15.
Слишком большой разбег по битрейту от 100K до 24M. Во-первых, 100К - это вообще ни о чём, умолчальное значение - и то выше - 200.
Во-вторых, всё-таки слишком сильное отклонение от среднего. При таких границах, можно сказать, вообще пофиг, какой битрейт задали - будет бултыхаться в очень широких пределах.
А вообще пресет выглядит странно: и minrate/maxrate, и qmin/qmax - всё в одну кучу свалили.

Re: Кодирование WebM

Добавлено: 23.07.2015 22:53
MrClon

Код: Выделить всё

avconv -i ./video.avi  -acodec libvorbis  -aq 5 -ac 2 -qmax 25 ./video.webm

УМВР, но у меня исходники как правило более-менее подготовленные (avi, xvid, mp3 или ещё что-то подобное общеупотребимое).

Re: Кодирование WebM

Добавлено: 23.07.2015 23:45
Bizdelnick
MrClon
Там по умолчанию разве не VP8?

Re: Кодирование WebM

Добавлено: 24.07.2015 00:23
Bizdelnick
Забороть скачок битрейта в начале ролика так и не получилось, но уменьшение g помогло подавить эффект. Для желающих протестировать поддержку VP9 в своём браузере — результат. Перекодировать они, видимо, не осилили, поэтому все варианты в Ogg без картинки.

Re: Кодирование WebM

Добавлено: 24.07.2015 00:50
MrClon
Bizdelnick писал(а):
23.07.2015 23:45
MrClon
Там по умолчанию разве не VP8?

Он самый, а чем он тебя не устраивает? На сколько я понимая это примерный эквивалент H.264.

Re: Кодирование WebM

Добавлено: 24.07.2015 00:58
MrClon
Bizdelnick писал(а):
24.07.2015 00:23
Забороть скачок битрейта в начале ролика так и не получилось, но уменьшение g помогло подавить эффект. Для желающих протестировать поддержку VP9 в своём браузере — результат. Перекодировать они, видимо, не осилили, поэтому все варианты в Ogg без картинки.

FF 38 и Хромиум 43 — только звук. VP8 (приготовленный той самой коммандой) играется нормально и в этих двух браузерах, и в браузерах всех кого я за последнюю неделю просил его протестировать. Пилю свой маленький ютубчик, с гладиаторскими боями и вавилонскими блудницами, проблемы только с сетью (ну и ещё на моём винтажном перегруженном железе видео иногда подлагивает).

Re: Кодирование WebM

Добавлено: 24.07.2015 01:44
Bizdelnick
MrClon писал(а):
24.07.2015 00:50
Он самый, а чем он тебя не устраивает?

У VP9 циферка больше, а значит он круче. Логично же.

MrClon писал(а):
24.07.2015 00:50
На сколько я понимая это примерный эквивалент H.264.

До H.264 им всем как до Австралии вброд.

MrClon писал(а):
24.07.2015 00:58
FF 38 и Хромиум 43 — только звук.

В оригинале?

Re: Кодирование WebM

Добавлено: 24.07.2015 02:46
MrClon
Bizdelnick писал(а):
24.07.2015 01:44
У VP9 циферка больше, а значит он круче. Логично же.
А ещё это значит что у него выше потребление ресурсов на сжатие и разжатие.

Bizdelnick писал(а):
24.07.2015 01:44
До H.264 им всем как до Австралии вброд.

И ты говоришь это основываясь на…

Bizdelnick писал(а):
24.07.2015 01:44
В оригинале?

Так показывает, но в хромиуме тормозит

Re: Кодирование WebM

Добавлено: 24.07.2015 10:35
Bizdelnick
MrClon писал(а):
24.07.2015 02:46
И ты говоришь это основываясь на…

На личном опыте. Работает он (x264) в дохрена раз быстрее, и картинка получается красивше при том же битрейте.

MrClon писал(а):
24.07.2015 02:46
Так показывает

Ну значит то, что не показывает, это перекодированное в Ogg с неосиленным видео. Кроме звука там ничего и нет.

MrClon писал(а):
24.07.2015 02:46
но в хромиуме тормозит

У меня не тормозит, кроме как на первых двух секундах. Компу 7 лет. ЧЯДНТ?

Заметил, что в ролике дёргается яркость. Видимо, на каждом ключевом кадре (примерно раз в секунду — я использовал -g 24). Надо попробовать или битрейт повысить, или ещё чаще ключевые кадры натыкать, чтобы она так сильно уплыть не успевала.
Upd. А, нет, яркость и в оригинале дёргается. Перекодирование тут не виновато.

Re: Кодирование WebM

Добавлено: 26.07.2015 21:41
Bizdelnick
Перекодировал с теми же параметрами в VP8, скачок битрейта в начале исчез. Существеных отличий в качестве не заметил. Перезалил на вику — там всё, разумеется, перекодировалось как положено.