有什么方法可以在多台计算机上分发x264编码作业(以提高编码速度)?


29

有谁知道当前有效的解决方案,可以在多台计算机上(通过网络)对x264视频进行编码以提高FPS编码?

Brownie指出了跨平台和开放源代码,但众所周知,我通常使用Windows。


我听说过的程序,以及为什么我不认为它们合适的原因:

  • x264farm:未积极开发。界面不错,但不支持两次通过编码,并且在更新的x264版本中失败。
  • 埃尔德:同样,不是积极开发的,但是我的问题是它不适用于新的x264版本,并且配置非常困难(阅读:随机停止工作)。

虽然我不需要绝对需要一个正在积极开发的程序,但我想要一个支持两次通过编码并可以与new(er)x264 build一起使用的程序


附加信息:到目前为止,自两年多前我首次发布该问题以来,我已经为该问题提供了(并获得了奖励)两个奖励,但是我仍然没有找到解决该问题的方法。我要寻找的基本上是一个简单的程序,使我可以使用通过LAN连接的多台计算机的处理能力对x264视频进行编码。此外,如果它可以与新的x264版本一起使用并支持两次通过编码,那就太好了。

如果有人在任何时候有更新的答案或对该问题的新解决方案,请发布它,并将给予一些考虑。


2016更新

经过我在计算机/机器视觉方面的大量工作经验后,我逐渐意识到与大量共享数据/内存相关的开销以及它所带来的潜在瓶颈,可能会超过潜在的好处。

虽然我仍然很乐意找到可以让我利用多个设备的闲置计算能力的功能,但是目前,如果需要改进的/实时编码,基于GPGP的现代编码器是更好的方法。这是大多数基于云的视频编码平台提供的功能(如果您更喜欢SaaS或云计算,则可以提供另一种选择),尽管规模更大。


仍在努力。x264farm只是渲染管理器,看来您应该能够在从属PC上放置任何您喜欢的x264版本。您是否尝试过,如果这样做会弹出什么错误?
凯克


1
我意识到这是一个老话题,但是我认为我应该分享我的个人经验。不要将一项工作分配到多台机器上,这是浪费时间,分配到多个内核已经降低了性能,并且有多个物理处理器,然后是多台机器,每台机器都有IO问题和延迟。话虽这么说,仅在真正需要的时候使用它,如果有多个文件(作业),按文件分发,我相信Squeeze可以在多台计算机上分发负载,但这非常昂贵。
谢恩·徐2013年

@ShaneHsu感谢您的分享。我第一次在四年前写的这个问题,在那个时候,我用的是做这项工作的机器是不是几乎一样强大的一个我现在有,所以它做了很多更有意义当年走这条路线。今天,我必须同意您的意见-如果渲染速度成为问题,最好将整个作业卸载到另一台机器上,而不是将一个作业拆分成多个块(并让一个h.264编码器实例处理)任何多线程/多核编码(如果需要)。
突破2013年

我正在尝试做相同的事情,但是不幸的是,看起来该线程中充满了半生不熟的解决方案或不再存在的项目。看来您的需求已逐渐消失,但是自上次更新以来,如果您对可能的解决方案有任何更多的了解,请告诉我。
Locksleyu

Answers:


6

您可以渲染视频的单独部分,并使用VirtualDub将其全部与“复制”模式(不进行编码)拼接在一起。它不是真正的分布式编码或其他任何东西,但是最简单的解决方案有时效果最好。


5
再次,这个唯一的问题是,有渲染视频的时候是质量损失,由于I / B帧的位置。需要使用场景检测算法来确定将视频分割到什么位置,并且需要以某种方式将视频分割为该帧...
突破

VirtualDub确实具有应在场景切换检测中使用的那些“绿色和红色”图标。如果我几年前的记忆正确地为我服务,那么效果很好。但是话又说回来,我是视频和视频编码方面的业余爱好者。
IvanVučica09年

AFAIK VirtualDub具有“转到下一帧”命令。我只是手动拆分。
卡米洛·马丁

@Breakthrough因此,您所需要的只是一个过滤器,该过滤器可将视频输入在场景更改边界处拆分为多个块(以便可以分别对其进行编码)?这很简单。还有其他问题吗?
GroovyDotCom 2015年

