View difference between Paste ID: RPsVh33u and vwT5CSyG
SHOW: | | - or go back to the newest paste.
1
!!Не забываем про заголовок поста!!
2
3
Тред техподдержки: http://2ch.hk/s/res/978430.html
4
Бугурт анимухейтеров: http://2ch.hk/d/res/144620.html
5
6
Если браузер вместо воспроизведения отдельных видео ругается на повреждённый видеофайл, либо не воспроизводит звук —  он скорее всего не может в Opus. См. http://en.wikipedia.org/wiki/HTML5_Audio#Supported_audio_codecs.
7
8
Для поиска соуса видео сохраняем кадр (правый клик по видео) и ищем его на http://images.google.com.
9
10
**О кодировании WebM**
11
Доступные кодеки — VP8 (видео) и Vorbis или Opus (звук), размер файла — 6144КБ.
12
VP9 не поддерживается.
13
14-
Есть два метода контроля ширины потока: фиксированное качество (1) и подгонка под объём (2).
14+
**Синтаксис аргументов ffmpeg**
15-
**1.** В случае с небольшими фрагментами, для которых лимит 6МБ не страшен, следует использовать фиксированное качество (crf). Отрезаем фрагмент 20 секунд начиная с 10 минут:
15+
`ffmpeg [опции исходного файла] -i исходной_файл [[опции файла 2] -i файл2] [опции кодирования] выходной_файл`
16
Все описываемые здесь параметры, если для них не указано иное, идут в опции кодирования.
17
Фильтры видео: `-vf филтр1=параметры,фильтр2,...`
18
Выбор дорожек (потоков, выводятся при чтении файла в виде «Stream #0:0»): `-map 0:0 -map 0:1`
19-
**2.** Допустим, нужно сконвертировать в WebM 2 минуты файла video.mkv начиная с 10 минут.
19+
20
**Сжатие видео с фиксированным качеством**
21
В случае с небольшими фрагментами, для которых лимит 6МБ не страшен, следует использовать фиксированное качество (crf). Отрезаем фрагмент 20 секунд начиная с 10 минут:
22
`ffmpeg -ss 10:00 -i video.mkv -t 20 -crf 30 -b:v 5m out.webm`
23
Параметр -b:v (битрейт видео) при указании crf используется в роли максимального пикового битрейта. Значение crf может быть от 1 (почти лосслесс) до 60 (говно).
24
 
25
**Запихивание максимального качества в указанный объём**
26
Допустим, нужно сконвертировать в WebM 2 минуты файла video.mkv начиная с 10 минут.
27
Рекомендуемый метод кодирования для достижения максимального качества при ограниченном объёме — два прохода с указанием среднего битрейта. Первым делом вычисляем битрейт по формуле `bitrate = filesize * 8bit / time - audio_bitrate`. По умолчанию битрейт аудио получается около 128кбит/с. Для фрагмента 2 минуты это будет `6144KiB * 8bit / 120sec - 128kbit/s = 281kbit/s`.
28
Далее прикидываем разрешение видео, оценивая битрейт и насыщенность фрагмента движением. В битрейт 281кбит/с в среднем влазит широкоэкранное видео шириной 500 пикселей. 
29
Первый проход (без звука, проход нужен только для оценки сложности кодирования видео для оптимального распределения битрейта):
30
`ffmpeg -ss 10:00 -i video.mkv -t 2:00 -vf scale=500:-1 -b:v 281k -auto-alt-ref 1 -lag-in-frames 20 -an -pass 1 out.webm`
31-
Внимание: если сделать звук моно, то в firefox он будет слышен только слева. Параметр ffmpeg для конвертации в стерео — `-ac 2`.
31+
32
`ffmpeg -ss 10:00 -i video.mkv -t 2:00 -vf scale=500:-1 -b:v 281k -auto-alt-ref 1 -lag-in-frames 20 -quality best -pass 2 out.webm`
33
Если размер вышел больше 6144КБ — значит, сработало ограничение минимального качества libvpx. Рекомендуется не играться с ним, а уменьшить разрешение и повторить оба прохода, либо битрейт и повторить только второй.
34
Многопоточность (параметр -threads) использовать не рекомендуется — она увеличивает размер видео.
35
36
**Звук**
37
Для высоких битрейтов (112кбпс и выше) следует применять libvorbis, для низких — opus.
38
Внимание: если сделать звук моно, то в firefox он будет слышен только слева. Параметр ffmpeg для конвертации в стерео — `-ac 2`. Многоканальный звук работает в firefox с 29 версии. 
39
По умолчанию для webm используется libvorbis, для управления им обычно достаточно одной настройки: `-q:a <качество>`, где качество указывается числом от 0 (говно) до 9 (почти без потерь), по умолчанию — 2. Пример:
40
`ffmpeg -i video.mkv -q:a 7 -ac 2 out.webm`
41
Внимание: **libvorbis'у нельзя указывать фиксированный битрейт** (-b:a) — это сильно портит качество звука.
42
Opus'у наоборот указывать битрейт необходимо, также для отключения ограничений старой версии формата webm нужно указать `-strict -2`:
43
`ffmpeg -i video.mkv -c:a libopus -vbr on -application audio -b:a 48k -strict -2 -ac 2 out.webm`
44
45
**FPS**
46
`ffmpeg -i video.mkv -r 30 out.webm`
47
Значение фпс не следует брать с потолка — получится дёрганое говно. Можно взять исходное значение и поделить пополам.
48
49
**Добавление превью**
50
Как превью используется первый кадр. Делаем видео с кадром из картинки и тишиной вместо звука, кодируя его с теми же параметрами, что и основное видео:
51
`ffmpeg -i pic.jpg -filter_complex 'anullsrc [a]' -map 0:v -map '[a]' -shortest <параметры энкода видео> pic.webm`
52
и склеиваем его с основным видео:
53
`mkvmerge pic.webm + video.webm -o out.webm`
54
55
**Нарезка видео на фрагменты**
56
Если нужно запостить большой кусок видео несколькими частями — рекомендуется сжать его двумя проходами целиком, а потом порезать, так битрейт распределится по объёму оптимальнее. Нарезка:
57
`mkvmerge --split 6040k video.webm -o out.webm` (получатся файлы out-001.webm и т.д).
58
6040k — позиция файла, после которой по первому встретившемуся ключевому кадру происходит разбивка. Если какой-то фрагмент получился слишком большим — её следует уменьшить.
59
60
**Наложение субтитров**
61
`ffmpeg -i animu.mkv -ss 10:01 -t 30 -vf scale=500:-1,subtitles=animu.mkv -b:v 300k out.webm`
62
или
63
`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`
64
Как видно из параметров, mpv позволяет увеличивать субтитры (--sub-scale) и сдвигать их вверх (--sub-pos). Также mpv берёт сабы автоматически из контейнера или из файла с совпадающем с видео именем, а для ffmpeg требуется указание файла. При этом mpv пока не пригоден для двухпроходного кодирования с указанием среднего битрейта, а для ffmpeg в щиндовсе нужно настраивать fontconfig: http://pastebin.com/BvfMSBXn. Внимание: параметр -ss ffmpeg'а следует указывать после входного файла — иначе тайминг субтитров будет считаться от начала фрагмента.
65
В git-версии фильтр subtitles ffmpeg'а научился брать шрифты из контейнера и понимать параметр si (номер потока с нужными сабами), коммиты 7e6b3ad и 7a0e689.
66
67
**Обрезка чёрных полос**
68
`ffmpeg -i video.mkv -vf cropdetect out.webm` (автоматически)
69
`ffmpeg -i video.mkv -vf crop=ширина:высота:x:y out.webm` (руками)
70
71
**Ссылки**
72
Программы и их документация: http://ffmpeg.org, http://mpv.io, http://www.bunkus.org/videotools/mkvtoolnix/.
73
Скрипт для удобного вырезания фрагментов в mpv (выводит заготовки команд с временем с точностью до кадра и битрейтом, скриншот: http://rghost.ru/55038013/image.png): http://pastebin.com/q6MTsKQ4.
74
Функция вычисления битрейта видео по длительности для zsh: http://pastebin.com/W92txUbZ
75
Гуй с минимумом кнопок для ретардов (сперма-only): https://github.com/WebMBro/WebMConverter/releases.
76
77
Шаблон оп-пика (GIMP): http://rghost.ru/54684885
78
Текст поста: !!ссылка на этот текст!!
79
При перекате ищите обновления пасты в ответах на этот пост.