AnswerBun.com

FFmpeg hardcoded subtitles revert to default font if subtitle is html

Video Production Asked by d9ngle on January 4, 2022

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                                            

One Answer

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.

Answered by llogan on January 4, 2022

Add your own answers!

Related Questions

what is the best software that can crop and trim video?

2  Asked on October 28, 2021 by talad88955

   

How to put your GPS track in a video?

2  Asked on October 28, 2021 by daniel-ferreira-castro

     

how to change video size in Final Cut Pro

1  Asked on October 28, 2021 by bsm

 

How to quick select PNG image for masking in After Effects?

1  Asked on October 28, 2021 by oleksandr-osheko

   

How to filter out footage into one clip

1  Asked on February 19, 2021 by sanchez

     

Can’t apply transition effect between clips in Premiere Pro

3  Asked on February 16, 2021 by gerlof-leuhof

   

Extract audio from a multichannel video file

1  Asked on February 9, 2021 by yannis

   

Budget Mandalorian backgrounds

1  Asked on January 30, 2021 by tomh

   

How to read audio waveforms in NLE

0  Asked on January 28, 2021 by 5diraptor

     

Fix mp3float Header missing without re-encode

1  Asked on January 27, 2021 by malat

   

Ask a Question

Get help from others!

© 2023 AnswerBun.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP