Python×ffmpegで画像の切り出し

動画処理

今回は、Python×ffmpegで動画の一部を画像として出力する方法をご紹介します。

指定した時間の画像をフォルダに出力

今回はこの動画を使ってみましょう

ffmpegで画像を出力するには以下のように記述します。

ffmpeg -ss 開始時間 -i 使用する動画 -t 何秒間切り出すか 出力ファイル名

開始時間は、動画開始からのトータルの秒数でも指定できますし、時間表記形式でも指定できます。開始から90秒後のシーンを画像にしたい場合は「-ss 90」とも「-ss 01:30」とも書くことができます。特に長い動画の場合は時間表記の方が便利かもしれませんね。

出力ファイル名は「%3d.png」のように書きます。これは3桁の連番になります。もし、フレームレート30の動画を1秒切り出したときは30枚の画像が出力されることになります。ちなみに「%3d.jpg」と書くとjpg形式で画像が出力されます。

これをpythonで書いてみた場合の例です。

import subprocess
import os
import shutil

#切り出しに使う動画
split_file = 'input.mp4'

#開始時間
starttime = '00:12'

#切り出す秒数
second = '1'

d = 'split/'
os.makedirs(d, exist_ok=True)
shutil.rmtree(d)
os.mkdir(d)

subprocess.run('ffmpeg -ss '+ starttime +' -i ' + split_file + ' -t ' + second + ' "split/%3d.png"')

この動画ではinput.mp4という動画を使用して、開始から12秒のシーンを1秒間画像として切り出しています。出力した画像は「split」というフォルダに出力するようにしてあります。(すでに「split」フォルダが存在している場合は中身を全部消したうえで出力しています)

やってみよう

さきほどのコードを実行した結果が以下のようになります。「split」フォルダに動画の12秒目が画像として出力されています。

starttime動画の最後付近の53秒目を指定した場合がこちら。出力する画像がわかります。

今日は動画の一部を画像として出力する方法をご紹介しました。
これを覚えておくと、気になるシーンを保存したり、動画のサムネイルを作ったりするのに役に立ちそうですね!

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