Pythonで動画を簡単結合!ffmpegを使った効率的な自動化手法
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.mp4、video2.mp4、video3.mp4を結合したcombined_video.mp4が作成されます。
コードの解説
主な部分をチェックしておきましょう。
input_list.txtは、結合する動画ファイル名を列挙したテキストファイルです。-f concatは、動画の結合モードを指定しています。-safe 0は、ファイルの安全性チェックをオフにしています。-c copyは、再エンコードを行わずにコピーしています。
フルパスや特殊文字を含むファイルを指定する際は、-safe 0を追加することが多いです。
結合時のよくあるトラブル
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によるエラー対処法も理解しておくと安心
動画の結合を学ぶことで、短いクリップを集めたプロモーションビデオや記念ビデオを作成するなど、クリエイティブなプロジェクトに活用できます。