Python×FFmpegで動画を作ろう

動画処理

Python×FFmpegで動画を作ろう

ffmpegについてはこちらのサイトが参考になります。こちらの手順に従ってffmpegを使用します。
ffmpegの何が良いかというと
・編集ソフトを使わなくても動画を処理できる
・高速な処理が可能
・大量の動画データに対して実行可能
などが挙げられます。
ffmpegはコマンドラインから実行するソフトウェアです。

ffmpeg -i input.MOV output.mp4

コマンドラインからこれを実行するだけで、iPhoneで撮影した動画をmp4に変換することができます。

あくまでコマンドラインから操作するソフトウェアなので複雑な動画編集には向いていません。細かい調整をしたい場合は視覚的な操作のできる動画編集ソフトの方が向いています。一方で、大量のファイルに同じ処理を施すときや定型パターンを繰り返すときにはとても有効なソフトです。

Pythonからffmpegを使用する場合ライブラリのffmpeg-Pythonもありますが、今回はサブプロセスを使用してOSから実行する方法を使用しています。
Pythonからサププロセスで使用する利点は二つあります。まずは、コマンドラインに比べて自由に書けること。いちいちパラメータを書くのは面倒だなと感じたのが私がPython×ffmpegに移行した理由です。毎回全く違うことをやるのではない限り、結局自分で使用する処理というのはだいたい決まってくると思うのでコードに残しておいてパラメータだけ変えてあげたら十分だと感じます.
ライブラリのffmpeg-Pythonを使用していないのは、情報量の多さからです。ffmpegは多く使用されているソフトウェアなのでffmpegについて書かれた記事は多くあります。一方で、ffmpeg-Pythonとなると途端に情報量が落ちます。機能がどこまで使用できるのか、最新版にどこまで対応しているかなども情報が出で来ません。ffmpegを直接起動して使用する方が、得られた情報をそのまま利用できるので結局こっちの方が早いなと判断しました。
上記で紹介されているサイトを参考に、Pythonで簡単に動画を作成してみました。
・iPhoneで撮ったmov形式の動画をmp4に変換

import subprocess
#iPhoneで撮った動画(MOV)形式をmp4形式に変換
subprocess.run('ffmpeg -i input.MOV output.mp4')
クリックで変換したmp4ファイルに飛びます!

・フォルダの中の静止画から動画を作成

import glob
import os
import subprocess
target_dir= 'Pic2Vid/'
#1枚あたり何秒か
second = '5'
#出力ファイル名
merge_filename ='Pic2Vid.mp4'
count=0
pictures = glob.glob(target_dir + '/*.jpg')
#フォルダの中の画像を動画に変換
for pic in pictures:
    subprocess.run('ffmpeg -loop 1 -framerate 30 -i '+ pic +' \
                     -vcodec libx264 -pix_fmt yuv420p -t ' + second + ' -y '+ os.path.splitext(pic)[0] +'.mp4')
#変換した動画を結合する
videos = glob.glob(target_dir+'*.mp4')
with open(target_dir + 'filelist.txt', 'w') as f:
    for video in videos:
        f.write( "file '" + os.path.basename(video)+"'\n")
        count=count+1
print('{} file'.format(count))
subprocess.run('ffmpeg -f concat -safe 0 -i ' + target_dir + 'filelist.txt -y '+ merge_filename )
print('ffmpeg -f concat -safe 0 -i ' + target_dir + 'filelist.txt -y '+ merge_filename )
for video in videos:
    os.remove(video)
クリックで上記のjpgから作成した動画(1枚×5秒)に飛びます

このほかにもffmpegで出来ることは多くあります。BGMをつけたり、動画から静止画を切り取ったり、字幕をつけたり……。
扱えるファイルも幅広く、mp4やMOVのような動画だけでなくmp3、avi、wav、jpg、pngその他多様なファイル形式に対応しています。こういったメディアファイルの定型処理などにffmpegを使用するのはおすすめです。

以上がPythonでffmpegを使用する簡単な方法の紹介でした。まだまだ機能はたくさんありますので今後紹介していけたらと思います。

コメント

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