昨今のスマートフォンの動画機能はすごい。高画質で長時間の動画の撮影が可能だ。そのため、ついつい長時間の動画を撮影してしまう場面も多い。しかし長時間の動画は編集が面倒だ。そこで、動画を短く分割するプログラムをPythonで作ってみよう。
動画処理に大活躍のライブラリ「FFmpeg」
FFmpegはフリーの動画・音声の変換ツールで、動画処理に欠かせない。動画や音声形式を変換したり、動画から音声を取り出したり、画像を組み合わせて動画にしたりと、様々な処理を手軽に行うことができる。しかし、FFmpegはコマンドラインから使う必要がある。加えて、高機能であるため、オプションが多く、どのように使ったら良いのか分かりにくいという欠点がある。
この欠点を補うことができるのが、Pythonのパッケージ「ffmpeg-python」だ。動画のサムネイルを作成したり、動画から音声を取り出したり、動画にカスタムフィルタをかけたりと、様々な処理をシンプルなプログラムで記述できる。
今回はこのパッケージを利用して、長時間の動画を3分ごとに分割するプログラムを作ってみよう。
ffmpeg-pythonのインストール
最初に、ffmpeg-pythonが使えるようにセットアップしよう。実際のところ、ffmpeg-pythonは、コマンドラインのFFmpegをラップしただけのライブラリであり、ffmpeg-pythonを動かすには、FFmpeg本体が必要となる。つまり、セットアップには以下の2つが必要だ。
・(1) FFmpeg本体 - ダウンロードしてインストール
・(2) ffmpeg-python - コマンドラインからインストール
FFmpegをインストールして環境変数PATHにFFmpegのインストールパスを追加するか、実行するプログラムと同じフォルダに、FFmpeg本体一式をコピーすることで動かすことができる。
FFmpeg本体は、こちらのサイトからダウンロードできる。「Get packages & executable files」という部分から各OS向けのパッケージがダウンロード可能だ。
なお、macOSならHomebrewなどのパッケージマネージャーを使って、ターミナルで「brew install ffmpeg」とコマンドを実行すれば手軽にインストールできる。Ubuntu/Debian Linuxならば「sudo apt install ffmpeg」でインストールできる。
Windowsの場合は、FFmpegのアーカイブを解凍し、binフォルダにある「ffmpeg.exe」と「ffprobe.exe」をこれから作るプログラムと同じフォルダにコピーするのが簡単だ。
そして、Pythonのpipコマンドを使って、ffmpeg-pythonをインストールしよう。ターミナルで以下のコマンドを実行しよう。WindowsならPowerShell、macOSならターミナル.appを開いて以下のコマンドを実行しよう。また、Windowsの場合、「python3」を「python」と読み替えよう。
python3 -m pip install ffmpeg-python
動画の情報を取得するプログラム
それでは、Pythonのプログラムを作ってみよう。最初に動画の情報を取得するプログラムを作ってみよう。
import ffmpeg, pprint
in_file = "test.mp4"
info = ffmpeg.probe(in_file)
pprint.pprint(info)
上記のプログラムを「get_info.py」という名前で保存しよう。そして、適当な動画ファイルを用意して、「test.mp4」という名前で同じフォルダにコピーしよう。そして、ターミナルで以下のコマンドを実行しよう。
python3 get_info.py
すると、以下のように動画に関する情報が表示される。特に注目したい情報が、info["format"]["duration"]で、これは動画の長さを表している。他にも、info["streams"][0]["height"]で動画の高さ、info["streams"][0]["width"]に動画の横幅の情報が得られる。