Python×ffmpegで動画の一部を抽出

動画処理

今回は、Python×ffmpegで動画の指定した範囲だけを抽出する方法をご紹介します。

やりたいこと

イメージとしてはこんな感じですね。動画全体の中から赤い部分だけを取り出します。
ffmpegで指定した範囲だけを抽出するにはこういった形式で書くことができます。

ffmpeg -ss 開始時間 -to 終了時間 -i 入力ファイル -c copy -y 出力ファイル )

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

pythonで書くと以下のようになります。

import subprocess

in_video = "input.mp4"
out_video = "cut.mp4"

starttime = "10:45"
endtime = "15:13"

subprocess.run('ffmpeg -ss ' + start + ' -to ' + end + ' -i '+ in_video +' -c copy -y ' + out_video )

starttimeに開始時間を、endtimeに終了時間を指定します。
こちらのコードを使用すると、input.mp4の10:45時点から15:13時点までの動画がcut.mp4として出力されます。動画の一部だけが必要な場合などに便利ですね!

ちなみにffmpeg の -c copy というオプションは、動画や音声のコーデックを変換せずにそのままコピーするという意味です。このオプションを付けていると動画の画質がそのまま反映され、処理も早くなります。
ffmpeg の -y というオプションは、出力ファイルがすでに存在する場合に上書きするという意味です。-y を使わない場合は、出力ファイルが存在するとエラーが発生します。指定した時間を調整してもう一度やり直したい場合などにはこの-yオプションをつけておくと便利です。

今回はPython×ffmpegで動画の指定した範囲だけを抽出する方法をご紹介しました。この機能だけでも便利ですが、ffmpegやpythonの他の機能を利用することでさらに便利になる機能です。そちらは、今後ご紹介できればと思います!

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