2017-04-30 209 views
0

我使用drawtext在動畫GIF上打印一些文本。FFMpeg的文字寬度?

一切正常,但我無法指定邊界框並進行文本換行。

我目前使用這樣的:

ffmpeg -i image.gif -filter_complex "drawtext=textfile=text.txt:x=main_w/2 - text_w/2:y=main_h/2 - text_h/2:fontfile=Roboto-Regular.ttf:fontsize=24:fontcolor=000000" image_out.gif 

有沒有辦法來包裝的文字?

+0

我會改用字幕。本網站上有大量[示例](http://stackoverflow.com/a/21369850/1109017),或者查看[documentation](https://ffmpeg.org/ffmpeg-filters.html#subtitles)和[FFmpeg wiki] (https://trac.ffmpeg.org/wiki/HowToBurnSubtitlesIntoVideo)。如果您必須使用drawtext,那麼只需在您的'text.txt'中添加換行符。 – LordNeckbeard

+0

我明白了。但是,這可以讓我有文字換行嗎?我沒有看到使用字幕而不是快速查看文檔的任何優勢。 – nbrogi

+0

是的,字幕會自動包裝文字。 – LordNeckbeard

回答

2

您可以使用FFmpeg subtitles filter進行自動換行並將文本放在中間的中間位置。

有很多字幕格式,但這個答案有ASS和SRT字幕的例子。 ASS支持更多格式化選項,但SRT格式更簡單,可以使用字幕過濾器中的force_style選項進行修改。

enter image description here

ASS字幕

讓你的字幕Aegisub。點擊看起來像粉紅色「S」的按鈕打開樣式管理器。點擊修改。選擇對齊值5.將字幕文件保存爲ASS格式。

ffmpeg例如:

ffmpeg -i input -filter_complex subtitles=subs.srt -c:a copy output 

SRT字幕

SRT比ASS簡單,但缺乏的功能,所以你可能需要使用force_style選項,在字幕過濾器。您可以使用文本編輯器製作這些字幕。例如SRT文件:

1 
00:00:00,000 --> 00:00:05,000 
Text with 
manual line break 
and with automatic word wrapping of long lines. 

2 
00:00:07,000 --> 00:00:10,000 
Another line. Displays during 7-10 seconds. 

ffmpeg例如:

ffmpeg -i input -filter_complex "subtitles=subs.srt:force_style='Alignment=10,Fontsize=24'" -c:a copy output 
  • 更多force_style選項看在ASS文件的內容的Styles部並且是指ASS Tags

  • 在這種情況下,Alignment正在使用legacy line position numbers,但上面的ASS示例使用現代的「數字鍵盤」數字系統。

+0

謝謝。我希望ASS格式支持UTF-8,但是它的工作原理。 – nbrogi

+0

...你知道是否有任何方法來指定字體目錄,甚至只是字體的子目錄應該在? – nbrogi

+0

@nbrogi在'force_style'中,你可以使用類似'Fontname = Arial'的東西,或者在SRT中使用類似於' Foo'(未測試), 或者只選擇Aegisub中的字體。 – LordNeckbeard