여러 컴퓨터에 x264 인코딩 작업을 배포하여 인코딩 속도를 높일 수있는 방법이 있습니까?


29

누구든지 (네트워크를 통해) 많은 컴퓨터에서 x264 비디오를 인코딩하여 인코딩 FPS를 높이는 현재의 능동적 인 솔루션을 알고 있습니까?

크로스 플랫폼 및 오픈 소스에 대한 브라우니 포인트, 그러나 모두 알다시피, 나는 보통 Windows를 사용합니다.


내가 들어 본 프로그램과 왜 그것이 적합하지 않다고 생각합니까?

  • x264farm : 적극적으로 개발되지 않았습니다. 인터페이스는 양호하지만 2 패스 인코딩을 지원하지 않으며 최신 x264 빌드에서는 실패합니다.
  • 노인 : 다시, 적극적으로 개발되지는 않았지만 내 문제는 새로운 x264 빌드에서 작동하지 않으며 구성하기가 매우 어렵다는 것입니다 (읽기 : 무작위로 작동을 멈췄습니다).

적극적으로 개발중인 프로그램이 절대적으로 필요하지는 않지만 2 패스 인코딩지원 하고 새로운 x264 빌드 와 함께 작동 하는 프로그램을 원합니다 .


추가 정보 : 지금까지 저는 2 년 전에 처음 게시 한 이후이 질문에 대해 두 개의 별도 현상금을 제공 (및 수여했습니다)했지만 여전히이 문제에 대한 해결책을 찾지 못했습니다. 내가 찾고있는 것은 기본적으로 LAN을 통해 연결된 여러 컴퓨터의 처리 능력을 사용하여 x264 비디오를 인코딩 할 수있는 간단한 프로그램입니다. 또한 새로운 x264 빌드로 작업하고 2 패스 인코딩을 지원하면 좋을 것입니다.

누군가가 업데이트 된 답변이 나이 문제에 대한 새로운 해결책을 가지고 있다면 그것을 게시하십시오. 그러면 약간의 고려가 주어질 것입니다.


2016 업데이트 :

컴퓨터 / 머신 비전에 대한 많은 작업 경험을 쌓은 후, 많은 양의 공유 데이터 / 메모리와 관련된 오버 헤드와 그에 따른 병목 현상이 잠재적 이점을 능가 할 수 있음을 알게되었습니다.

여러 장치의 유휴 컴퓨팅 성능을 활용할 수있는 무언가를 여전히 찾고 싶지만, 현재 GPGPU 기반 인코더는 개선 / 실시간 인코딩이 필요한 경우 훨씬 더 나은 접근 방식입니다. 이것은 규모가 크더라도 대부분의 클라우드 기반 비디오 인코딩 플랫폼이 제공하는 것입니다 (SaaS 또는 클라우드 컴퓨팅에 대한 또 다른 대안).


아직도이 일을하고 있습니다. x264farm은 렌더 관리자 일뿐입니다. 슬레이브 PC에 원하는 버전의 x264를 배치 할 수 있어야합니다. 이것을 시도 했습니까? 그렇다면 어떤 오류가 나타 납니까?
Keck


1
나는 이것이 오래된 실이라는 것을 알고 있지만 개인적인 경험을 공유해야한다고 생각합니다. 하나의 작업을 여러 시스템에 배포하지 마십시오. 시간 낭비이므로 여러 코어에 배포하면 이미 성능이 저하되고 여러 물리적 프로세서와 여러 시스템이 있으며 각각 IO 문제와 대기 시간이 있습니다. 즉, 실제로 필요한 경우에만 사용하십시오. 여러 파일 (작업)이 있고 파일별로 배포하는 경우 Squeeze가 여러 시스템에로드를 분산시킬 수 있다고 생각하지만 비용이 많이 듭니다.
Shane Hsu

