Guest User

Untitled

a guest
Aug 6th, 2014
59
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. **Webm-тред**
  2.  
  3. Тред техподдержки(Устаревшая, но работает): http://2ch.hk/s/res/978430.html
  4. Отдельный WebM-тред с аниме: *ссылка на данный тред*
  5.  
  6. Если браузер вместо воспроизведения отдельных видео ругается на повреждённый видеофайл, либо не воспроизводит звук — он скорее всего не может в VP9 и в Opus. См. http://en.wikipedia.org/wiki/HTML5_Audio#Supported_audio_codecs .
  7.  
  8. Имеется проблема среди пользователей Хрома с 35-й версией, а также браузера на основе этого движка, нервно сосут в сторонке из-за нечётного разрешения: https://code.google.com/p/chromium/issues/detail?id=379127 .
  9.  
  10. Для поиска соуса видео сохраняем кадр (правый клик по видео) и ищем его на http://images.google.com .
  11.  
  12. **О кодировании WebM**
  13. Доступные кодеки — VP8 (видео) и Vorbis или Opus (звук), максимально допустимый размер файла — 6144КБ.
  14.  
  15.  
  16. **Синтаксис аргументов ffmpeg**
  17. `ffmpeg [опции исходного файла] -i исходной_файл [[опции файла 2] -i файл2] [опции кодирования] выходной_файл`
  18. Все описываемые здесь параметры, если для них не указано иное, идут в опции кодирования.
  19. Фильтры видео: `-vf фильтр1=параметры,фильтр2,...`
  20. Выбор дорожек (потоков, выводятся при чтении файла в виде «Stream #0:0»): `-map 0:0 -map 0:1`
  21. Перезаписывать файл без предупреждения: `-y`
  22. При указании расширения webm по умолчанию используются Vorbis и VP8. Для VP9 следует добавить -c:v libvpx-vp9 -strict -2.
  23.  
  24.  
  25. Есть два метода контроля ширины потока: «Сжатие видео с фиксированным качеством» и «Подгонка под объём при максимальном качестве».
  26. **Сжатие видео с фиксированным качеством**
  27. В случае с небольшими фрагментами, для которых лимит 6МБ не страшен, следует использовать фиксированное качество (crf). Отрезаем фрагмент 20 секунд начиная с 10 минут:
  28. `ffmpeg -ss 10:00 -i video.mkv -t 20 -crf 30 -b:v 5m out.webm`
  29. Параметр -b:v (битрейт видео) при указании crf используется в роли максимального пикового битрейта. Значение crf может быть от 4 (максимальное для VP8 качество) до 60 (говно).
  30.  
  31. **Подгонка под объём при максимальном качестве**
  32. Допустим, нужно сконвертировать в WebM 2 минуты файла video.mkv начиная с 10 минут. Прикидываем разрешение — если движения в видео не слишком много, то можно взять 500 пикселей по ширине.
  33. Первым делом производим оценку сложности видео (она сохраняется в файл ffmpeg2pass-0.log) и заодно кодируем звук:
  34. `ffmpeg -ss 10:00 -i video.mkv -t 2:00 -vf scale=500:-1 -pass 1 out-a.webm`
  35. В последней строке вывода будет указан размер звуковой дорожки: audio:1532kB. Если получилось больше половины доступного объёма — нужно снижать качество звука, см ниже.
  36. Далее вычисляем битрейт по формуле `bitrate = (filesize - audio_size) * 8bit / time`. Для фрагмента 2 минуты это будет `(6144 - 1532)KiB * 8bit / 120sec = 307kbit/s`.
  37. Второй проход — кодируем видео и копируем звук из результата первого прохода:
  38. `ffmpeg -ss 10:00 -i video.mkv -i out-a.webm -map 0:v -map 1:a -t 2:00 -c:a copy -vf scale=500:-1 -b:v 307k -auto-alt-ref 1 -lag-in-frames 16 -quality best -pass 2 out.webm`
  39. Если размер вышел больше 6144КБ — значит, сработало ограничение минимального качества libvpx. Рекомендуется не играться с ним, а уменьшить разрешение или fps и повторить оба прохода.
  40. Многопоточность (параметр -threads) использовать не рекомендуется — она увеличивает размер видео.
  41.  
  42. **Звук**
  43. Доступно два аудиокодека — libvorbis и libopus. Opus обладает лучшим соотношением битрейт/качество, Vorbis поддерживается большим кол-вом браузеров.
  44. Внимание: если сделать звук моно, то в firefox он будет слышен только слева. Параметр ffmpeg для конвертации в стерео — `-ac 2`. Многоканальный звук работает в firefox с 29 версии.
  45. По умолчанию для webm используется libvorbis, для управления им обычно достаточно одной настройки: `-q:a <качество>`, где качество указывается числом от 0 (говно) до 9 (почти без потерь), по умолчанию — 2. Пример:
  46. `ffmpeg -i video.mkv -q:a 7 -ac 2 out.webm`
  47. Внимание: **libvorbis'у нельзя указывать фиксированный битрейт** (-b:a) — это сильно портит качество звука.
  48. Opus'у наоборот указывать битрейт необходимо, также для отключения ограничений старой версии формата webm нужно указать `-strict -2`:
  49. `ffmpeg -i video.mkv -c:a libopus -vbr on -application audio -b:a 48k -strict -2 -ac 2 out.webm`
  50. **Внимание:** ffmpeg неэффективно муксит Opus, итоговый файл получается на 10-20% больше, чем с mkvmerge.
  51.  
  52. **FPS**
  53. `ffmpeg -i video.mkv -r 30 out.webm`
  54. Значение фпс не следует брать с потолка — получится дёрганое говно. Можно взять исходное значение и поделить пополам.
  55.  
  56. **Добавление превью**
  57. Как превью используется первый кадр. Делаем видео с кадром из картинки и тишиной вместо звука, кодируя его с теми же параметрами, что и основное видео:
  58. `ffmpeg -i pic.jpg -filter_complex 'anullsrc [a]' -map 0:v -map '[a]' -shortest <параметры энкода видео> pic.webm`
  59. и склеиваем его с основным видео:
  60. `mkvmerge -w pic.webm + video.webm -o out.webm`
  61.  
  62. **Нарезка видео на фрагменты**
  63. `mkvmerge -w --split 6040k video.webm -o out.web` (получатся файлы out-001.webm и т.д).
  64.  
  65. **Наложение субтитров**
  66. `ffmpeg -i animu.mkv -ss 10:01 -t 30 -vf scale=500:-1,subtitles=animu.mkv -b:v 300k out.webm`
  67. или
  68. `mpv animu.mkv --start 10:01 --length 30 --vf scale=500:-2,sub --sub-pos 90 --sub-scale 1.3 --ovcopts b=300k -o out.webm`
  69. Как видно из параметров, mpv позволяет увеличивать субтитры (--sub-scale) и сдвигать их вверх (--sub-pos). Также mpv берёт сабы автоматически из контейнера или из файла с совпадающем с видео именем, а для ffmpeg требуется указание файла.
  70. При этом mpv пока не пригоден для двухпроходного кодирования с указанием среднего битрейта, а для ffmpeg в щиндовсе нужно настраивать fontconfig: https://github.com/AlsaAsksMiley/webm-thread-misc/blob/master/Fontconfig_and_subs.txt
  71. Внимание: параметр -ss ffmpeg'а следует указывать после входного файла — иначе тайминг субтитров будет считаться от начала фрагмента.
  72. В git-версии фильтр subtitles ffmpeg'а научился брать шрифты из контейнера и понимать параметр si (номер потока с нужными сабами), коммиты 7e6b3ad и 7a0e689.
  73.  
  74. **Ссылки**
  75. Программы и их документация: http://ffmpeg.org , http://mpv.io , http://www.bunkus.org/videotools/mkvtoolnix/ .
  76. Скрипт для удобного вырезания фрагментов в mpv (выводит заготовки команд с временем с точностью до кадра и битрейтом, скриншот: http://rghost.ru/55038013/image.png): http://pastebin.com/q6MTsKQ4 .
  77. Функция вычисления битрейта видео по длительности для zsh: http://pastebin.com/W92txUbZ
  78. Гуй с минимумом кнопок для ретардов (сперма-only): https://github.com/WebMBro/WebMConverter/releases .
  79.  
  80. Текст поста: http://pastebin.com/5TMzCwED
  81. При перекате ищите в обновлениях данной пасты на другой WebM-тред.
Advertisement
Add Comment
Please, Sign In to add comment