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