0

Here's how I'm using ffmpeg to hardcode the subtitles:

ffmpeg -i tmp/input.mp4 -vf "subtitles=tmp/input.mp4:force_style='OutlineColour=&H80000000,BorderStyle=3,Outline=1,Shadow=0,MarginV=20,Fontname=Liberation Mono'" -avoid_negative_ts make_zero tmp/output.mp4

which works fine if the subtitle is plain text but if it has html tags in it, then it reverts back to using system's default font. <i> hello </i> for example causes problem.

I've tried cleaning up html tags and then using -vf "subtitles=cleanedsubs.srt:..." but it doesn't work even on plain texts.

How can I force same font even on italic / bold / any other forms?

Extra info

Running:

ffmpeg -i tmp/input.mp4 -filter_complex "subtitles=tmp/input.mp4:force_style='fontname=Liberation Mono'" -f null -

Shows:

[Parsed_subtitles_0 @ 0x55ad579abd00] Using font provider fontconfig
Stream mapping:
  Stream #0:1 (h264) -> subtitles (graph 0)
  subtitles (graph 0) -> Stream #0:0 (wrapped_avframe)
  Stream #0:0 -> #0:1 (aac (native) -> pcm_s16le (native))
Press [q] to stop, [?] for help
[Parsed_subtitles_0 @ 0x55ad579aa3c0] Shaper: FriBidi 0.19.7 (SIMPLE) HarfBuzz-ng 1.7.2 (COMPLEX)
[Parsed_subtitles_0 @ 0x55ad579aa3c0] Using font provider fontconfig
[Parsed_subtitles_0 @ 0x55ad579aa3c0] fontselect: (Liberation Mono, 400, 0) -> /usr/share/fonts/truetype/liberation/LiberationMono-Regular.ttf, 0, LiberationMono
[Parsed_subtitles_0 @ 0x55ad579aa3c0] fontselect: (Liberation Mono, 400, 100) -> /usr/share/fonts/truetype/liberation/LiberationMono-Italic.ttf, 0, LiberationMono-Italic
[Parsed_subtitles_0 @ 0x55ad579aa3c0] fontselect: (Serif, 400, 100) -> /usr/share/fonts/truetype/dejavu/DejaVuSerif-Italic.ttf, 0, DejaVuSerif-Italic
                                                    ↑                                  
                                                 problem                                            
10
  • @llogan pasted it here for you. shrib.com/#4Ob98Ubhyox1j-Re0aOw – d9ngle Oct 25 '19 at 18:29
  • this in unclean version btw, did you want cleaned one? – d9ngle Oct 25 '19 at 18:30
  • Yes, I have /usr/share/fonts/truetype/liberation2/LiberationMono-Italic.ttf: Liberation Mono:style=Italic if I do fc-list – d9ngle Oct 25 '19 at 18:49
  • @llogan shrib.com/#nFdK5.1WnlQDQ82sS0Z- – d9ngle Oct 25 '19 at 18:55
  • Yes, yours look correct. What should I do? – d9ngle Oct 25 '19 at 19:28
0

Possible bug when feeding mov_text to subtitles filter. I can reproduce the issue in git master branch. I did not investigate further.

Workaround is to provide the subtitles filter the SRT subtitle stream present in your original MKV input (file.mkv):

ffmpeg -i file.mkv -map 0:a:0 -map 0:v -c:v libx264 -c:a aac -vf "subtitles=file.mkv:stream_index=6:force_style='OutlineColour=&H80000000,BorderStyle=3,Outline=1,Shadow=0,MarginV=20,Fontname=Liberation Mono'" output.mp4

Make sure stream_index is referencing the desired subtitle stream. See subtitles filter documentation.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.