PR

Macでの動画切り抜きプログラムの作成と活用方法

この記事では、Mac環境で動画を指定した時間範囲で切り抜くPythonプログラムを紹介します。プログラムの説明と共に、実際の使用例も紹介します。

Macでの動画切り抜きプログラムの作成と活用方法

1. 必要なインストール

このプログラムを動作させるために、以下のツールとライブラリをインストールする必要があります。

Pythonのインストール
まず、Pythonがインストールされていることを確認してください。ターミナルで以下のコマンドを実行して、Pythonのバージョンを確認します。

python3 --version

もしインストールされていなければ、Pythonの公式サイトからダウンロードしてインストールしてください。

FFmpegのインストール
FFmpegは動画処理に必要なコマンドラインツールです。以下のコマンドでHomebrewを使ってインストールできます。

brew install ffmpeg

必要なPythonライブラリのインストール
プログラムで使用するライブラリは標準ライブラリのみですが、pipを最新バージョンに更新しておくと良いでしょう。

pip install --upgrade pip

2. プログラムの説明

以下のプログラムでは、指定した開始時間と終了時間で動画を切り抜く機能を提供します。

時間形式の確認関数

import re

def is_valid_time_format(time_str):
    pattern = r'^([0-9]{2}):([0-5][0-9]):([0-5][0-9])$'
    return re.match(pattern, time_str) is not None

この関数は、入力された時間が「HH:MM:SS」の形式であるかをチェックします。

動画の切り抜き関数

import subprocess

def trim_video(input_path, start_time, end_time, output_path):
    command = [
        'ffmpeg',
        '-ss', start_time,
        '-i', input_path,
        '-to', end_time,
        '-c:v', 'libx264',
        '-c:a', 'aac',
        '-strict', 'experimental',
        output_path
    ]

    process = subprocess.Popen(command, stderr=subprocess.PIPE, universal_newlines=True)

    for line in process.stderr:
        if 'time=' in line:
            print(f'\r進捗: {line.strip()}', end='')

    process.wait()
    print('\n処理が完了しました。')

この関数はFFmpegを使って、指定された時間範囲の動画を切り抜き、進捗状況を表示します。

メイン関数

import os

def main():
    input_path = input("処理したい動画のパスを入力してください: ").strip().strip("'")

    if not os.path.isfile(input_path):
        print(f"ファイルが見つかりません: {input_path}")
        return

    while True:
        start_time = input("開始時間を入力してください (HH:MM:SS): ")
        if is_valid_time_format(start_time):
            break
        print("無効な時間形式です。HH:MM:SS の形式で入力してください。")

    while True:
        end_time = input("終了時間を入力してください (HH:MM:SS): ")
        if is_valid_time_format(end_time):
            break
        print("無効な時間形式です。HH:MM:SS の形式で入力してください。")

    output_name = input("出力ファイル名を入力してください(デフォルト: input_trimmed.mp4): ")
    if not output_name:
        output_name = os.path.splitext(os.path.basename(input_path))[0] + '_trimmed.mp4'
    output_path = os.path.join(os.path.dirname(input_path), output_name)

    try:
        trim_video(input_path, start_time, end_time, output_path)
        print(f"動画を切り抜きました: {output_path}")
    except Exception as e:
        print(f"エラーが発生しました: {str(e)}")

if __name__ == "__main__":
    main()

このメイン関数は、ユーザーから入力を受け取り、動画を指定された時間範囲で切り抜きます。


3. プログラム全体

以下がプログラム全体です。

import os
import subprocess
import re

def is_valid_time_format(time_str):
    pattern = r'^([0-9]{2}):([0-5][0-9]):([0-5][0-9])$'
    return re.match(pattern, time_str) is not None

def trim_video(input_path, start_time, end_time, output_path):
    command = [
        'ffmpeg',
        '-ss', start_time,
        '-i', input_path,
        '-to', end_time,
        '-c:v', 'libx264',
        '-c:a', 'aac',
        '-strict', 'experimental',
        output_path
    ]

    process = subprocess.Popen(command, stderr=subprocess.PIPE, universal_newlines=True)

    for line in process.stderr:
        if 'time=' in line:
            print(f'\r進捗: {line.strip()}', end='')

    process.wait()
    print('\n処理が完了しました。')

def main():
    input_path = input("処理したい動画のパスを入力してください: ").strip().strip("'")

    if not os.path.isfile(input_path):
        print(f"ファイルが見つかりません: {input_path}")
        return

    while True:
        start_time = input("開始時間を入力してください (HH:MM:SS): ")
        if is_valid_time_format(start_time):
            break
        print("無効な時間形式です。HH:MM:SS の形式で入力してください。")

    while True:
        end_time = input("終了時間を入力してください (HH:MM:SS): ")
        if is_valid_time_format(end_time):
            break
        print("無効な時間形式です。HH:MM:SS の形式で入力してください。")

    output_name = input("出力ファイル名を入力してください(デフォルト: input_trimmed.mp4): ")
    if not output_name:
        output_name = os.path.splitext(os.path.basename(input_path))[0] + '_trimmed.mp4'
    output_path = os.path.join(os.path.dirname(input_path), output_name)

    try:
        trim_video(input_path, start_time, end_time, output_path)
        print(f"動画を切り抜きました: {output_path}")
    except Exception as e:
        print(f"エラーが発生しました: {str(e)}")

if __name__ == "__main__":
    main()

4. 活用事例

このプログラムは、以下のようなシーンで活用できます。

  • YouTube動画の一部を切り抜いて保存 長時間の動画から必要な部分だけを切り抜いて保存できます。
  • 講義動画のハイライト作成 オンライン講義の重要部分だけを抽出し、ハイライト動画を作成できます。
  • ホームビデオの編集 個人的なビデオから特定のシーンを切り抜き、編集に利用できます。

実際にプログラムを実行する際には、ターミナルで以下のコマンドを実行します。

python3 path/to/your_script.py

以上で、Mac環境で動画を指定した時間範囲で切り抜くPythonプログラムの紹介と、その活用方法について説明しました。このプログラムを使って、効率的に動画を編集し、必要な部分だけを抽出することができます。

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