自動でAMVを生成したい④ 動画の長さを取得

動画ファイルの長さを取得する

どこをスタートとして切り取って使うかランダムに決める部分のコードを
もっと受動的なコードに直していく。

これまでの記事みたいに新たに実装するわけではなく、
既に同様の機能を簡易的に実装してるので
改良前後を比較する形にします。

現在のコード

tstart = random.randint(0,85) ##カットの開始点を0秒から85秒までの間のどこかとする

使う動画素材が大抵アニメのOP,EDの動画で、
尺が90秒くらいと相場が決まっている。

なので今は決め打ちで0秒~85秒のどこかをスタートとしてる。

これを動画ファイルのプロパティから”長さ”の情報を参照して、
実数じゃなくて変数にする。

コードを改良していく

動画の長さを取得する

Moviepyのdurationメソッドを使ったらめっちゃ簡単にできた。

sozai = VideoFileClip(file_list[random.randint(0,len(file_list)-1)]) ##リストからランダムに動画を選択
length = sozai.duration ##lengthに動画の長さを格納
print("動画の長さ:"+str(length)) ##動画の長さを表示

出力結果

動画の長さ:90.88

開始点を決めるのに使う

sozai = VideoFileClip(file_list[random.randint(0,len(file_list)-1)])
length = sozai.duration

tstart = random.randint(0,length-(60/BPM*beats)) ##0秒から(動画の長さ-1カットの長さ)秒の間で開始点を選択
div1 = sozai.subclip(tstart,tstart+(60/BPM*beats)) ##開始点1カット分切り取る

これで極端に短い動画じゃなければ、どんな長さの動画でも自動で長さを取得して、開始点の設定に使えるようになった。

参考になったサイト

MoviePy – Getting Duration of Video File Clip – GeeksforGeeks
https://www.geeksforgeeks.org/moviepy-getting-duration-of-video-file-clip/

終わりに

ひとまず基本的な機能は実装が完了したから、一旦機能を細かく関数化してみようと思う。
可読性が上がればメンテナンスするときに困らなそうだし。

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