web-dev-qa-db-ja.com

Moviepyを使用して画像シーケンスをビデオに変換する

ディレクトリ内のリスト画像でPNG画像をビデオに変換しようとしました

clips[]
for filename in os.listdir('.'):
  if filename.endswith(".png"):
    clips.append(ImageClip(filename))

enter image description here

次にそれを変換します

video = concatenate(clips, method='compose')
video.write_videofile('test.mp4')

エラーは次のとおりです: enter image description here 完全なコード

import os
from moviepy.editor import *


clips = []
base_dir = os.path.realpath(".")
print(base_dir)

for filename in os.listdir('.'):
  if filename.endswith(".png"):
    clips.append(ImageClip(filename))

video = concatenate(clips, method='compose')
video.write_videofile('test.mp4')
7
Adil Blanco

私はそれを行う別の方法を見つけました:

from moviepy.editor import *

img = ['1.png', '2.png', '3.png', '4.png', '5.png', '6.png',
       '7.png', '8.png', '9.png', '10.png', '11.png', '12.png']

clips = [ImageClip(m).set_duration(2)
      for m in img]

concat_clip = concatenate_videoclips(clips, method="compose")
concat_clip.write_videofile("test.mp4", fps=24)

そして現在のフォルダから:

import os
import glob
from natsort import natsorted
from moviepy.editor import *

base_dir = os.path.realpath("./images")
print(base_dir)

gif_name = 'pic'
fps = 24

file_list = glob.glob('*.png')  # Get all the pngs in the current directory
file_list_sorted = natsorted(file_list,reverse=False)  # Sort the images

clips = [ImageClip(m).set_duration(2)
         for m in file_list_sorted]

concat_clip = concatenate_videoclips(clips, method="compose")
concat_clip.write_videofile("test.mp4", fps=fps)
4
Adil Blanco

これは私があなたの最初のコードを使ってそれをした方法です。表示されていたエラーは、クリップにset_durationを指定しなかったことが原因でした。また、ディレクトリ内のファイルを並べ替えて、結果のmp4がシーケンシャルになるようにしました(デフォルトではそうではありませんでした)。

    import os
    from moviepy.editor import *

    base_dir = os.path.realpath(".")
    print(base_dir)
    directory=sorted(os.listdir('.'))
    print(directory)

    for filename in directory:
      if filename.endswith(".png"):
        clips.append(ImageClip(filename).set_duration(1))

print(clips)
video = concatenate(clips, method="compose")
video.write_videofile('test1.mp4', fps=24)
4
cy_b0rg