welcome: please sign in
location: Diff for "webm/s"
Differences between revisions 5 and 7 (spanning 2 versions)
Revision 5 as of 2015-12-19 20:12:16
Size: 4844
Editor: anonymous
Comment:
Revision 7 as of 2015-12-19 21:42:42
Size: 8380
Editor: anonymous
Comment:
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
Данный FAQ подразумевает, что читающий владеет навыками работы с FFmpeg хотя бы на уровне [[https://github.com/pituz/webm-thread/wiki|webm-thread wiki]].
Line 4: Line 6:
Line 11: Line 12:
 * VP9, умеренное качество, адекватная скорость: {{{ffmpeg -i in.mkv -c:v libvpx-vp9 -b:v ???k -threads 8 -frame-parallel 0 -pix_fmt +yuv420p -c:a libopus -b:a 64k -sn -pass 1/2 -y out.webm}}}
 * VP9, лучшее качество, но медленно: {{{ffmpeg -i in.mkv -c:v libvpx-vp9 -b:v ???k -tile-columns 0 -speed 0 -frame-parallel 0 -pix_fmt +yuv420p -c:a libopus -b:a 64k -sn -pass 1/2 -y out.webm}}}
 * VP8: {{{ffmpeg -i in.mkv -c:v libvpx -b:v ???k -threads 8 -speed 0 -g 9999 -auto-alt-ref 1 -c:a libopus -b:a 64k -sn -pass 1/2 -y out.webm}}}
Line 41: Line 45:
В libvpx-vp9 по умолчанию нет ограничений на частоту появления ключевых кадров ([[https://arhivach.org/thread/120883/#1496522|что улучшает качество]]), поэтому в видео с редкими сменами сцен они могут появляться редко, делая перемотку неудобной. Если перемотка важнее сэкономленного битрейта, следуется использовать ключ {{{-g}}}. Например, при {{{-g 120}}} и видео 24 fps, ключевые кадры будут появляеться не реже, чем каждые 5 секунд. В libvpx-vp9 по умолчанию нет ограничений на частоту появления ключевых кадров ([[https://arhivach.org/thread/120883/#1496522|что экономит битрейт]]), поэтому в видео с редкими сменами сцен они могут появляться редко, делая перемотку неудобной (эффективная смена позиции в видео возможна только по границам ключевых кадров). Если быстрая перемотка важнее итогового размера, следуется использовать ключ {{{-g}}}. Например, при {{{-g 120}}} и видео 24 fps, ключевые кадры будут появляеться не реже, чем каждые 5 секунд.

=== Как прикрепить субтитры ===

Браузеры не поддерживают софтсаб в формате WebVTT, поэтому единственный переносимый вариант — использовать хардсаб.

 * Базовый синтаксис: {{{-vf "subtitles=sub.ass"}}} (работает и с файлами типа mkv, mp4)
 * Для хардсаба на Windows необходимо предварительно [[https://github.com/pituz/webm-thread/wiki/fontconfig-on-windows|настроить Fontconfig]]
 * Если в используемой команде FFmpeg ключ {{{-ss}}} стоит '''перед''' {{{-i}}}, требуется добавить фильтр {{{setpts}}} со сдвигом на то же число секунд: {{{-vf "setpts=PTS+123/TB,subtitles=sub.ass,setpts=PTS-STARTPTS"}}} ([[https://trac.ffmpeg.org/ticket/2067|баг]])
 * Если в файле несколько треков с субтитрами, выбрать нужный можно с помощью опции {{{si}}}, например: {{{-vf "subtitles=video.mkv:si=1"}}} (выберет второй трек с субтитрами; индекс относительный и начинается с нуля)
 * [[https://ffmpeg.org/ffmpeg-filters.html#Notes-on-filtergraph-escaping|Правила экранирования специальных символов]] (проще переименовать файл)
 * На Windows при указании полного пути до файла с субтитрами, следует использовать синтаксис: {{{-vf "subtitles=C\\:/dir/sub.ass"}}} (проще переместить в текущий каталог)

=== При использовании ключа -ss энкодинг начинается не сразу/ключ -to работает некорректно ===
Line 54: Line 72:
=== Бесплатные видео-редакторы ===

Line 58: Line 79:
=== Ссылки на полезные обсуждения === === Онлайн-утилиты ===
Line 60: Line 81:
Нативные программы обеспечивают максимальный контроль за процессом кодирования, однако не всегда есть возможность их использовать. Ниже приведены некоторые полезные онлайн-сервисы:

=== Прочие ссылки ===

 * [[https://trac.ffmpeg.org/wiki/Capture/Desktop|Захват видео с экрана]]
 * [[https://arhivach.org/thread/120883/#1478504|WebM с ютуба без перекодирования]]

Часто задаваемые вопросы WebM-треда в /s/

Данный FAQ подразумевает, что читающий владеет навыками работы с FFmpeg хотя бы на уровне webm-thread wiki.

Почему консоль?

Все нижеследующие ключи относятся к FFmpeg, если не обозначено иное.

Рекомендуемый минимальный набор параметров

  • VP9, умеренное качество, адекватная скорость: ffmpeg -i in.mkv -c:v libvpx-vp9 -b:v ???k -threads 8 -frame-parallel 0 -pix_fmt +yuv420p -c:a libopus -b:a 64k -sn -pass 1/2 -y out.webm

  • VP9, лучшее качество, но медленно: ffmpeg -i in.mkv -c:v libvpx-vp9 -b:v ???k -tile-columns 0 -speed 0 -frame-parallel 0 -pix_fmt +yuv420p -c:a libopus -b:a 64k -sn -pass 1/2 -y out.webm

  • VP8: ffmpeg -i in.mkv -c:v libvpx -b:v ???k -threads 8 -speed 0 -g 9999 -auto-alt-ref 1 -c:a libopus -b:a 64k -sn -pass 1/2 -y out.webm

Медленно кодируется VP9/используется только одно ядро

  1. Убедиться, что присутствует ключ -threads 8 (или больше)

  2. Убедиться, что используется версия libvpx >= 1.4.0

Процессор всё ещё не полностью загружен при транскодинге в VP9

libvpx-vp9 использует tile-columns multithreading, поэтому число потоков энкодера зависит от разрешения видео. В общем случае число потоков считается как 2^floor(log2((w+63)/256)), где w — ширина итогового видео. Т.е.:

  • Ширина <=448px = 1 тред

  • Ширина >448px = 2 треда

  • Ширина >960px = 4 треда

  • Ширина >1984px = 8 тредов

  • Ширина >4032px = 16 тредов

и т.д. При этом треды энкодера не обязательно будут загружать ядра на 100% в силу ограничений алгоритмов распараллеливания. Если процессор изрядно простаивает, имеет смысл кодировать видео по частам в отдельных процессах FFmpeg (используя опции -ss и -t), склеивая полученные файлы на уровне демуксера.

Почему миниатюра чёрная/как сделать превью

Превью не отображается/видео не проигрывается/зелёная полоса по краям/некорректные цвета

Вероятнее всего, используется некорректная цветовая субдискретизация. Следует добавить ключ -pix_fmt +yuv420p

Как вырезать участок видео без перекодирования

Не работает/тормозит перемотка

В libvpx-vp9 по умолчанию нет ограничений на частоту появления ключевых кадров (что экономит битрейт), поэтому в видео с редкими сменами сцен они могут появляться редко, делая перемотку неудобной (эффективная смена позиции в видео возможна только по границам ключевых кадров). Если быстрая перемотка важнее итогового размера, следуется использовать ключ -g. Например, при -g 120 и видео 24 fps, ключевые кадры будут появляеться не реже, чем каждые 5 секунд.

Как прикрепить субтитры

Браузеры не поддерживают софтсаб в формате WebVTT, поэтому единственный переносимый вариант — использовать хардсаб.

  • Базовый синтаксис: -vf "subtitles=sub.ass" (работает и с файлами типа mkv, mp4)

  • Для хардсаба на Windows необходимо предварительно настроить Fontconfig

  • Если в используемой команде FFmpeg ключ -ss стоит перед -i, требуется добавить фильтр setpts со сдвигом на то же число секунд: -vf "setpts=PTS+123/TB,subtitles=sub.ass,setpts=PTS-STARTPTS" (баг)

  • Если в файле несколько треков с субтитрами, выбрать нужный можно с помощью опции si, например: -vf "subtitles=video.mkv:si=1" (выберет второй трек с субтитрами; индекс относительный и начинается с нуля)

  • Правила экранирования специальных символов (проще переименовать файл)

  • На Windows при указании полного пути до файла с субтитрами, следует использовать синтаксис: -vf "subtitles=C\\:/dir/sub.ass" (проще переместить в текущий каталог)

При использовании ключа -ss энкодинг начинается не сразу/ключ -to работает некорректно

Рекомендуемые настройки ресайза

Mitchell-Netravali (-param0 1/3 -param1 1/3) обеспечивает минимальное количество артефактов ресемплинга, при этом облегчая энкодеру задачу — фильтры типа Lanczos сохраняют слишком много деталей, которые трудно сжимать. См. также:

cubic_survey.gif

Бесплатные видео-редакторы

VBR vs CRF

В некоторых случаях 2pass CRF выдаёт чуть лучшее качество, чем 2pass VBR, при том же размере файла. Поэтому на низких битрейтах может иметь смысл подогнать значение ключа -crf под требуемый размер файла. Например: -b:v 0 -crf 30

Онлайн-утилиты

Нативные программы обеспечивают максимальный контроль за процессом кодирования, однако не всегда есть возможность их использовать. Ниже приведены некоторые полезные онлайн-сервисы:

Прочие ссылки

webm/s (last edited 2017-05-04 08:31:48 by Kagami)