LoginSignup
0
2

More than 3 years have passed since last update.

ffmpegを使って動画の最初にタイトルを追加する

Posted at

色々と苦労したので,メモ代わりに.動画の上にタイトルの文字を入れるのではなく,動画の開始前にタイトルを数秒間表示させる方法です.

1. タイトル作成

ffmpeg -y ^
 -f lavfi -i "color=c=black:s=1280x720:r=30000/1001:d=5.0" ^
 -f lavfi -i "aevalsrc=0|0:c=stereo:s=44100:d=5.0" ^
 -vf "drawtext=fontsize=60:fontfile=C\\://Windows/Fonts/arial.ttf:fontcolor=black:fontcolor=white:textfile='title.txt':x=(w-text_w)/2:y=(h-text_h)/2" ^
  word.mp4


ffmpeg -y ^
 -i word.mp4 ^
 -vf "fade=t=in:st=0:d=2,fade=t=out:st=4:d=1" ^
 word_f.mp4

5秒間の黒い動画を作成し,その上にテキストを表示させます.表示させる文字は別途テキストファイルを用意し,textfile='title.txt'にて指定.

2番目の処理では,文字をフェードイン,フェードアウトさせています.これで0~2秒でタイトルがフェードイン→2~4秒までタイトル表示→4~5秒でタイトルが消える動画が出来ました.

2. 元の動画の前に空白を入れる

始めは上記の動画と元の動画をconcatで結合・・・としたが,エラーは出ないものの上手く結合されず.ffmpegのマニュアル等を調べていたらitsoffsetで動画に空白部分を追加出来るとの事で,これとoverlayを組み合わせる事にしました.

ffmpeg -y ^
 -itsoffset 5 -i "input.mp4" ^
 -af "adelay=5s|5s" ^
 "input_of5.mp4"

adelayについて,PC上ではitsoffsetのみで5秒間の空白/無音が追加されたのですが,別端末(Androidタブレット)では動画と音が5秒間ずれると言う,環境によって再生のされ方が違う動画が出来てしまいました.

ここで,adelayにより,明示的に5秒間の無音を入れ,この問題は解決.

3. 動画の結合

ffmpeg -y ^
 -i "input_of5.mp4" ^
 -i "word_f.mp4" ^
 -filter_complex "overlay=x=0:y=0:enable='between(t,0,5)'" ^
 -filter_complex "amix=inputs=2:duration=longest:dropout_transition=2" ^
 "out.mp4"

overlayにて2つの動画を重ね,意図した音が消えないようにamixにて2つの音も重ねます.ポイントはoverlayでの時間指定で,enable='between(t,0,5)'により,t(時間[s])が0~5秒の間だけoverlayをenable状態にする事が出来ます.

4. 終わりに

この手法,需要があまり無いのか,調べてみても,そのものの方法が出て来ませんでした.高価なツールを使えばきっと簡単に出来るし,ffmpegでやろうとする人は少ないのかも知れません.自分はかなり試行錯誤を繰り返したので,この記事がffmpegユーザーに役立てば幸いです.

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2