LoginSignup
7
5

More than 1 year has passed since last update.

ffmpeg-pythonを使って動画をトリミングする

Posted at

はじめに

自分なりにffmpeg-pythonの使い方をまとめる
ffmpeg.exesubprocessで操作するよりは目に優しそうだったので…

ffmpeg-pythonの取得

pipでインストール。

pip install ffmpeg-python

※ちなみに、似たようなラッパーがいくつかあるので注意。2ミス。

○ pip install ffmpeg-python
------------------------------
× pip install ffmpeg
× pip install python-ffmpeg

ffmpegの取得

ffmpeg-pythonはただのラッパーなので、ffmpeg.exe本体がないと使えない。FFmpeg.exeが見つからなくてもFileNotFoundになるので、事前に公式サイトから取得しておくこと。
※ちなみに、動画の編集だけならffmpeg.exeだけでいいが、動画ファイルから動画情報を取得するffmpeg.probe()という処理を実行するためにはffprobe.exeも必要なので注意。

利用方法

環境変数

「パスを通せ」と他の紹介記事では書かれていたが、スクリプトと同一フォルダに.exeを配置すればよさそう

動画をトリミングする

以下をやってみる。
- 5秒目から10秒間を切り取り
- FPSを落として
- 画質を落として、出力する(crfは数値:小=高画質、数値:大=低画質)
- 出力ファイルがあった場合は上書きする。

imort ffmpeg

ffmpeg.input('input.mp4',ss=5,t=10)\ #動画開始後、5秒目から、10秒間の動画を切り出す。
        .filter('fps', fps=15, round='up')\ #FPSを変換する。FPS:10に落とす。
        .output('output.mp4',crf=30)\ #動画をエンコードする。画質をcrf=30に指定
        .run(overwrite_output=True) #もし既存ファイルがあっても上書き保存する

動画を10秒ごとに分割する

動画ファイルの長さを抽出して、10秒ごとに分割するForループを作ってみた。

# %%
#動画の長さをffmpeg.probeで取得して小数切り上げ
info=ffmpeg.probe('input.mp4')
t=float(info["format"]["duration"])
t=int(-(-t // 1))
#0秒から動画の長さまで10秒刻みの数列を作成
start,stop,step=0,t,10
li=list(range(start,stop,step))+[stop]
li

#%%
#10秒おきに動画を分けて保存。
for i in range(len(li[:-1])):
    FILEIN="input.mp4"
    param={
        "FILEOUT":"{}_output_{}_{}.mp4".format(FILEIN[:-4],li[i],li[i+1]),
        "TIME_START":li[i],
        "TIME_END":li[i+1],
        "FPS":10,
    }
    ffmpeg.input(FILEIN,ss=param["TIME_START"],t=param["TIME_END"]-param["TIME_START"])\
        .filter('fps', fps=param["FPS"], round='up')\
        .output(param["FILEOUT"],crf=30)\
        .run(overwrite_output=True)

おわりに

必要十分な気がする。

参考記事

もし結合がしたければ以下の記事が参考になりそう。
https://blog.shikoan.com/ffmpeg-python-concat/

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5