@ShaneHsu 공유해 주셔서 감사합니다. 나는 4 년 전에이 질문을 처음 썼으며, 당시이 작업을 수행하는 데 사용했던 기계는 현재의 기계 만큼 강력 하지 않았기 때문에이 경로로 돌아가는 것이 훨씬 합리적이었습니다. 렌더링 속도가 문제가되는 경우 단일 작업을 여러 청크로 분할하지 않고 전체 작업을 다른 시스템으로 오프로드하는 것이 가장 좋습니다 (한 h.264 인코더 인스턴스가 처리하도록하는 것이 가장 좋습니다). 필요한 경우 모든 멀티 스레드 / 멀티 코어 인코딩).
획기적인

나는 똑같은 일을하고 싶지만 불행히도이 스레드는 더 이상 존재하지 않는 반 구운 솔루션이나 프로젝트로 가득 차있는 것처럼 보입니다. 이 작업을 수행해야 할 필요성이 사라진 것 같지만 마지막으로 업데이트 한 후 가능한 솔루션에 대한 자세한 정보가 있으면 알려주십시오.
Locksleyu

답변:


6

별도의 비디오 청크를 렌더링하고 VirtualDub를 사용하여 복사 모드 (인코딩이없는)와 함께 모두 스티칭 할 수 있습니다. 실제 분산 인코딩이나 다른 것은 아니지만 가장 간단한 솔루션이 가장 효과적입니다.


5
다시 말하지만, 이것의 유일한 문제점 은 비디오를 렌더링 할 때 I / B 프레임의 배치로 인해 품질 손실 이 발생한다는 것 입니다 . 장면 감지 알고리즘을 사용하여 분할 할 위치를 결정해야하며 어떻게 든 비디오를 정확히 해당 프레임에서 분할해야합니다.
Breakthrough

VirtualDub에는 장면 전환 감지에 사용되는 "녹색 및 빨간색"아이콘이 있습니다. 몇 년 전의 추억이 저에게 올바르게 봉사한다면 아주 잘 작동했습니다. 그러나 다시, 비디오 및 비디오 인코딩과 관련하여 아마추어입니다.
Ivan Vučica

AFAIK VirtualDub에는 "다음 프레임으로 이동"명령이 있습니다. 방금 수동으로 나누었습니다.
Camilo Martin

@Breakthrough 그렇다면 장면 변경 경계에서 비디오 입력을 청크로 분할하는 필터 만 있으면됩니다 (따라서 별도로 인코딩 할 수 있습니까). 충분히 간단합니다. 다른 문제가 있습니까?
GroovyDotCom

@GroovyDotCom뿐만 아니라 모든 지원 소프트웨어 (예 : 분할 필터를 시작하는 서버, 인코더를 실행하는 모든 클라이언트 노드에 배포, 작업 대기, 파일을 다시 주 서버로 전송 및 서버 병합) 결과) 여전히 처리해야하며 개별 세그먼트로 큰 비디오를 인코딩하는 방법과 관련하여 잠재적 인 품질 / 효율 문제를 해결하지 못합니다. 또한이 질문은이 시점에서 거의 6 세가되었으므로 분산 인코딩과 관련하여 그 이후에도 많은 변화가 있었을 것입니다.
획기적인

4

베타이지만 기능적입니다. 그것은 간단하지는 않지만 작동합니다. Windows 기반이며 무료입니다.

일부 Doom9 녀석의 장로


2
나는 또한 그것을 보았지만 x264farm과 비슷한 것을 기대하고있었습니다. x264farm에 대한 품질 저하는 없습니다 ... 또한 프로젝트는 꽤 오랫동안 포기되었습니다.
획기적인

1
그것은 가장 가까운 솔루션 이었기 때문에 나는 원래이 답변에 50 포인트 현상금을 수여 그때는 . 그러나이 프로그램은 단일 컴퓨터 인코더와 비교하여 약간의 품질 손실이있었습니다. 나는 품질에 대한 타격을 피하기를 바라고 있습니다.
획기적인

@Breakthrough 10 % 더 나쁘게 설정 (세부 / 프레임 크기 등)을 10 % 더 높게 만드는 것처럼 조금 더 높게 조준하면 어떻게됩니까?
tobylane

