Ожидается
- Создать ImageClips различной продолжительности и добавить:
clips = []
(строка 13-16) - Создать ImageClips в сцепленный клип:
concatenated_videoclips(clips, method="chain")
(строка 19) - Добавить аудио в сцепленный клип (строка 20-21)
- Прокручивает список файлов изображений и удаляет их из памяти (не в примере кода)
- L oop по списку
clips = [<ImageClip>]
и закрывает каждый клип, затем удаляет из списка (строка 24-29) - Возврат сцепленного клипа (строка 32) и добавление к другому списку в глобальной области видимости (не в примере кода)
- Повторите шаги 1-6
- Объедините все клипы, которые были добавлены в глобальный список, затем
set_audio(background_music_path.mp3)
(не в примере кода) - Новое видео записано
new_video_path.mp4
(не в примере кода) Цитата
Фактический
- 5% времени проходит через процесс правильный вывод видео
- 95 % времени будет равняться sh из-за убитых: 9 или пропущенная ошибка семафора
- К концу процесса достигает 120 ГБ в мониторе активности до Python venv прекращено
- Использование Tracemallo c module показывает линейное увеличение использования памяти, когда:
- Добавление нового ImageClips относится к:
- imageio / plugins / pillow.py (обертка imageio python)
- moviepy / video / VideoClip.py (из
class ImageClip(VideoClip):
)
- объединение
clips
список ImageClips : - numpy / lib / shape_base.py
Использование памяти Tracemalloc
Сразу после первого создания ImageClips:
#1
/venv/lib/python3.8/site-packages/moviepy/video/VideoClip.py:900: 293626.7 KiB
1.0 * img[:, :, 3] / 255, ismask=True)
#2
/venv/lib/python3.8/site-packages/imageio/plugins/pillow.py:792: 146813.8 KiB
frame = np.array(frame, dtype=dtype)
После того, как первый ImageClips объединены вместе:
#1
/venv/lib/python3.8/site-packages/moviepy/video/VideoClip.py:900: 293626.7 KiB
1.0 * img[:, :, 3] / 255, ismask=True)
#2
/venv/lib/python3.8/site-packages/numpy/lib/shape_base.py:1256: 234900.2 KiB
c = c.reshape(-1, n).repeat(nrep, 0)
#3
/venv/lib/python3.8/site-packages/imageio/plugins/pillow.py:792: 146813.8 KiB
frame = np.array(frame, dtype=dtype)
После нескольких итераций объединения ImageClips:
#1
/venv/lib/python3.8/site-packages/moviepy/video/VideoClip.py:900: 32709961.1 KiB
1.0 * img[:, :, 3] / 255, ismask=True)
#2
/venv/lib/python3.8/site-packages/imageio/plugins/pillow.py:792: 16355008.3 KiB
c = c.reshape(-1, n).repeat(nrep, 0)
#3
/venv/lib/python3.8/site-packages/numpy/lib/shape_base.py:1256: 6107405.9 KiB
frame = np.array(frame, dtype=dtype)
CODE ПРИМЕР
1 import random
2
3 # Moviepy library
4 from moviepy.editor import concatenate_videoclips
5 from moviepy.video.VideoClip import ImageClip
6 from moviepy.audio.io.AudioFileClip import AudioFileClip
7
8 def make_movie(img_files):
9 # List to hold all of the ImageClips
10 clips = []
11
12 # Loop through the image files and create ImageClip with random duration
13 for img in img_files:
14 duration = random.randomint(0,3)
15 with ImageClip(img, duration=duration) as img_clip:
16 clips.append(img_clip)
17
18 # Concatenate all of ImageClips in clips and save to all_clips (audio for example sake)
19 with concatenate_videoclips(clips, method="chain") as all_clips:
20 with AudioFileClip(audio_file_path.mp3) as audio_clip:
21 all_clips = all_clips.set_audio(audio_clip)
22
23 # Loop through list of clips and close individually
24 for used_clip in clips:
25 used_clip.close()
26
27 # Delete all clips in list
28 while len(clips) > 0:
29 del clips[0]
30
31 # Return concatenated clip 'all_clips'
32 return all_clips
33
34
Конечный результат
- После возврата all_clips будет добавлен в список, который в конечном итоге будет объединен еще раз для создания окончательного видеоклипа
- Проблема в том, что программе больше не нужны все фрагменты изображений после их использования, и оказалось трудным освободить их от памяти
Настройка системы
Заранее спасибо за любые предложения! 11