Описывается here как записать файл srt в видео. Тем не менее, я хочу поместить полупрозрачный фон в субтитры, чтобы тексты могли быть прочитаны более легко. Как я могу это сделать?Как установить фон для субтитров в ffmpeg?
ответ
Создайте png с прозрачной коробкой и альфа-каналом в вашем предпочтительном размере. Вы можете использовать, например. gimp или фотошоп.
Затем используйте следующую команду:
ffmpeg -i video.mp4 -i logo.png -filter_complex "[0:v][1:v]overlay=10:10" \
-codec:a copy out.mp4
где 10:10 расстояние от верхнего левого угла.
После этого вы можете вставлять свои субтитры.
ASS субтитры могут иметь полупрозрачный фон для текста.
С Aegisub
Самый простой способ сделать это с aegisub.
- Откройте ваши субтитры файл с Aegisub.
- Нажмите
Subtitle
→Styles manager
. - Под
Current Script
выберитеDefault
, а затем нажмите кнопкуEdit
. - Эксперимент с значениями
Outline
иShadow
. ПроверьтеOpaque box
. - Под
Colors
нажмите цвет подOutline
илиShadows
. Появится окно. Отрегулируйте значение поляAlpha
, чтобы изменить прозрачность. - Сохраните субтитры как файл
.ass
.
Теперь вы можете использовать файл AAS для создания hardsubs or softsubs with ffmpeg
.
Без Aegisub
Если вы хотите хардсабов вы можете использовать subtitles filter добавить прозрачный фон с возможностью force_style
.
ffmpeg -i input -filter_complex "subtitles=subs.ass:force_style='OutlineColour=&H80000000,BorderStyle=3,Outline=1,Shadow=0,MarginV=20'" output
Это будет работать с любым текстом на основе субтитров, поддерживаемых FFmpeg, поскольку фильтр автоматически преобразует их в АСС.
См. SubStation Alpha (ASS) style fields для вариантов форматирования.
Проблема с несколькими линиями
Если ваши субтитры содержат несколько строк, из-за автоматическую упаковку длинных линий или преднамеренный разрыв линии, фоны будут перекрываться и потенциально выглядеть некрасиво, как показано ниже:
Вы можете избежать этого:
- Изменение размеров
Outline
иShadow
до0
. - Настройки альфы в тени будут контролировать прозрачность фона. Нажмите на цвет тени, чтобы настроить цвет теней
Alpha
на желаемый уровень прозрачности. Редактировать файл ASS в текстовом редакторе. В строке
Style
измените значение, соответствующееBorderStyle
, на4
. Это заполнит фон рамки для каждого события субтитров. ПримерStyle
линия:Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H80000000,&H80000000,-1,0,0,0,100,100,0,0,4,0,0,2,10,10,10,1
Пример:
Обратите внимание, что BorderStyle=4
является нестандартным значением, поэтому он не может работать должным образом во всех игроках.
Благодаря sup и WM4 для BorderStyle
предложение.
Использование drawbox
The drawbox filter может быть использован для создания фона окна. Это может быть полезно, если вы хотите, чтобы ящик имел ширину.
ffmpeg -i input -filter_complex "drawbox=w=iw:h=24:y=ih-28:t=max:[email protected],subtitles=subs.ass" output
Даунсайд является то, что вы должны учитывать разрывы строк или перенос слов для длинных субтитров. Просто сделать коробку выше для компенсации будет достаточно, но будет выглядеть уродливым, потому что базовый уровень субтитров остается статичным: в однострочных субтитрах будет больше отступов сверху, чем внизу.
Это оставляет неприятную линию там в случае двухстрочных субтитров. Есть ли способ избавиться от этого? – sup
@sup Не знаю, что я знаю. Альтернативным методом было бы сделать статический прозрачный блок с использованием фильтра [drawbox] (http://ffmpeg.org/ffmpeg-filters.html#drawbox), но это тоже не идея. – LordNeckbeard
@ LordNeckbeard человек ты спас мне жизнь! Отлично! Работает как шарм !! Нет необходимости в adobe encore, adobe premiere и все, что платит, что не может сделать такие простые вещи, как это! – eusoubrasileiro
Был ли тот же вопрос, нет хорошего ответа. Видимо ffmpeg
(и avconv
знают, как применить ass
форматирование srt
как это:.
avconv -i in.mp4 -vf "subtitles=subtemp.sub.0.sub:force_style='Name=Default,Fontname=Arial,Fontsize=28,PrimaryColour=&Hffffff,SecondaryColour=&Hffffff,OutlineColour=&H44000000,BackColour=&H0,BorderStyle=3,Shadow=0'" out.mp4
(замена avconv
с ffmpeg
должен работать, или близко к нему)
Дальнейшее чтение о ass
, в частности, то, что кажется Вещество - BackColour
и BorderStyle
.
Вы можете использовать сценарий this Aegisub. Этот скрипт автоматически генерирует прозрачный фон для каждой строки субтитров.
Если вы хотите сделать это «сделать отдельный фон ящик» метод было бы проще и эффективнее всего использовать [drawbox] (https://ffmpeg.org/ffmpeg-filters.html #drawbox). Кроме того, использование фильтров, таких как наложение или рисование, потребует повторного кодирования видео, но использование субтитров ASS для программных модулей, как показано в моем ответе, не будет изменять видео. – LordNeckbeard