我目前正在使用linode服务器转码用户上传的视频,并使用s3来存储它们,但是,作为乐观主义者,我想将转码转移到Amazon EC2,以便在必要时进行扩展,以获得使用它。到目前为止,这是我的工作流程:
显然以上是基本的,并没有将EC2用于其全部目的。我曾考虑使用线程连接到队列并在同一EC2实例上运行新作业或创建其他EC2实例,其中启动脚本将运行ruby脚本。对于前者,我们需要根据CPU使用情况限制同一EC2中的作业数量。
后者似乎是浪费,但鉴于视频转码是cpu密集型,可能同时两个ffmpegs是不可行的。我也考虑过亚马逊的自动扩展来创建新实例,但使用Ruby对我来说似乎更简单,更容易。
除非必要,否则我不想运行任何EC2实例,从实例中获取最大数量,但不要让我的用户等待太长时间才能对其视频进行转码。
基于这篇文章http://stream0.org/2009/10/h264-video-encoding-on-amazons.htmlhttp://stream0.org/2009/10/h264-video-encoding-on-amazons.html 高CPU,超大型实例似乎是最佳选择。当然我打算做一些自己的测试,但在潜入之前我想得到一些专家的意见。谢谢!
这结果是一篇文章,对不起。
答案 0 :(得分:2)
我今天在本地计算机上运行了一些测试来测试多个ffmpeg进程的CPU使用情况。我在互联网上找到了以下命令,到目前为止它工作得体,它编码为flv,减少文件大小而没有明显的质量差异。我对ffmpeg几乎一无所知,所以也许命令是完全废话(如果是的话请告诉我)。一个问题是它不支持ffmpeg中的线程,但我认为这可能是编解码器的事情。
ffmpeg -i explanation-ace-2-3.mp4 -ab 96k -ar 22050 -qscale 6 output3.flv
我以半秒为间隔使用top -b -d 0.5
来衡量CPU使用率,并grep Cpu
获取相关信息。文件大小约为150mbs,并使用相同的ffmpeg命令进行编码。我让这个过程运行一点,然后开始一个新的过程,这是我的结果:
1 FFMPEG | **0.84mbs/sec**
- 306.31 secs - 5:06
Cpu(s): 23.6%us, 2.9%sy, 73.6%id
Cpu(s): 23.7%us, 2.4%sy, 73.9%id
Cpu(s): 23.6%us, 1.9%sy, 74.5%id
2 FFMPEG | 1.6 mbs/sec
- 319.25 secs - 5:18
- 319.04 secs - 5:18
Cpu(s): 45.9%us, 4.4%sy, 49.8%id
Cpu(s): 45.0%us, 5.7%sy, 49.3%id
Cpu(s): 42.9%us, 8.3%sy, 48.8%id
3 FFMPEGs | **2.23 mbs/sec**
- 344.72 secs - 5:44
- 342.12 secs - 5:42
- 340.39 secs - 5:40
Cpu(s): 68.8%us, 7.3%sy, 23.9%id
Cpu(s): 70.9%us, 6.9%sy, 22.2%id
Cpu(s): 66.0%us, 9.9%sy, 24.1%id
4 FFMPEGs | **2.69 mbs/sec**
- 379.36 secs - 6.32
- 379.70 secs - 6.33
- 380.89 secs - 6.35
- 378.14 secs - 6.30
Cpu(s): 88.2%us, 11.8%sy, 0.0%id
Cpu(s): 87.7%us, 12.3%sy, 0.0%id
Cpu(s): 89.7%us, 10.3%sy, 0.0%id
5 FFMPEGs | **2.61 mbs/sec**
- 459.79 secs - 7.66
- 469.03 secs - 7.82
- 448.15 secs - 7.47
- 458.62 secs - 7.64
- 489.47 secs - 8.16
Cpu(s): 93.1%us, 6.4%sy, 0.0%id
Cpu(s): 88.7%us, 11.3%sy, 0.0%id
Cpu(s): 92.2%us, 7.8%sy, 0.0%id
根据这些数据,逐个转换视频的资源使用率很低,而且ffmpeg进程相当稳定,减去几个峰值。 ffmpeg的4个实例,至少对我的机器来说,似乎是最有效的。
我似乎无法使用系统命令使用Thread
或fork
并行运行两个ffmpeg进程。
有没有人对此有任何想法?特别是如何使用Ruby脚本运行两个ffmpeg进程?