首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

moviepy性能解读,视频拼接性能怎样? 能作为服务器端多线程处理吗?如何提高moviepy处理速度

  • 23-09-22 20:41
  • 2640
  • 7474
blog.csdn.net

性能解读

首先要指出的是。MoviePy 基于ffmpeg ,视频的最后生成,用的就是ffmpeg。所以,讨论MoviePy的性能问题,归根到底是讨论ffmpeg的性能。

关于moviepy的程序执行过程,理论上所有耗时操作只发生在将clip写出到文件的时候。基于此因素,在实际操作中,尽量只在合成最后才进行视频的导出操作,即 write_videofile

关于,ffmpeg的性能呢,一般需要看CPU是否给力,根据我们使用的经验来看,合成的速度是取决于CPU 的,很多时候CPU飙到很高,内存(Memory)占用率并不是很高。但是ffmpeg有一个很不好的特点,在长时间运行后,容易导致OOM,这或许是和长时间运行产生大量缓存垃圾有关,我们曾经尝试连续8小时运行ffmpeg做视频处理,每次运行完毕之后清除cache,杀掉已经存在的ffmpeg,最后还是不幸挂掉 。所以,如果要比较严谨地进行服务端的视频处理,需要做好事务回滚。

案例 :我们通过维护一个RabbitMQ队列,存放视频处理任务,运行一批相互独立的任务消费者,共享素材挂载,合成视频。遇到两个大的考验。第一,ffmpeg的OOM问题。第二,RabbitMQ消费者心跳超时的问题。OOM问题上面已经说过,RabbitMQ心跳超时,首先需要知道的是,rabbitMQ的默认心跳时间是60s,如果超过60秒时间消费者没有和RabbitMQ服务器传送心跳,服务器会认为这个消费进程死掉了,会将这个任务重新放回队列,分发给其他消费者。要知道,视频合成时间一般很长,我们尝试着改过RabbitMQ的默认心跳时间,发现60s的心跳时间是一个比较合理的值,改长的话,进程最后会真的找不到服务器,但是服务器认为这个消费进程还活着,服务端的消费者进程状态无法及时刷新造成实际状态与服务器状态存在时间差,这段时间差 = 心跳时间 - (服务器刷新状态时间点 - 消费进程死掉时间点) 这是一件很危险的事,所以,最好不要轻易改动默认的心跳时间。而解决心跳超时的办法就是在耗时操作时调用Rabbit提供的方法,手动发送心跳。

能作为服务器端多线程处理吗?

首先,如果速度要求比较高,处理比较复杂的话,服务端不是很现实,ffmpeg会导致很容易OOM,成本会很大。第二,多线程处理,少量可以,一般超过10个线程机器会疯

如何提高MoviePy处理速度

1.更优化的视频导出时机
2.CPU升级
3.ffmpeg开启GPU加速(还没有试过,有空试了出教程)

回到问题目录

注:本文转载自blog.csdn.net的ucsheep的文章"https://blog.csdn.net/ucsheep/article/details/84392215"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top