自動でAMVを生成したい② エラー対処

ここまでで出たエラー

①ユニコードエラー

    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特有のエラーがもっと出てたらもっと役に立つ記事になったのに。

次回はブラッシュアップします。

コメント

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