@tobylane에서 문제는 비디오를 렌더링 할 때 I / B 프레임을 배치하는 것입니다. 장면 감지 알고리즘을 사용하여 분할 위치를 결정해야하며, 어떻게 든 비디오를 정확히 해당 프레임에서 분할해야합니다. 소스 자료에 따라, 이는 완벽하게 수행하기가 불가능한 경우가 많으므로 전체 비디오를 한 번에 인코딩하면 일반적으로 품질이 좋아져 덩어리로 렌더링됩니다.
획기적인

2
@Breakthrough x264는 기본적으로 최대 GOP가 250 프레임이며 HD 자료는 훨씬 적습니다. GOP가 언젠가는 닫히지 않는 한 GOP가 닫히고 GOP가 끝나는 곳에서 슬릿하면 품질 손실이 발생하지 않습니다. 불행히도 그것은 예측할 수 없습니다. 어쨌든 1.5 시간 길이의 영화에서는 6 분 15 분으로 분할합니다. 장면 변경시 청크는 압축성을 크게 손상시키지 않습니다. 그리고 그것은 도움이됩니다!
Camilo Martin

3

또한 Windows 용 병렬 / 분산 인코딩 소프트웨어 인 이것을 사용하려고 시도하고 잘 작동하며 확장도 좋습니다.

xcode Parallel 엔코더에 대한 인터넷 검색을 시도하십시오.

이러한 링크는 자세한 정보를 제공해야합니다.

http://superscalar.pbworks.com/


관련이 없음 : Xgrid에서 병렬 컴파일이 어떻게 작동했는지에 대한 애플의 Xcode 문서에서 이름이 찢어졌습니다. (IDE 대 비디오 인코더)
Chealion

ic, 나는 Mac 사용자는 아니지만 이것을 시도해야하지만 Windows에서만 작동합니다. 나는 약 10Ghz의 결합 처리 능력을 가진 설정을 가지고 있으며 90 분 길이의 비디오는 평균 30-32 분의 변환 시간 (x.264 / AAC / 1800kbs vbr / 256kbs 오디오)을 취합니다.
dxblitzx

당신의 응답을 주셔서 감사합니다. 이 솔루션이 내가 찾던 것에 가장 가깝기 때문에 이것을 현재 정답으로 변경했습니다! :)
획기적인

2

Final Cut Studio 사용자 (Mac 만 해당)의 경우 x264 QuickTime 구성 요소 는 QMaster를 사용하여 생성 된 클러스터와 함께 사용할 때 매우 잘 작동합니다. 영화를 Compressor에 넣고 멀리 옮깁니다. 테스트에서 특히 공유 스토리지 지점에서 작업 할 때 적절한 속도 증가가 발견되었습니다.


3
젠장. 저는 Windows 사용자입니다. 그래도 꽤 멋져 보이고 찾고있는 것과 비슷합니다. 멀티 플랫폼이었습니다!
획기적인


2

저는 Windows 비디오 편집을 위해 Sony Vegas의 BIG 팬이며 네트워크 렌더링이라는 기능이 있습니다. :) ms.

소니 베가스 워크 플로우

편집 : 이것이 가능한 솔루션인지 확실하지는 않지만 네트워크 렌더링을 지원하는 비디오 인코딩 응용 프로그램을 찾으려고하는 대신 모든 응용 프로그램이 분산 컴퓨팅을 활용할 수있는 소프트웨어를 찾으려고 노력했습니다. 그리고 나는 이것을 발견했습니다 -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에 더 잘 맞도록 진화하는 코드를 다시 작성하는 방법에 대한 실용적인 아이디어를 얻습니다. 지금) 모델.

따라서 개발자가 미래의 품질 및 직업 32/64 비트 x264 분산 비디오 인코딩을 위해 할 수있는 최선의 방법은 실제로 x264의 인스턴스 또는 별도의 웹 / GUI를 만들기 위해 필요한 기본 클라이언트 / 서버 패치 를 작성하는 것입니다 이 새로운 클라이언트 / 서버 x264 API 코드가 포함 된 앱 인터페이스를 사용하여 단일 비디오의 별도 인코딩 섹션을 사용자가 새로 작성하는 관리되는 x264 클라이언트 코드에 능동적으로 찾고 할당하고 전달할 수 있습니다.

