「それ、pythonでできるよ」-動画の字幕追加-


前回に引き続き「それ、pythonでできるよ」シリーズ

pythonには様々なライブラリが開発されており、あらゆることが手軽にできます。

今記事は簡単なことはpythonでやってしまおう!!という精神の記事です。

今回は「python動画編集」シリーズその3

動画の編集ソフトは有料ソフトから無料ソフトまでたくさんあり、無料でも高性能なソフトはありますが、

環境構築やストレージの問題などお手軽ではないかもしれません。

その中で、動画編集で頻繁に使われる、動画の字幕の追加をpythonで行います。

いつも通りMoviepyを使いますが、

その前に・・・まず、ImgeMagickというソフトウェアをインストールしましょう。

インストール方法は上記のホームページからOSに合わせてダウンロードしてインストールするだけです。

ImageMagickとは?という人はこちらを参考にしてください。

要は画像加工のソフトウェアで、この界隈では必須知識だそうです。

後は以下のコードをコピペ。

from moviepy import editor
from moviepy.video.io.VideoFileClip import VideoFileClip
import os.path as op

"""以下2行はwindowsユーザは書かないとおそらくエラーが出ます"""
from moviepy.config import change_settings
change_settings({"IMAGEMAGICK_BINARY": r"C:\\Program Files\\ImageMagick-7.0.8-Q16\\magick.exe"})

file_path = "movie.mp4"#字幕を付けたい動画のパス

"""字幕の設定関数"""
def annotate(clip, txt, txt_color='red', fontsize=50, font='Xolonium-Bold'):
    #Writes a text at the bottom of the clip. 
    txtclip = editor.TextClip(txt, fontsize=fontsize, font=font, color=txt_color)
    cvc = editor.CompositeVideoClip([clip, txtclip.set_pos(('center', 'bottom'))])
    return cvc.set_duration(clip.duration)

video = VideoFileClip(file_path)

#subs・・・字幕を入れる時刻と文字列のタプル。(開始時刻,終了時刻),'表示したい文字'
subs = [((0, 4), 'subs1'),
        ((4, 9), 'subs2'),
        ((9, 12), 'subs3'),
        ((12, 16), 'subs4')]#動画の長さまで字幕を設定する。途中で切られる。表示したくないときは空文字''で

annotated_clips = [annotate(video.subclip(from_t, to_t), txt) for (from_t, to_t), txt in subs]#動画と字幕を繋げる処理
final_clip = editor.concatenate_videoclips(annotated_clips)
final_clip.write_videofile("movie_withSubtitle.mp4")

少しだけ解説しますと

annotate()で字幕のフォントや色、サイズを設定しています。

字幕の位置は(txtclip.set_pos((‘center’, ‘bottom’)))で指定しています。

注意点としてはsubsの時刻指定は連続して最後まで行う必要があります。

今回の場合だと16秒で動画が切られてしまいます。
(字幕を入れたくない場合は空文字で指定しましょう)

後、windowsユーザの方が必要な2行ですが、パスをしっかり合わせてください。

これで、動画の好きな時刻に好きな字幕を入れることができます。

僕はwindowsだったのですが、エラーがなかなか解決できず...

皆さんもぜひ試してみてください。

合わせて読みたいpythonの記事はコチラ!!


Sponsored Link

2 thoughts on “「それ、pythonでできるよ」-動画の字幕追加-

  1. Pingback: pythonで動画を切り出す「それ、pythonでできるよ」

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です