CodeGym /コース /Python SELF JA /動画での要素のオーバーレイとアニメーション: 動くテキストとグラフィックの作成

動画での要素のオーバーレイとアニメーション: 動くテキストとグラフィックの作成

Python SELF JA
レベル 48 , レッスン 0
使用可能

1. テキストの追加とその移動アニメーション

MoviePyは本当に素晴らしいツールで、なんてことない動画を映画のような作品に変えることができるんだ。まあ、少なくとも動くテキストとグラフィックのあるものにね。まず、静的な要素を動画に追加する方法を理解してから、アニメーションという魔法に進もう。

テキストの追加とその移動アニメーション

MoviePyでは、TextClipを使用してテキストやフォント、色、その他のパラメータを設定するよ。その後、set_position()メソッドを使ってテキストの画面上の動きを設定できるよ。

横方向のテキスト移動

この例では、テキストが左から右へ動くよ。


from moviepy.editor import VideoFileClip, TextClip, CompositeVideoClip

# メイン動画をロード
video = VideoFileClip("sample_video.mp4")

# テキストクリップを作成
text = TextClip("動くテキスト", fontsize=50, color='white')
text = text.set_position(lambda t: (int(200 * t), 100)).set_duration(5)

# 動画にテキストをオーバーレイ
final_video = CompositeVideoClip([video, text])
final_video.write_videofile("video_with_moving_text.mp4", fps=24)

ここでは:

  • TextClip("動くテキスト", fontsize=50, color='white')は、フォントサイズ50の白いテキストを作成。
  • set_position(lambda t: (int(200 * t), 100))は、一定速度でテキストを右方向に動かすアニメーションを作成。
  • CompositeVideoClip([video, text])は、テキストクリップとメイン動画クリップを結合。

移動方向を変えるテキストアニメーション

縦方向と横方向の動きを組み合わせて、もっと複雑な軌道を作成することもできるよ。

斜め方向にテキストを移動

この例では、テキストが斜め方向に移動するよ。


text = TextClip("斜め方向のテキスト", fontsize=50, color='yellow')
text = text.set_position(lambda t: (int(100 + 50 * t), int(100 + 30 * t))).set_duration(5)

final_video = CompositeVideoClip([video, text])
final_video.write_videofile("video_with_diagonal_text.mp4", fps=24)

ここでは:

  • 関数set_position(lambda t: (int(100 + 50 * t), int(100 + 30 * t)))は、横方向と縦方向の動きを組み合わせ、斜め方向の動きを作成。

現れると消えるテキストアニメーション

テキストを現れたり消えたりさせるためには、時間に応じて透明度を変更するんだ。MoviePyではfadein()fadeout()メソッドを使うよ。

スムーズな現れと消え


# スムーズに現れて消えるテキスト
text = TextClip("現れるテキスト", fontsize=40, color='blue')
text = text.set_position(('center', 'bottom')).set_duration(5).fadein(1).fadeout(1)

final_video = CompositeVideoClip([video, text])
final_video.write_videofile("video_with_fade_text.mp4", fps=24)

ここでは:

  • fadein(1)fadeout(1)は、テキストの開始時と終了時にそれぞれ1秒間のスムーズな現れと消えを追加。

2. グラフィック要素の挿入

画像の追加とその移動アニメーション

テキスト以外にも、MoviePyはImageClipクラスを使って動画に画像を追加できるよ。その後、set_position()で位置を変更して画像をアニメーション化できるよ。

ロゴの上下移動アニメーション


from moviepy.editor import VideoFileClip, ImageClip

# 動画と画像のロード
video = VideoFileClip("sample_video.mp4")
logo = ImageClip("logo.png").set_duration(5)

# ロゴのアニメーション — 下から上へ移動
logo = logo.set_position(lambda t: ('center', int(500 - 100 * t)))