새로운 클라이언트 / 서버가 실제로 배포 된 인코딩 기본 패치는 테스트를 거쳐 사용되는 가장 크고, 기본이지만 작동하고 완벽하게 작동하는 C 코드 일 필요는 없습니다. doom10.org/index.php?action=unread

x264 개발자가 좋아하는 것 한 가지가 있기 때문에 기존의 느린 C 코드를 가져 와서 섹션별로 최적화 된 버전을 작성하지만 실제로 (베타 패치 환영) 실제 베타 코드를 먼저 제출해야합니다. 최신 지사 OC

x264는 10 비트 심도 인코딩 기능 (고품질 High, High 10, High 4 : 2 : 2 H를 의미 함)을 통해 오늘날 x264 서버를 많은 x264 클라이언트 패치에 코딩하려는 노력을 기울이고 있습니다. 264 개의 컴퓨팅 집약적 프로파일을 이제 x264)가 추가 된 모든 사람이 무료로 사용할 수 있습니다.

조속히 조립하여 추가 속도에 최적화되도록 http://mailman.videolan.org/pipermail/x264-devel/2010-October/007858.html

그러나 단일 8 코어 시스템조차도 1080P로 합리적인 시간에 최고 품질의 출력을 제공하는 데 어려움을 겪고 곧 2K 및 4K 초 고화질 Def 등을 설정하고 분산 x264 / H.264 기본 인코딩 옵션을 사용하기가 매우 쉽습니다. 패치 하나 또는 두 거리.

당신의 개발자, 기쁘게 기다리십시오, 오늘 그것을하십시오.


사실, 나는 이것을하는 것에 대해 생각했습니다. 가장 큰 문제는 실제로 두 대의 컴퓨터가 계산을 수행하는 것이 아니라 기계간에 작업 세트 데이터를 전송하는 것입니다. 단일 컴퓨터에서 RAM으로 데이터를 이동하는 것이 훨씬 쉬우나 (초당 수 기가 바이트) LAN에서는 속도가 훨씬 느립니다 (초당 100MB).
획기적인

1

미디어 인코딩 클러스터를 살펴볼 수 있습니다 .

미디어 인코딩 클러스터는 분산 미디어 (비디오 및 오디오) 인코딩을 위해 C / C ++로 작성된 최초의 오픈 소스 클러스터 인코딩 솔루션입니다.

Media Encoding Cluster는 확장 가능한 비디오 인코더로, 경량 P2P 그리드를 사용하여 MPEG4 및 H.264와 같이 압축률이 높은 비디오의 인코딩을 배포 할 목적으로 일반 PC의 처리 능력을 활용합니다.

네트워크를 통해 비디오 청크를 클라이언트 노드에 분배하고 둘 이상의 컴퓨터에서 하나의 파일에 대한 인코딩 작업을 병렬화하여 파일 당 인코딩 시간을 줄입니다.

또 다른 방법은에서 엔비디아을 위해 제공 바다 붐 도 검토 (재판에 $ 39.99), 여기 :

Elemental의 Badaboom은 Nvidia의 CUDA 인터페이스를 사용하여 오래된 CPU 대신 GPU를 사용하여 DVD 리핑 작업을 많이 수행합니다.

같은 방식으로 Wikipedia에 설명되어있는 ATI Radeon 용 Avivo 비디오 변환기도 있지만 작동하려면 약간의 작업이 필요할 수 있습니다.


@Breakthrough :이 제품들을 보셨습니까?
harrymc

1

약간의 과잉 제안이지만 Rhozet Carbon Server는 설명 한 작업을 위해 여러 개의 Carbon Coder 인스턴스를 결합 할 수 있습니다.

Rhozet Carbon Server 웹 사이트

여러 카본 코더 노드를 하나 이상의 카본 서버에 의해 제어되는 트랜스 코딩 팜으로 구성 할 수 있습니다. 카본 서버는 대용량 트랜스 코딩 작업, 카본 코더 노드의 서버 제어 페일 오버, 작업 분배, 작업 우선 순위 지정,로드 밸런싱, FTP 전송, 상태 모니터링 및 작업 알림 관리를 자동화합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.