Pythonで動画を簡単結合!ffmpegを使った効率的な自動化手法

動画編集って難しそうなイメージがありますけど、Pythonとffmpegを使えば、動画を結合するのも簡単にできるんでしょうか…?特に、手軽に動画を結合できると便利なんですけど…。
猫男
猫男
catman
catman
Pythonとffmpegを使えば、動画の結合も手軽にできるよう。catmanが特別なツールも必要なくできる方法を教えてあげるさ。

 

Pythonとffmpegで動画を結合する方法

Pythonとffmpegを使うと、複数の動画ファイルを簡単に結合できます。

たとえば、短いクリップを連続した1本の動画にしたり、動画ファイルの編集を行ったりすることができます。

そのため、今後のプロジェクトでも役立つでしょう。

この記事では、Pythonからffmpegを実行して、動画を結合する手順を紹介します。

 

ffmpegの基本

ffmpegは、動画や音声の変換・編集用として非常に強力です。

結合、カット、形式変換など、幅広い機能を備えています。

Pythonと組み合わせると、自動化やスクリプト化が可能になります。

 

ffmpegを準備する

まずはffmpegを利用可能な状態にしましょう。

インストール方法は、使用するOSによって異なりますが、Windows用のバイナリをダウンロードするか、MacではHomebrewを使ってインストールできます。

インストール後、次のコマンドでバージョンを確認します。

ffmpeg -version

バージョン情報が表示されれば、ffmpegの準備は完了です。

 

動画ファイルの準備

今回の例では、次のような動画ファイルを結合していきます。

videos/
  video1.mp4
  video2.mp4
  video3.mp4

これらの動画を1本にまとめて結合します。

 

Pythonで動画ファイルを結合するコード

import subprocess

input_files = ["videos/video1.mp4", "videos/video2.mp4", "videos/video3.mp4"]
output_file = "output/combined_video.mp4"

with open("input_list.txt", "w") as file:
    for video_file in input_files:
        file.write(f"file '{video_file}'\n")

command = [
    "ffmpeg",
    "-f", "concat",
    "-safe", "0",
    "-i", "input_list.txt",
    "-c", "copy",
    output_file
]

subprocess.run(command)

このコードを実行すると、video1.mp4video2.mp4video3.mp4を結合したcombined_video.mp4が作成されます。

 

コードの解説

主な部分をチェックしておきましょう。

  • input_list.txtは、結合する動画ファイル名を列挙したテキストファイルです。
  • -f concatは、動画の結合モードを指定しています。
  • -safe 0は、ファイルの安全性チェックをオフにしています。
  • -c copyは、再エンコードを行わずにコピーしています。

フルパスや特殊文字を含むファイルを指定する際は、-safe 0を追加することが多いです。

 

ffmpegにリストファイルを渡すだけで、複数の動画を結合できるなんて便利ですね!まるでパズルみたいです…。
猫男
猫男
catman
catman
動画編集もパズルのように組み合わせるとシンプルさ。Pythonと組み合わせて効率よく作業を進められるんだ。

 

結合時のよくあるトラブル

ffmpegが見つからないエラー

次のようなエラーが出る場合があります。

FileNotFoundError: [Errno 2] No such file or directory: 'ffmpeg'

この場合は、ffmpegが正しくインストールされていない可能性があります。

ターミナルでffmpeg -versionを実行し、インストール状態を再度確認します。

 

動画のフォーマットが違うエラー

動画のフォーマットが異なることで、結合時にエラーが発生することがあります。

その場合、動画の形式変換を行うか、統一ファイル形式でエンコードし直すと問題が解決することが多いです。

 

応用例: 動画を切り取って結合する

動画の特定部分だけを切り取って、結合することも可能です。

この方法により、特定のシーンだけを集めたリールを作ることができます。

 

切り取って結合するPythonコード

import subprocess

clips = [("videos/video1.mp4", 5, 10), ("videos/video2.mp4", 0, 20)]
output_file = "output/short_clips.mp4"

with open("input_clips.txt", "w") as file:
    for video, start, duration in clips:
        temp_output = f"temp_{start}.mp4"
        command = [
            "ffmpeg",
            "-ss", str(start),
            "-t", str(duration),
            "-i", video,
            "-c", "copy",
            temp_output
        ]
        subprocess.run(command)
        file.write(f"file '{temp_output}'\n")

command = [
    "ffmpeg",
    "-f", "concat",
    "-safe", "0",
    "-i", "input_clips.txt",
    "-c", "copy",
    output_file
]

subprocess.run(command)

このコードでは、指定した開始時間と持続時間に基づいてクリップを作成し、これらを結合します。

 

まとめ

Pythonとffmpegを使うことにより、複数の動画を手軽に結合できます。

今回の内容を整理すると、以下のようになります。

  • Pythonとffmpegの組み合わせで動画ファイルを結合できる
  • ffmpegのconcat機能を使うと簡単に複数動画を1本にできる
  • 動画の特定部分だけを切り取って結合する方法も紹介
  • ffmpegによるエラー対処法も理解しておくと安心

動画の結合を学ぶことで、短いクリップを集めたプロモーションビデオや記念ビデオを作成するなど、クリエイティブなプロジェクトに活用できます。

 

動画結合がこんなに簡単だったなんて驚きです!これでトレーニング動画やマニュアル用の映像も自分で作れそうです。
猫男
猫男
catman
catman
Pythonとffmpegは本当に強力だよう。動画編集の自動化もできるから、ぜひ色々と試してみるんだ。

 

EARTHPG 自動化研究所

「その作業、仕組みにできます。」

Google Apps Script、Python、スプレッドシート自動化、WordPress開発、 API連携、AI活用まで対応。 小さな自動化から業務全体の設計まで、研究所が支援します。