17

私はコードを持っています:

import subprocess , os

ffmpeg = "C:\\ffmpeg_10_6_11.exe"
inVid = "C:\\test_in.avi"
outVid = "C:\\test_out.avi"

if os.path.exists( outVid ):
os.remove( outVid )
proc = subprocess.Popen(ffmpeg + " -i " + inVid + ''' -vf drawtext=fontfile=/Windows/Fonts/arial.ttf:text="onLine1 onLine2 onLine3":fontcolor=white:fontsize=20 -y ''' + outVid , shell=True, stderr=subprocess.PIPE)
proc.wait()
print proc.stderr.read()
os.startfile( outVid )

ビデオファイルにテキストを書き込むため。しかし、すべてを1行にするのではなく、多くの行のテキストを書きたいと思っています。

plsは役立ちます。ありがとう

4

5 に答える 5

30

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

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
于 2012-06-21T14:07:26.733 に答える
23

ffmpeg( )のソースコードを見るvs_drawtext.c

static inline int is_newline(uint32_t c)
{
    return c == '\n' || c == '\r' || c == '\f' || c == '\v';
}

したがって、または文字に対応するテキスト行に\fまたはを挿入してみることができます。例えば:\v^L^K

-filter_complex "[in] drawtext=fontsize=40:fontcolor=white:fontfile=/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf:x=(w-tw)/2:y=(h-th)/2:box=1:boxcolor=black@0.5:text='two^Llines'[out]"

^L実際のCtrl-L文字であり^L明らかにそうではありません。

于 2012-10-11T09:39:08.917 に答える
14

コマンド内に新しい行を追加するだけで、ffmpegはそれを適切に処理しました。

ffmpeg -i input.avi -vf "[in]drawtext=fontsize=20:text='hello
world':x=(w)/2:y=(h)/2:fontcolor=white[out]" -y out.mp4

Ctrl + L、Ctrl + Kのハックは必要ありません!

つまり、「こんにちは」の後にEnterキーを押しました。

スクリプトファイルを編集したり、bashコマンドラインで実行したりできます。

于 2015-11-22T17:26:20.907 に答える
6

'textfile'パラメータを指定し、テキストをこのファイルに入れることで、コマンドラインからこれを機能させることができました。

詳細については、 http://ffmpeg.org/libavfilter.html#drawtextを参照してください。WindowsでffmpegビルドN-35057-g2c44aedを使用しますが、重要なことは、libavfilterの最新バージョンを使用していることです。

于 2011-11-28T03:20:42.560 に答える
0

TEXT = $(printf "$ 1")

シェルスクリプトで

改行文字を含むシェルスクリプト引数としてのテキスト

于 2020-03-11T22:01:33.927 に答える