MyTetra Share
Делитесь знаниями!
Запекание субтитров в FFMPEG с несколькими фильтрами
Время создания: 22.09.2021 00:19
Текстовые метки: ffmpeg, субтитры, титры, srt, запекание, впечатывание, поверх, фильтр
Раздел: Компьютер - Linux - Видео - FFmpeg
Запись: xintrea/mytetra_syncro/master/base/1632259155lt4zdz8oee/text.html на raw.github.com

Чтобы "запечь" субтитры в видео в виде изображений надписей поверх картинки, можно воспользоваться следующими способом.


Во-первых, надо проверить, чтобы ffmpeg был собран с поддержкой библиотеки libass, которая отвечает за рендеринг субтитров. Сделать это можно путем запуска команды ffmpeg без параметров. В ответ будет показана информация о ffmpeg:



> ffmpeg

ffmpeg version 4.1.6 Copyright (c) 2000-2020 the FFmpeg developers

built with gcc 8 (Debian 8.3.0-6)

configuration: --disable-decoder=amrnb --disable-decoder=libopenjpeg --disable-libopencv --disable-outdev=sdl2 --disable-podpages --disable-sndio --disable-stripping --enable-libaom --enable-avfilter --enable-avresample --enable-gcrypt --disable-gnutls --enable-openssl --enable-gpl --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libfdk-aac --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libilbc --enable-libkvazaar --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenh264 --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libzimg --enable-libxvid --enable-libzvbi --enable-nonfree --enable-opencl --enable-opengl --enable-postproc --enable-pthreads --enable-shared --enable-version3 --enable-libwebp --incdir=/usr/include/x86_64-linux-gnu --libdir=/usr/lib/x86_64-linux-gnu --prefix=/usr --toolchain=hardened --enable-frei0r --enable-chromaprint --enable-libx264 --enable-libiec61883 --enable-libdc1394 --enable-vaapi --enable-libmfx --enable-libvmaf --disable-altivec --shlibdir=/usr/lib/x86_64-linux-gnu

libavutil 56. 22.100 / 56. 22.100

libavcodec 58. 35.100 / 58. 35.100

libavformat 58. 20.100 / 58. 20.100

libavdevice 58. 5.100 / 58. 5.100

libavfilter 7. 40.101 / 7. 40.101

libavresample 4. 0. 0 / 4. 0. 0

libswscale 5. 3.100 / 5. 3.100

libswresample 3. 3.100 / 3. 3.100

libpostproc 55. 3.100 / 55. 3.100

Hyper fast Audio and Video encoder

usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...



Если в строке configuration имеется пункт --enable-libass, то значит ffmpeg собран с поддержкой libass, и запекание субтитров будет работать.


За наложение субтитров виде картинки отвечает видеофильтр subtitles. В качестве первого параметра ему можно указывать файл, из которого необходимо субтитры брать. Помимо фильтра субтитров можно указывать и другие фильтры, например фильтр изменения размера видео. Фильтры применяются по цепочке, друг за другом.



Кстати, ffmpeg не поймет, если ему дать несколько опций -vf с разными фильтрами. ffmpeg понимает только одну опцию -vf, в которой фильтры перечислены через запятую. Чтобы это было возможным, весь перечень фильтров заключают в двойные кавычки. Для имен файлов, внутри двойных кавычек можно использовать одинарные кавычки (апострофы).


Если ошибиться или по незнанию пытаться сделать несколько опций -vf, то будет применен только последний фильтр. Но никаких сообщений об ошибке, что фильтры заданы неправильно, ffmpeg не покажет. Поэтому итоговый результат может отличаться от желаемого, а причина будет неочевидна.



Итоговая команда для запекания субтитров может выглядеть так:



ffmpeg -i input.avi

-vf "subtitles='../subtitle/subtitle_15.srt', scale=1280:720"

-c:v libx264

-preset slow

-crf 12

-threads 8

-c:a copy

output.avi



Еще раз: этот метод отличается от метода, когда субтитры просто добавляются в "текстовом" виде в виде потока, и во время воспроизведения рендерятся самим видеоплеером.


Так же в этом разделе:
 
MyTetra Share v.0.58
Яндекс индекс цитирования