@GroovyDotCom除此之外,还不错,所有支持软件(例如,用于启动拆分过滤器的服务器,将其分发给所有运行编码器的客户端节点,将作业排入队列,将文件传输回主服务器,然后重新合并结果)仍然需要处理,并且仍然无法通过在单个片段中对大型视频进行编码的方法解决任何潜在的质量/效率问题。还要注意,这个问题目前已经存在了将近六年,因此,我相信自那时以来,有关分布式编码的变化也很大。
突破

4

它是beta版,但功能强大。它不是那么简单,但是可以。它基于Windows,免费。

艾尔德一些Doom9家伙


2
我也看到了这一点,但我希望能得到与x264farm相当的东西-x264farm不会对质量造成任何打击……而且,该项目已被放弃了一段时间。
突破

1
我本来获得了50点悬赏这个答案,因为它是最接近的解决方案在那个时候。但是,与单计算机编码器相比,此程序确实有一些质量损失。我希望避免质量下降。
突破

@Breakthrough如果您将目标放高一点,例如使它变差10%,则将设置(详细信息/帧大小/等)提高10%,该怎么办?
tobylane 2011年

@tobylane,问题在于渲染视频时I / B帧的位置。需要使用场景检测算法来确定在何处分割视频,并且需要以某种方式在正好该帧处分割视频。根据源材料的不同,这通常是不可能做到完美的,因此,一次编码整个视频通常会产生更好的质量,然后将其分块渲染。
突破

2
@Breakthrough x264默认情况下最大GOP为250帧,高清素材甚至更少。它将在某个时候关闭GOP(除非您不对其进行调整),然后,如果您将GOP终止于何处,就不会有质量损失,不幸的是,这不是很可预测的。无论如何,在1.5小时长的电影中,将其分成6个15分钟。场景更改中的块不会损害太多可压缩性。它确实有帮助!
卡米洛·马丁

3

您也可以尝试使用this,它是Windows的并行/分布式编码软件,效果很好,并且缩放性也很好。

尝试对xcode并行编码器进行谷歌搜索。

这些链接应提供更多信息。

http://superscalar.pbworks.com/


无关:Apple的Xcode文档中关于并行编译如何与Xgrid一起使用的命名看起来像撕裂一样。(IDE与视频编码器)
Chealion 2010年

ic,我不是mac用户,但是您应该尝试此操作,尽管它仅适用于Windows。我的设置具有约10 GHz的综合处理能力,并且90分钟长的视频平均需要30-32分钟进行转换(x.264 / AAC / 1800 kbs vbr / 256 kbs音频)。
dxblitzx

感谢您的答复。我已将其更改为当前的正确答案,因为此解决方案最接近我想要的解决方案!:)
突破

2

对于Final Cut Studio(仅限Mac)的用户,x264 QuickTime组件与通过QMaster创建的群集一起使用时效果非常好。将影片加载到Compressor中,然后消失。在测试中,我发现不错的速度提高了,尤其是在共享存储点上工作时。


3
该死的...我是Windows用户。但是,这看起来很酷,并且与我正在寻找的东西相似-我只是希望它是多平台的!
突破


2

我是Sony Vegas的Windows视频编辑的忠实拥护者,并且有一个名为Network Render的功能。:)百胜。

索尼维加斯工作流程

编辑:不太确定这是否是可行的解决方案,但我没有找到支持网络渲染的视频编码应用程序,而是尝试找到一种使任何应用程序都能利用分布式计算的软件。我找到了这个-IAIDataShareServer

它看起来非常强大,并且示例发布的结果确实很棒。如果您要尝试,请告诉我们它是如何工作的?

EDIT2: IAIDataShareServer似乎只是在指示机器运行单个任务。在这种程度上,我试图寻找其他分布式计算解决方案的源头,并列举了一些有前途的解决方案。

  1. JPPF
  2. XOREAX
  3. DCEZ(这个看起来不错)


1
@Breakthrough:嗨,队友,找到了新的可能的解决方案。虽然未经我自己测试。参见编辑后的答案。祝好运!
caliban

2
@scopedreams:我看到了,并立即认为它是完美的...不幸的是,分布式数据共享仅在连接到它的每台计算机上运行程序的实例-对于运行许多作业非常有用,每个客户端一次只能处理一个作业...但就我而言,我只希望在许多计算机之间并行计算一项工作。
突破

