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