首先要指出的是。
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个线程机器会疯
1.更优化的视频导出时机
2.CPU升级
3.ffmpeg开启GPU加速(还没有试过,有空试了出教程)
回到问题目录
性能解读首先要指出的是。MoviePy 基于ffmpeg ,视频的最后生成,用的就是ffmpeg。所以,讨论MoviePy的性能问题,归根到底是讨论ffmpeg的性能。关于moviepy的程序执行过程,理论上所有耗时操作只发生在将clip写出到文件的时候。基于此因素,在实际操作中,尽量只在合成最后才进行视频的导出操作,即 write_videofile关于,ffmpeg的性能呢,一般需要看C...
libavformat实现流协议,容器格式和基本的I / O访问。
libavutil包括散列器,解压缩器和其他实用程序函数。
libavfilter提供了一种通过一系列过滤器更改解码的音频和
视频
的方法。
libavdevice提供访问访问捕获和回放设备的抽象。
libswresample实现音频混合和重采样例程。
libswscale实现颜色转换和缩放例程。
是一个命令行工具箱,用于
处理
,转换和流式传输多媒体内容。
是一种简约的多媒体播放器。
是一个简单的工具,用于检查多媒体内容。
其他小工具,例如aviocat , ismindex和qt-faststart 。
脱机文档可在doc /目录
之前其实就已经讲过了,
MoviePy
的
性能
提升,依赖于
ffmpeg
的
性能
提升,换句话说:
[
MoviePy
的GPU加速] = [
ffmpeg
的GPU加速]
ffmpeg
使用GPU加速,很多大佬都提到过,终于,我们也实现啦,
这篇文章,仅仅先说一些前期大家需要注意的事情,后续会抽时间将详细的教程写出来。
我们只搞过两个厂商显卡:Intel 和 Nvidia
Intel
关于Intel,可以使用 ...
很久没有更新了。目前使用
moviepy
的项目里各种问题接踵而至,第一批我只采集了1w个抖音短
视频
做
视频
合成,不得不说,
moviepy
还是不少缺陷的,最开始的大部分时候是
ffmpeg
引起的OOM,是我分配的内存不够,加大资源分配,每次运行完毕之后清除cache,杀掉已经存在的
ffmpeg
,稳定运行时间达到了8个小时多,然而在昨晚凌晨又死掉了。现在还在收拾,今天再来更新一下。
Mixin...
下面是
MoviePy
中的几种对clip的修改:
非常常见的修改clip属性的方法有:clip.set_duration, clip.set_audio, clip.set_mask, clip.set_start 等.
已经实现的特效.clip.subclip(t1,t2):截取t1到t2时间段内的片段;还有一些高级效果,loop:让clip循环播放、time_mirror:让cl...
创建和
导出
video clips
video 和 audio clips是
moviepy
中的核心的对象。这篇博文,我们会介绍不同的短clip,展示如何创建他们,以及如何将它们
导出
到文件中。关于修改和
处理
vedio clip的信息点这里。关于将clips合成点这里。关于在生成文件之前预览clip点这里。
接下来的代码是总结好的我们可以通过
moviepy
创建的一些基本的clips。
三步解决,dial tcp: lookup production.cloudflare.docker.com on 114.114.114.114:53: read udp i/o timeout
136302