ここまでで出たエラー
①ユニコードエラー
file_path = "C:\Users\~~~~~~~~\sozai\OP.mp4"
^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape
原因
動画素材フォルダのパスに含まれる”\”が”\n”みたいなコマンドの一部と見なされてて
パスじゃないと思われてる。
解決策
“\”を”\\”にする。
参考になったサイト
【Python】エラー:unicode error “unicodeescape”の原因と解決方法 | OFFICE54
PythonやDjangoでプログラムを組んでいると予期しないエラーが発生することが多々あります。そのエラーの1つ、unicode error “unicodeescape”の原因や解決方法について詳しく解説いたします。
②メモリ不足
動画素材を短く切って後ろにくっつける作業を400回くらい繰り返すと、
なんのエラーも出ずに終了する。
原因
切り取った短い動画が上書きされていってると思ったら、バッファに残りまくってたみたい。結局メモリ不足で必要な数まで処理を続けられなかった。
解決策
for num in range(101):
tstart = random.randint(0,85)
##短く切り取る始点の秒数をランダムに選ぶ
div2 = sozai.subclip(tstart,tstart+(60/BPM*beats))
##subclipで切り取る
div1 = concatenate_videoclips([div1,div2])
##div1(ベースになる動画ファイル)とdiv2(後ろにくっつける動画ファイル)をくっつける
num += 1
##ループ回数のカウント
part_clip = div1
##div1を後でクリアするから別の箱に入れ替える
exec("part_clip.write_videofile(\"part%d.mp4\",codec='libx264',audio_codec='aac',temp_audiofile='temp-audio.m4a',remove_temp=True)" % (num1+1))
##100個くっつけたのを一旦書き出し
del div1
##div1をクリアしてメモリ開放
繋げ終わった短い動画はdelで消して逐一メモリを解放させる。
長さによってはそれでもメモリ不足になりそうだったから、切り取って繋げる処理を100回したら1度書き出して、最後に全部繋げることにした。
終わりに
もっとたくさんエラーが出てたんだけど構文の記述ミスだったりで
ショボくて書くほどじゃなかった。
Moviepy特有のエラーがもっと出てたらもっと役に立つ記事になったのに。
次回はブラッシュアップします。
コメント