# ロゴを動画にオーバーレイ
final_video = CompositeVideoClip([video, logo])
final_video.write_videofile("video_with_moving_logo.mp4", fps=24)

ここでは:

  • ImageClip("logo.png").set_duration(5)は、ロゴ画像をロードしてその表示時間を設定。
  • set_position(lambda t: ('center', int(500 - 100 * t)))は、ロゴを垂直方向に下から上へ動かす。

ズームインしながら画像を現れさせる

また、画像をズームインしながら現れさせる効果も作れるよ。


# 画像のロード
logo = ImageClip("logo.png").set_duration(5)

# 画像のスケールを設定してズームイン効果を作成
logo = logo.resize(lambda t: 1 + 0.5 * t)  # ズームイン効果
logo = logo.set_position(('center', 'center'))

# ズームインアニメーション付きロゴを動画にオーバーレイ
final_video = CompositeVideoClip([video, logo])
final_video.write_videofile("video_with_zoom_in_logo.mp4", fps=24)

ここでは:

  • logo.resize(lambda t: 1 + 0.5 * t)は、ロゴを毎秒50%ずつ拡大し、ズームイン効果を作成。

3. 複数のアニメーション要素を組み合わせる

MoviePyでは、同じ動画に複数のアニメーション要素を組み合わせることができるよ例えば、横方向に動くテキストと縦方向に移動する画像を同時に追加することができる。

テキストと画像の同時アニメーション


# 横方向に動くテキストを作成
text = TextClip("テキストと画像", fontsize=40, color='red')
text = text.set_position(lambda t: (int(200 * t), 50)).set_duration(5)

# ロゴのアニメーション — 下から上へ移動
logo = ImageClip("logo.png").set_duration(5)
logo = logo.set_position(lambda t: ('center', int(500 - 100 * t)))

# テキストとロゴを動画にオーバーレイ
final_video = CompositeVideoClip([video, text, logo])
final_video.write_videofile("video_with_text_and_logo.mp4", fps=24)

ここでは:

  • テキストを左から右へ、ロゴを下から上へ移動するアニメーションを作成。
  • CompositeVideoClip([video, text, logo])でアニメーションされた要素をメイン動画にオーバーレイ。

テキストとグラフィックを同時にアニメーション

この例では、テキストを斜め方向に動かし、ロゴをズームインしながらスムーズに現れる完全なビデオクリップを作成するよ。


from moviepy.editor import VideoFileClip, TextClip, ImageClip, CompositeVideoClip

# 動画のロード
video = VideoFileClip("sample_video.mp4")

# 斜め方向に動くテキスト
text = TextClip("アニメーションテキスト", fontsize=40, color='yellow')
text = text.set_position(lambda t: (int(100 + 50 * t), int(100 + 30 * t))).set_duration(5)

# ロゴをズームインしながらスムーズに現れる
logo = ImageClip("logo.png").set_duration(5)
logo = logo.resize(lambda t: 1 + 0.5 * t).fadein(1)

# テキストとロゴを動画にオーバーレイ
final_video = CompositeVideoClip([video, text, logo])
final_video.write_videofile("animated_text_and_logo.mp4", fps=24)

注意が必要なエラー

テキストやグラフィックが期待通りに再生されないことがあるよ。それは、時間や位置の指定が間違っている可能性があるんだ。使用している論理式を確認し、コードをデバッグすることを忘れないでね。

別のよくある質問は、「なぜ自分の動画が必要な形式で保存されないの?」というものだよ。必要なコーデックがインストールされていることを確認してね。MoviePyはこれを簡単にしてくれるけど、場合によっては互換性の問題が発生し、それは追加のライブラリをインストールすることで簡単に解決できるよ。

今日のレッスンはここまで。これで動画にテキストやグラフィックを追加するだけでなく、それを動的で生き生きとしたものにする方法がわかったね。次回の講義では、さらに面白い技術を紹介するので、引き続きスキルを伸ばしていこう!

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION