

FFmpegのdrawtextで字幕を動画に表示していますが、改行し複数行の表示を行うには、どのようにコードを書けばよいのか、悩んでおります。エスケープで
/r/n で出来るような記述がありましたが、実際のコードの書き方がよくわかりません。実装経験等ある人がいましたら、ご教授ください。よろしくお願いします。


CC BY-SA 4.0
2019-05-30T07:13:57.460
55365
2023-03-31T08:06:20.697
34530
question
ffmpeg
FFmpegの字幕で改行し複数行の表示を行いたい


こちら [文字を描写する drawtext | ニコラボ](https://nico-lab.net/drawtext_with_ffmpeg/)
にファイルで指定するのが手軽(上の方にWindowsでは、の但し書きあり)、とあります。

>   * textfile[string]  
>  描写するテキストファイルのパスを指定。text と併用できない。文字コードは UTF-8 でなければならない。改行する場合はこちらの方が手軽
>

ただし、行間のスペースを制御する方法は無いようです。  
2012年5月の質問なので変わっているかもしれませんが。

[Control spacing between multiple lines with drawtext
filter](http://www.ffmpeg-archive.org/Control-spacing-between-multiple-lines-
with-drawtext-filter-td4609421.html#a4612053)

> ビデオに複数行のテキストを描画するためにdrawtextフィルタを使用しようとしています。  
>  しかし、行の間隔が狭すぎる、実際には間隔はゼロのように見えます。  
>  誰かこのフィルタで行間隔を制御する方法を知っていますか？

コメント：

> 現在そのようなパラメータはありません。 パッチは大歓迎です。  
>  回避策として、2つの個別のdrawtextフィルタを介してソースビデオを渡し、フィルタインスタンスごとに1行を書き込むことができます。

* * *

上記回避策と類似で、ファイルではなくtextで[in][out]タグとカンマを使って2行分の指定を行う方法があるようです。

[FFmpeg drawtext over multiple
lines](https://stackoverflow.com/q/8213865/9014308)

答：

>
> この答えはおそらくあなたには少し遅いですが、[in]タグを使用し、コンマを使用して各ドローテキストをリストすることによって、1つのファイルに複数のドローテキストを指定することができます。  
>  これにより、各ドローテキストをそれぞれの配置方法で方向付ける場合に、複数行を使用することができます。  
>  あなたの例では、コマンドラインは次のようになります。 （最初の行を画面の中央に配置し、それ以降の各行を25ピクセル下に配置します）。
[code]

>     ffmpeg -i test_in.avi -vf
> "[in]drawtext=fontsize=20:fontcolor=White:fontfile='/Windows/Fonts/arial.ttf':text='onLine1':x=(w)/2:y=(h)/2,
> drawtext=fontsize=20:fontcolor=White:fontfile='/Windows/Fonts/arial.ttf':text='onLine2':x=(w)/2:y=((h)/2)+25,
> drawtext=fontsize=20:fontcolor=White:fontfile='/Windows/Fonts/arial.ttf':text='onLine3':x=(w)/2:y=((h)/2)+50[out]"
> -y test_out.avi
>  
[/code]

* * *

なお、単純に text に \r\n を入れることでも出来るという記事があり、これを参照されたのだと思いますが、 \n
が働いていないというコメントもあり、はっきりはしていませんね。

[FFmpegのdrawtextで改行をする](https://polidog.jp/2016/04/27/ffmpeg/)  
[FFmpegのdrawtextでテキストの改行をしたい（multiple line）時は改ページ(Form Feed \f
＾L)を使えばよい](https://signal-flag-z.blogspot.com/2014/10/ffmpeg-drawtext-
multiple-line-form-feed.html)

\n が働いていないというコメント  
[Drawtext complex filter - multiple line #488](https://github.com/fluent-
ffmpeg/node-fluent-ffmpeg/issues/488)

ここ [10.53.2 Text expansion](https://ffmpeg.org/ffmpeg-filters.html#Text-
expansion) を見ると何か出来そうですが。

>   * expr, e  
>  式評価結果です。  
>  評価する式を指定する引数を1つ取る必要があります。これは、x値およびy値と同じ定数および関数を受け入れます。
> すべての定数を使用する必要はないことに注意してください。たとえば、式を評価するときにテキストサイズがわからないため、定数text_wおよびtext_hは未定義の値になります。
>

* * *

他に drawtext ではなく subtitles を使う方法もあるようです。

[ffmpeg で字幕もしくは文字な動画の別解なお尻](http://hhsprings.pinoko.jp/site-
hhs/2018/12/ffmpeg-%E3%81%A7%E5%AD%97%E5%B9%95%E3%82%82%E3%81%97%E3%81%8F%E3%81%AF%E6%96%87%E5%AD%97%E3%81%AA%E5%8B%95%E7%94%BB%E3%81%AE%E5%88%A5%E8%A7%A3%E3%81%AA%E3%81%8A%E5%B0%BB/)  
[FFMPEG: Creating video using drawtext along with word wrap and
padding](https://stackoverflow.com/q/50628267/9014308)


CC BY-SA 4.0
2019-05-31T04:23:59.210
55389
2019-05-31T06:05:13.610
2019-05-31T06:05:13.610
26370
26370
55365
answer