【Python応用】mp4動画に任意の縁付き字幕を挿入する方法!

こんにちは、ヒガシです。

 

このページでは以下の動画に対して、

こんな感じで任意の字幕を挿入する方法をご紹介します。

※上の動画は閲覧上の手間を省くためにgif形式にしておりますが、実際はmp4動画に対応するプログラムになっています。

 

文字の色や文字を挿入する場所なども任意に変更可能です。

ぜひ動画編集の際などにご活用ください。

 

それではさっそくやっていきましょう。

 

スポンサーリンク

必要なライブラリ一覧

まずは必要なライブラリをご紹介しておきます。

★openCV

★PIL

★math

★numpy

多いですね。

 

openCVについては以下でインストール方法を解説しておりますので使ったことがない方は参考にしてみてください。

 

スポンサーリンク

画像に文字を挿入する方法解説

今回動画に文字を挿入するわけですが、処理の流れとしては以下の通りです。

①動画の1フレームを画像として取り出す

②その画像に文字を挿入

③②の画像をまとめてまた動画にする

 

ここで②の作業については以下で解説しておりますので今回のプログラムでも流用しています。

【Python】PILを使って画像に縁付きの文字を挿入する方法!

 

スポンサーリンク

動画に字幕を挿入するサンプルコード

それでは冒頭に紹介した作業を実施してくれるサンプルコードのご紹介です。

#ライブラリインポート
import cv2
from PIL import Image
from PIL import ImageDraw
from PIL import ImageFont
import math
import numpy as np
#作業するベース動画ファイル(同じフォルダに置く)
movie_name='sample_movie1.mp4'
#処理後のサイズ指定
size=(1000,1000)
#字幕挿入後の動画ファイル形式指定
movie_jimaku='jimaku_movie.mp4'
fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
save = cv2.VideoWriter(movie_jimaku, fourcc, fps=20, frameSize=size, isColor=True)

def ins_str(img,ins_string):
    #挿入する文字列
    ins_text=ins_string
    #文字を配置するピクセル数を指定(左上が基準)
    pos_x=380
    pos_y=800
    #文字サイズを指定
    font_size=60
    #フォントのパスを指定
    font_path="C:\Windows\Fonts\HGRPP1.TTC"
    #RGBで文字色指定
    font_color=(255,255,0)
    #RGBで文字の縁の色を指定
    back_color=(0,0,0)
    #縁の太さを指定
    fw=10
    #処理開始
    #img = Image.open(pic_name)
    font = ImageFont.truetype(font_path, font_size)
    for i in range(0,360,30):
        pos_xr=fw*math.cos(2*3.14*i/360)
        pos_yr=fw*math.sin(2*3.14*i/360)
        ImageDraw.Draw(img).text((pos_x+pos_xr, pos_y+pos_yr), ins_text, font = font , fill = back_color)
    ImageDraw.Draw(img).text((pos_x, pos_y), ins_text,font = font ,fill = font_color)
    return img

#動画の結合処
rmovie=cv2.VideoCapture(movie_name)
nframe=int(rmovie.get(cv2.CAP_PROP_FRAME_COUNT))
ins_str_list=['あいうえお','かきくけこ','さしすせそ','たちつてと']
for i in range(nframe):
    ret,frame=rmovie.read()
    frame=Image.fromarray(frame)
    id_str=int(i/nframe*len(ins_str_list))
    ins_string=ins_str_list[id_str]
    frame=ins_str(frame,ins_string)
    frame = np.array(frame)
    if ret==True:
        save.write(frame)
save.release()

 

これで冒頭にご紹介した処理が実行されます。

 

なお、今回は4つの文字列を動画の尺を4分割して同じ期間表示するというやり方にしています。

工夫すればタイミングや期間は自由に変更することができますのでぜひトライしてみてください。

 

スポンサーリンク

おわりに

というわけで今回はpythonを使って、mp4動画に字幕を挿入する方法をご紹介しました。

 

動画編集の際などにぜひご活用ください。

 

このように、私のブログでは様々なスキルを紹介しています。

過去記事一覧

 

今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。

確実にスキルアップできるはずです。

 

最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村 IT技術ブログへ
にほんブログ村

それではまた!

コメント

タイトルとURLをコピーしました