жестко закодированные субтитры ffmpeg сверху, крупнее, с более толстой обводкой, на темном фоне

Я нашел эту страницу (я не могу комментировать или отвечать там, поэтому вот новый вопрос):

Визуализировать srt субтитры к видео?

с этой строкой, которая отлично работает:

ffmpeg -i input.mp4 -filter:v subtitles=subtitle.srt -c:a copy -c:v libx264 -crf 22 -preset veryfast output.mp4

Мне нужно следующее и я не могу это сделать:

  • строки субтитров начинаются с ВЕРХА холста
  • субтитры имеют больший размер символов и более толстый штрих
  • область субтитров имеет полупрозрачный темный фон

mencoder может быть еще одним жизнеспособным способом сделать это.

Ответы (1)

Эгисуб

Используйте субтитры ASS. Стилизуйте их в Aegisub . Вы можете стилизовать каждую букву или слово отдельно или применить желаемый стиль ко всем субтитрам. Подробные инструкции см. в документации .

введите описание изображения здесь

Пример файла ASS:

[Script Info]
; Script generated by Aegisub 3.2.2
; http://www.aegisub.org/
Title: Default Aegisub file
ScriptType: v4.00+
WrapStyle: 0
ScaledBorderAndShadow: yes
YCbCr Matrix: None

[Aegisub Project Garbage]
Last Style Storage: Default

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,48,&H00FFFFFF,&H000000FF,&H00000000,&H80000000,0,0,0,0,100,100,0,0,1,6,0,8,10,10,20,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.00,0:00:05.00,Default,,0,0,0,,Top of canvas. Bigger font size. Thicker stroke.

Без Эгисуба

Вы можете применить стиль с помощью опции фильтра субтитров в . Это должно работать с любым форматом, который принимает фильтр субтитров.force_styleffmpeg

ffmpeg -i input -vf "subtitles=subs.srt:force_style='Alignment=6,Fontsize=48,Outline=8'" output

Обратитесь к примеру файла ASS для допустимых force_styleопций, но он не позволит вам стилизовать каждую букву или слово по отдельности, как в Aegisub.

Обратите внимание, что значения ScaleXи ScaleYпри использовании force_styleявляются коэффициентом, а не процентом, поэтому в этом случае точными значениями будут 1,1(не 100,100).

Прозрачный фон

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

Спасибо @LordNeckbeard!!! Я использовал Aegisub 3.2.2 в Ubuntu Linux для создания этих субтитров без превышения скорости чтения 15 cps. Я покопаюсь в его документах. С этой страницы о стилях и Highlights на первый взгляд мне кажется, что я не могу отображать видео с жестко закодированными субтитрами, используя только Aegisub, не так ли? Пока я продолжал использовать формат SubRip .srt и применил вашу подсказку к ffmpeg, отлично!
Это 720p, и я использовал эту строку: ffmpeg -i input.mp4 -vf "subtitles=subs.srt:force_style='Alignment=6,Fontsize=22,Outline=2'" -c:a copy -c:v libx264 -crf 22 -preset slower output_Alignment_6_Fontsize_22_Outline_2___slower.mp4(Отдельный комментарий, потому что в противном случае это было бы слишком долго, платформа не позволяла. Думаю, я должен «принять» ваш ответ, но пока не вижу, как это сделать.)
не могли бы вы указать мне исчерпывающую документацию о том, как использовать опцию force_style? Я могу только найти примеры здесь и там в Интернете, например, без объяснения параметров выравнивания (попробовал 7 из любопытства, и это вверху справа). Еще раз БОЛЬШОЕ СПАСИБО! (Я пытался проголосовать за ваш ответ, платформа говорит, что он записывается, но не виден публике, потому что у меня недостаточно репутации... может быть, именно поэтому я не нахожу кнопки или ссылки, чтобы «принять» ваш ответ , я надеюсь, вы не будете возражать, извините.)
@JazzTp Я не уверен, что вы можете использовать Aegisub в одиночку для хардсаба, и лень не позволяет мне его найти. Я использовал его только для создания файлов субтитров. Выравнивание описано в разделе «Выравнивание линии» (см . теги \aи ). кажется, использует устаревшее позиционирование ( ), которое имеет меньше смысла, чем более современная система позиционирования «цифровая клавиатура» ( ). Только документация находится в документах фильтра субтитров, на которые я ссылался в ответе, но страница ASS Tags поможет. \anforce_style\a\an-force_style
Еще раз спасибо @LordNeckbeard все ясно (впечатляющие возможности с форматом Advanced Substation Alpha).
force_style реализует только теги, установленные для каждого стиля в разделе INI файла ASS.
Это работало с форматом ASS: ffmpeg -i input.mp4 -vf "subtitles=subs.ass" -c:a copy -c:v libx264 -crf 22 -preset slower output_subsASS_Alignment_8_Font_Arial_55_Outline_5.0___slower.mp4- Спасибо, @Gyan, я только что увидел ваш комментарий (который, честно говоря, я еще не совсем понял), когда пришел сюда, чтобы добавить этот.
Пример с форматом srt, где исходное видео нуждалось в масштабировании, потому что оно было слишком низким, чтобы нести текст субтитров в приличном разрешении:ffmpeg -i input.mp4 -vf "scale=1080x720,subtitles=subs.srt:force_style='Alignment=2,Fontsize=22,Outline=2'" -c:a copy -c:v libx264 -crf 22 -preset slower output_1080x720_Alignment_2_Fontsize_22_Outline_2___slower.mp4
Интересно, что шрифты получаются больше при использовании одного и того же размера шрифта в параметре force_style по сравнению с использованием в Pinta (графический редактор Ubuntu). Любые мысли о том, почему это так?
@RoelVandePaar Никогда не слышал о Пинте. Возможно, разница в размере шрифта (пиксели, пики и точки).