Pythonで動画を2分ごとに分割する方法とMoviePyの活用法

Python

動画を扱う際、特にYouTubeやその他の動画共有サイトに動画をアップロードする場合、サイトごとに時間の制約が設けられていることがあります。たとえば、無料ユーザーには1ファイルあたりのアップロード時間が10分や15分に制限されるケースが一般的です。このような制限に対応するために、動画を自動で分割するスクリプトを作成することは非常に有効です。今回は、Pythonのライブラリであるmoviepyを使用して、動画を2分ごとに分割する方法について詳しく解説します。

さらに、moviepyは単に動画を分割するだけでなく、トリミングやエフェクトの追加、オーディオの操作など、様々な高度な動画編集機能も提供しています。本記事では、その一部の機能も併せて紹介します。

1. 動画を分割するメリット

動画共有サイトでは、アップロードできる動画の長さに制限があることが多くあります。例えば、YouTubeではアカウントの状態や設定によって最大アップロード時間が異なります。長い動画をアップロードしたい場合、この制約を回避するために動画を短く分割して複数のファイルとしてアップロードする手法が有効です。

また、動画を2分ごとに分割することで、視聴者にとってもより短時間で閲覧できるコンテンツを提供できるため、視聴維持率を高めることができます。特に、短いクリップに分割することで、視聴者が興味のある部分だけを選んで見ることが容易になります。

2. 動画を2分ごとに分割するPythonスクリプト

Pythonには、moviepyという強力なライブラリがあり、これを使って簡単に動画を分割することができます。以下では、動画を2分(120秒)ごとに分割するスクリプトを紹介します。

必要なライブラリをインストール

まずは、Pythonのパッケージマネージャーであるpipを使ってmoviepyライブラリをインストールします。ターミナルで以下のコマンドを実行してください。

pip install moviepy

分割スクリプト

次に、動画を2分ごとに分割するためのPythonスクリプトです。

from moviepy.video.io.VideoFileClip import VideoFileClip
import os

def split_video(input_file, output_folder, segment_duration=120):
    # 動画ファイルを読み込む
    video = VideoFileClip(input_file)
    
    # 動画の長さ(秒)
    video_duration = video.duration
    
    # 出力フォルダが存在しない場合は作成
    if not os.path.exists(output_folder):
        os.makedirs(output_folder)
    
    # 2分(120秒)ごとに動画を分割
    start_time = 0
    part = 1
    
    while start_time < video_duration:
        end_time = min(start_time + segment_duration, video_duration)
        # 動画を切り出して保存
        subclip = video.subclip(start_time, end_time)
        output_file = os.path.join(output_folder, f'part_{part}.mp4')
        subclip.write_videofile(output_file, codec="libx264")
        start_time += segment_duration
        part += 1
    
    print(f"動画の分割が完了しました。保存先: {output_folder}")

# 使い方
input_file = "input_video.mp4"  # 分割する動画ファイル
output_folder = "output_videos"  # 分割後の動画を保存するフォルダ

split_video(input_file, output_folder)

コードの解説

VideoFileClip クラス

moviepyには、動画ファイルを扱うためのクラスVideoFileClipがあります。このクラスを使用して、動画を開き、そのプロパティ(長さ、フレームレートなど)にアクセスすることができます。

video = VideoFileClip(input_file)

この行で、input_fileとして指定された動画を読み込みます。

動画の長さを取得

次に、video.durationを使って動画の長さ(秒単位)を取得します。この値は動画の分割に利用されます。

video_duration = video.duration

フォルダの作成

出力するフォルダが存在しない場合は自動で作成します。

if not os.path.exists(output_folder):
    os.makedirs(output_folder)

動画の分割

subclipメソッドを使って、指定された開始時間と終了時間の範囲で動画を切り出します。ループ内で、動画の開始位置から2分間ずつ切り出していき、ファイル名にpart_1.mp4part_2.mp4という形式で保存します。

subclip = video.subclip(start_time, end_time)
subclip.write_videofile(output_file, codec="libx264")

出力

各クリップは指定したフォルダにpart_1.mp4part_2.mp4といった形で保存されます。コーデックはlibx264を使用してMP4形式でエンコードされます。

実行方法

  1. input_video.mp4のファイル名を、分割したい動画ファイル名に変更します。
  2. スクリプトを実行すると、output_videosフォルダに2分ごとに分割された動画が保存されます。

3. moviepyでできる他のこと

moviepyは、動画を分割するだけではなく、多彩な編集機能を提供しています。以下では、その一部の機能を紹介します。

トリミング(指定範囲の切り出し)

動画の特定の部分だけを抽出したい場合、subclipを使って簡単にトリミングができます。例えば、10秒から30秒の範囲を切り出すコードは以下の通りです。

subclip = video.subclip(10, 30)
subclip.write_videofile("trimmed_video.mp4", codec="libx264")

動画にテキストを追加

動画にテキストを重ねることも可能です。例えば、「Hello World」というテキストを動画の中央に表示するコードは以下の通りです。

from moviepy.editor import TextClip, CompositeVideoClip

# テキストクリップを作成
txt_clip = TextClip("Hello World", fontsize=70, color='white')
txt_clip = txt_clip.set_position('center').set_duration(5)

# テキストを元の動画に重ねる
video_with_text = CompositeVideoClip([video, txt_clip])
video_with_text.write_videofile("video_with_text.mp4", codec="libx264")

動画の結合

複数の動画を連結して1つの動画にまとめることも可能です。例えば、2つの動画ファイルを連結する場合、以下のようにします。

from moviepy.editor import concatenate_videoclips

clip1 = VideoFileClip("part_1.mp4")
clip2 = VideoFileClip("part_2.mp4")
final_clip = concatenate_videoclips([clip1, clip2])

final_clip.write_videofile("final_video.mp4", codec="libx264")

オーディオの編集

moviepyではオーディオの編集も可能です。例えば、動画から音声を削除したり、音楽を追加したりすることができます。

# 音声をミュート
video_without_audio = video.without_audio()
video_without_audio.write_videofile("no_audio_video.mp4", codec="libx264")

4. まとめ

Pythonとmoviepyを使うことで、動画を2分ごとに分割したり、トリミングや結合、テキストの追加など、様々な動画編集がプログラムによって自動化できます。特に、アップロードサイトの時間制限に対応するために動画を分割する方法は非常に便利です。moviepyの他の機能も活用することで、より高度な動画編集が可能になり、Pythonを使った動画操作の幅が広がります。

次回は、さらに詳しい動画編集テクニックや応用例についても紹介していきます。

コメント

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