2

プロセスが完了するのを待たずに、同時に moviepy でビデオ クリップをビデオ ファイルとして同時に書き込む作業を行います。

したがって、ビデオを 5 秒のクリップに分割します

     n=0
     p = 5
     clip = mp.VideoFileClip(videofile).subclip(n, n+p)

次に、ビデオに字幕を追加します。

    x = 0
    text2 = 'hello'+str(x)
    text[x] = TextClip(text2, font='Amiri-regular',color='white',fontsize=24).set_duration(p).set_start(0)

次に、最初の 5 つのクリップでこれを繰り返し、5 番目のクリップでクリップをビデオ ファイルとして書き込みます。

書き込みがバックグラウンドで続行されている間、残りのビデオの処理を続行したいので、@Roland Smith によって提案されたコードを編集した後、マルチプロセッシングを使用します。

if float.is_integer(float(x)/5.0) == True and x != 0:
    text2 = concatenate(text.values())
    textd = text2.on_color(size=(clip.w ,text2.h),color=(0,0,0), col_opacity=0.6).set_pos('bottom')
    video3[n] = CompositeVideoClip([VideoFileClip(videofile).subclip(n,5+n), textd])



def audioclip(data):
    outname = str(data)[-10:].strip('>') + '.mp4'
    data.write_videofile(outname,fps=24, codec='libx264')       
    return outname

names = video3.values()
h = multiprocessing.Pool()
audiofiles = h.map(audioclip, names)
gc.collect()
n = n+p
x = x+1

輸入していた

    from moviepy.editor import *
    import moviepy.editor as mp
    import os 
    import multiprocessing
    from multiprocessing import pool

ただし、次のエラーが発生します。

     Traceback (most recent call last):
      File "p2 (copy).py", line 128, in <module>
audiofiles = h.map(audioclip, names)
      File "/usr/lib/python2.7/multiprocessing/pool.py", line 251, in map
return self.map_async(func, iterable, chunksize).get()
      File "/usr/lib/python2.7/multiprocessing/pool.py", line 558, in get
raise self._value
    cPickle.PicklingError: Can't pickle <type 'function'>: attribute lookup __builtin__.function failed

助けてください

4

1 に答える 1