2014-09-16 1 views

ответ

4

Создайте 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 расстояние от верхнего левого угла.

После этого вы можете вставлять свои субтитры.

+0

Если вы хотите сделать это «сделать отдельный фон ящик» метод было бы проще и эффективнее всего использовать [drawbox] (https://ffmpeg.org/ffmpeg-filters.html #drawbox). Кроме того, использование фильтров, таких как наложение или рисование, потребует повторного кодирования видео, но использование субтитров ASS для программных модулей, как показано в моем ответе, не будет изменять видео. – LordNeckbeard

10

Using ASS subtitles to create opaque text background

ASS субтитры могут иметь полупрозрачный фон для текста.

С Aegisub

Самый простой способ сделать это с aegisub.

enter image description here

  1. Откройте ваши субтитры файл с Aegisub.
  2. Нажмите SubtitleStyles manager.
  3. Под Current Script выберите Default, а затем нажмите кнопку Edit.
  4. Эксперимент с значениями Outline и Shadow. Проверьте Opaque box.
  5. Под Colors нажмите цвет под Outline или Shadows. Появится окно. Отрегулируйте значение поля Alpha, чтобы изменить прозрачность.
  6. Сохраните субтитры как файл .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 для вариантов форматирования.

Проблема с несколькими линиями

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

enter image description here

Вы можете избежать этого:

  1. Изменение размеров Outline и Shadow до 0.
  2. Настройки альфы в тени будут контролировать прозрачность фона. Нажмите на цвет тени, чтобы настроить цвет теней Alpha на желаемый уровень прозрачности.
  3. Редактировать файл 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 
    

Пример:

enter image description here

Обратите внимание, что BorderStyle=4 является нестандартным значением, поэтому он не может работать должным образом во всех игроках.

Благодаря sup и WM4 для BorderStyle предложение.

Использование drawbox

The drawbox filter может быть использован для создания фона окна. Это может быть полезно, если вы хотите, чтобы ящик имел ширину.

enter image description here

ffmpeg -i input -filter_complex "drawbox=w=iw:h=24:y=ih-28:t=max:[email protected],subtitles=subs.ass" output 

Даунсайд является то, что вы должны учитывать разрывы строк или перенос слов для длинных субтитров. Просто сделать коробку выше для компенсации будет достаточно, но будет выглядеть уродливым, потому что базовый уровень субтитров остается статичным: в однострочных субтитрах будет больше отступов сверху, чем внизу.

+2

Это оставляет неприятную линию там в случае двухстрочных субтитров. Есть ли способ избавиться от этого? – sup

+1

@sup Не знаю, что я знаю. Альтернативным методом было бы сделать статический прозрачный блок с использованием фильтра [drawbox] (http://ffmpeg.org/ffmpeg-filters.html#drawbox), но это тоже не идея. – LordNeckbeard

+0

@ LordNeckbeard человек ты спас мне жизнь! Отлично! Работает как шарм !! Нет необходимости в adobe encore, adobe premiere и все, что платит, что не может сделать такие простые вещи, как это! – eusoubrasileiro

-1

Был ли тот же вопрос, нет хорошего ответа. Видимо ffmpegavconv знают, как применить 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.

0

Вы можете использовать сценарий this Aegisub. Этот скрипт автоматически генерирует прозрачный фон для каждой строки субтитров.

Subtitle transparent background