1
@Breakthrough:argh darn,我想回到网上。
caliban

1
@Breakthrough:更新了我的答案以提供分布式计算客户端的列表。再次,未经测试。不用担心接受我的答案,我正在这样做,也可以为自己学习新知识。:)
caliban

1

一个简单的事实是,迄今为止,世界上所有的开发人员都没有为当前的x264编写和提交分布式TCP:IP / UDP通用编码客户端/服务器补丁感到烦恼,而从1745年至今,请参见x264.nl/

通用的客户端/服务器模型以及清晰的x264代码库都是众所周知的,并且要求澄清任何x264代码是加入x264 dev IRC频道并询问的简单问题,通常几分钟之内您将获得一个关键的x264 Dev一两个人就该代码部分的工作方式回答了您的查询,甚至获得了有关如何重新编写不断发展的代码以更好地适合x264(以及x262基于x264世界一流框架的新Mpeg2编码器)的实用想法现在)模型。

因此,如果您是一名开发人员,那么对于质量和职业的未来,您可以做的最好的事情是32/64位x264分布式视频编码,实际上是编写这些必需的基本客户端/服务器补丁以制作一个x264实例或单独的Web / GUI应用界面与您编写的此新客户端/服务器x264 API代码进行交互,以主动查找单个视频的单独编码部分,并将其动态分配给您还编写的任何新的匹配托管x264客户端代码,并将其传递给其他人。

您的新客户端/服务器真正分布式编码基础补丁甚至不需要是最大的,只需经过测试和使用的基本但可以正常工作的功能齐全的C代码即可doom10.org/index.php?action=unread

,因为x264开发人员似乎喜欢做一件事,那就是采用现有的慢速C代码并逐节编写其优化版本,但是您实际上需要首先针对(最新分行OC

值得研究,并且实际上正在努力将这些x264服务器编码为当今的许多x264客户端补丁,因为x264只是具有10位深度编码功能(这意味着高质量High,High 10,High 4:2:2H。现在,通过添加x264,每个人都可以免费使用264个计算密集型配置文件。

即将通过组装进行优化以提高速度http://mailman.videolan.org/pipermail/x264-devel/2010-October/007858.html

但是即使是一台8核机器,也很难在合理的时间内以1080P提供最高质量的输出,并且很快就会有2K和4K超高清晰度等,真正易于设置和使用的分布式x264 / H.264本机编码选项一两个补丁就好了。

如果您的开发人员请不要等待,请立即进行。


实际上,我考虑过要这样做。主要的问题实际上不是让两台计算机来执行计算,而是在计算机之间传输工作集数据。在单台计算机上将数据移入和移出RAM的过程要容易得多(但是每秒要传输数GB),而在LAN上则要慢得多(最大速度为每秒100兆字节)。
突破

1

您可以看看Media Encoding Cluster

媒体编码群集是第一个用C / C ++编写的用于分布式媒体(视频和音频)编码的开源群集编码解决方案。

Media Encoding Cluster是一种可扩展的视频编码器,它使用轻量级的点对点网格来利用常规PC的处理能力,以分发高度压缩的视频(例如MPEG4和H.264)的编码。

它通过网络将视频块分配到客户端节点,并在多于一台计算机上并行处理一个文件的编码任务,以减少每个文件的编码时间。

Badaboom为Nvidia提供了另一种方法(试用版为39.99美元),也可以在这里查看

Elemental的Badaboom使用Nvidia的CUDA接口,通过使用GPU而不是发霉的旧CPU来完成DVD翻录的繁琐工作。

同样,也有Wikipedia中描述的用于ATI Radeon的Avivo Video Converter ,尽管可能需要一些努力才能使其正常工作。


@突破:您看过这些产品吗?
哈里奇2011年

1

尽管这可能是一个过高的建议,但Rhozet Carbon Server可以将多个Carbon Coder实例组合在一起进行您描述的工作。

Rhozet Carbon服务器的网站

可以将多个Carbon Coder节点配置为一个或多个Carbon Server控制的转码场。Carbon Server允许自动处理大量转码任务,Carbon Coder节点的服务器控制的故障转移,以及管理作业分配,作业优先级,负载平衡,FTP传输,状态监视和作业通知。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.