Высокопроизводительное редактирование видео в Python - PullRequest
0 голосов
/ 29 октября 2018

Я пытаюсь добавить водяной знак на очень короткую часть видео mp4. Это должно быть очень, очень быстро. Теперь я попытался сделать это с moviepy Вот мой код:

import moviepy.editor as mp

video = mp.VideoFileClip("video.mp4")
part1 = video.subclip(0,10)
part2 = video.subclip(10,15)
part3 = video.subclip(15,152.56)
logo = (mp.ImageClip("logo.png")
      .set_duration(part2.duration)
      .resize(height=50) # if you need to resize...
      .margin(right=8, top=8, opacity=0) # (optional) logo-border padding
      .set_pos(("right","top")))

partSubtitles = mp.CompositeVideoClip([part2, logo])
final_clip = mp.concatenate_videoclips([part1, partSubtitles, part3])
final_clip.write_videofile("my_concatenation.mp4")

Добавление логотипа и объединение видео работает практически мгновенно, но запись на диск занимает 1 минуту для видео продолжительностью 2 минуты, что значительно дольше. Знаете ли вы способ редактирования только нескольких кадров и сохранения этого гораздо быстрее?

Во-вторых, после преобразования новый файл увеличивается примерно на 40%. Зачем? Как это исправить?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Я пробовал FFMPEG, но производительность также была низкой, чтобы сделать видео по запросу.

Мы купили более сильный и крупный сервер и теперь постоянно обрабатываем файлы - чтобы всегда быть готовыми к новым наблюдателям. Это не идеальное решение, но гораздо более масштабируемое.

Чтобы увеличить скорость видео / ч, я не использовал moviepy, а FFMPEG - повышение производительности на 30% и снижение качества видео / уменьшение размера файлов.

0 голосов
/ 29 октября 2018

Перекодирование видео всегда будет медленным процессом, и я сомневаюсь, что по умолчанию moviepy использует (или даже может использовать) высокопроизводительный кодировщик. Самое быстрое общее решение - это, вероятно, использовать FFMPEG для полного редактирования, если это вообще возможно. Например, вот быстрая демонстрация того, как добавлять водяные знаки, используя FFMPEG . Использование такого низкоуровневого инструмента - это, вероятно, ваш лучший шанс получить высокопроизводительное редактирование, и, если вам нужно выполнить его из Python, просто вызовите команду ffmpeg, используя подпроцесс .

...