Czy istnieje sposób dystrybucji zadań kodowania x264 na wiele komputerów (w celu zwiększenia prędkości kodowania)?

29

Czy ktoś wie o obecnym, aktywnym rozwiązaniu do kodowania filmów x264 na wielu komputerach (przez sieć) w celu zwiększenia kodowania FPS?

Punkty Brownie dla platform wieloplatformowych i open source, ale dla pewności wszyscy zwykle używam systemu Windows.


Programy, o których słyszałem i dlaczego nie uważam ich za odpowiednie:

  • x264farm : Nie aktywnie rozwijany. Dobry interfejs, ale nie obsługuje kodowania dwuprzebiegowego i kończy się niepowodzeniem w przypadku nowszych wersji x264.
  • ELDER : Znów nie aktywnie rozwijany, ale moim problemem było to, że nie działał z nowymi kompilacjami x264 i był bardzo trudny do skonfigurowania (czytaj: losowo przestał działać).

Chociaż absolutnie nie potrzebuję programu, który jest aktywnie rozwijany, chciałbym taki, który obsługuje kodowanie dwuprzebiegowe i działa z nowymi (er) kompilacjami x264 .


Informacje dodatkowe : Do tej pory zaoferowałem (i nagrodziłem!) Dwie osobne nagrody za to pytanie, odkąd po raz pierwszy opublikowałem je ponad dwa lata temu i nadal nie znalazłem rozwiązania tego problemu. W zasadzie szukam prostego programu, który pozwala mi kodować filmy x264 z wykorzystaniem mocy obliczeniowej wielu komputerów podłączonych przez sieć LAN. Ponadto byłoby miło, gdyby działał z nowymi (er) kompilacjami x264 i wspierał kodowanie dwuprzebiegowe.

Jeśli w dowolnym momencie ktoś ma zaktualizowaną odpowiedź lub nowe rozwiązanie tego problemu, proszę opublikować ją, a zostanie ona rozważona.


Aktualizacja 2016 :

Po dużej części mojego doświadczenia w pracy z komputerem / wizją maszynową zdałem sobie sprawę, że koszty ogólne związane z dużą ilością współdzielonych danych / pamięci oraz potencjalnym wąskim gardłem, jakie stanowi, mogą przewyższać potencjalne korzyści.

Chociaż nadal chciałbym znaleźć coś, co pozwoliłoby mi wykorzystać bezczynną moc obliczeniową kilku urządzeń, na razie nowoczesne kodery oparte na GPGPU są znacznie lepszym podejściem, jeśli potrzebujesz ulepszonego / kodowania w czasie rzeczywistym. Właśnie to zapewnia większość platform kodowania wideo w chmurze (co stanowi kolejną alternatywę dla SaaS lub przetwarzania w chmurze), choć na większą skalę.

Przełom
źródło
Nadal nad tym pracuję. x264farm to tylko menedżer renderowania, wydaje się, że powinieneś być w stanie umieścić dowolną wersję x264, którą lubisz na komputerach slave. Próbowałeś tego i jakie błędy wyskakują, jeśli tak zrobiłeś?
Keck,
1
Zdaję sobie sprawę, że to stary wątek, ale myślę, że powinienem podzielić się osobistym doświadczeniem. Nie rozdzielaj jednego zadania na wiele komputerów, to strata czasu, dystrybucja do wielu rdzeni już zmniejsza wydajność, a jest wiele fizycznych procesorów, a następnie wiele komputerów, każde z problemem IO i opóźnieniami. To powiedziawszy, używaj go, gdy jest naprawdę potrzebny, jeśli jest wiele plików (zadań), dystrybuuj według plików, uważam, że Squeeze może rozłożyć obciążenie na kilka komputerów, ale to dość drogie.
Shane Hsu,
@ShaneHsu dziękuję za udostępnienie. Po raz pierwszy napisał to pytanie ponad cztery lata temu, a w tym czasie, urządzenie używałem do tej pracy nie było prawie tak silny jak ten mam teraz, więc to dużo większy sens wtedy pójść tą drogą. Dzisiaj musiałbym się z tobą zgodzić - jeśli szybkość renderowania stanie się problemem, najlepiej odciąć całe zadanie na inną maszynę, niż podzielić jedno zadanie na wiele części (i pozwolić jednej instancji kodera h.264 zająć się w razie potrzeby dowolne kodowanie wielowątkowe / wielordzeniowe).
Przełom
Chcę zrobić to samo, ale niestety wygląda na to, że ten wątek jest w większości wypełniony rozwiązaniami lub projektami, które już nie istnieją. Wygląda na to, że Twoja potrzeba zniknęła, ale jeśli masz więcej informacji na temat możliwych rozwiązań od ostatniej aktualizacji, daj mi znać.
Locksleyu,

Odpowiedzi:

6

Możesz renderować oddzielne fragmenty wideo i użyć VirtualDub, aby połączyć je wszystkie razem w trybie kopiowania (w którym nie koduje). To nie jest rzeczywiste kodowanie rozproszone ani nic, ale najprostsze rozwiązania czasami działają najlepiej.

Ivan Vučica
źródło
5
Ponownie, jedynym problemem jest to, że nastąpi utrata jakości z powodu umieszczenia ramek I / B podczas renderowania wideo. Algorytm wykrywania scen musiałby zostać użyty, aby określić, gdzie go podzielić, a jakoś trzeba by podzielić film dokładnie w tej samej klatce ...
Przełom
VirtualDub ma te „zielono-czerwone” ikony, które powinny służyć do wykrywania przełączania scen. Jeśli moja pamięć sprzed kilku lat służy mi poprawnie, działała całkiem nieźle. Ale z drugiej strony jestem amatorem, jeśli chodzi o wideo i kodowanie wideo.
Ivan Vučica
AFAIK VirtualDub ma polecenie „przejdź do następnej klatki”. Po prostu podzieliłem to ręcznie.
Camilo Martin,
@Breakthrough Więc wszystko, czego potrzebujesz, to filtr, który dzieli wejście wideo na fragmenty w granicach zmiany sceny (aby można je następnie zakodować osobno)? To dość proste. Czy jest jakiś inny problem?
GroovyDotCom
@GroovyDotCom oprócz tego całe oprogramowanie wspierające (np. Serwer, aby zainicjować filtr podziału, dystrybuować go do wszystkich węzłów klienckich z uruchomionymi koderami, ustawiać w kolejce zadania, przesyłać pliki z powrotem na główny serwer i ponownie łączyć wynik) nadal wymaga rozwiązania, a to wciąż nie rozwiązuje żadnych potencjalnych problemów z jakością / wydajnością dzięki metodzie kodowania dużego wideo w poszczególnych segmentach. Zwróć też uwagę, że to pytanie ma obecnie prawie sześć lat, więc jestem pewien, że od tego czasu wiele się zmieniło również w zakresie kodowania rozproszonego.
Przełom
4

Jest w wersji beta, ale działa. To nie jest tak proste, ale działa. Jest oparty na systemie Windows i bezpłatny.

Elder od niektórych facetów doom9

Keck
źródło
2
Widziałem to również, ale liczyłem na coś porównywalnego z x264farm - nie ma żadnego hitu jakości z x264farm ... Ponadto projekt był już porzucony przez dłuższy czas.
Przełom
1
Pierwotnie przyznałem nagrodę w wysokości 50 punktów za tę odpowiedź, ponieważ było to najbliższe rozwiązanie w tym czasie . Jednak program ten miał pewną utratę jakości w porównaniu z koderem dla jednego komputera. Mam nadzieję uniknąć pogorszenia jakości.
Przełom
@Breakthrough Co zrobić, jeśli celujesz nieco wyżej, na przykład, jeśli to pogorszy o 10%, zmień ustawienia (szczegóły / rozmiar ramki / itp.) O 10%?
tobylan
@tobylane, problem polega na umieszczeniu ramek I / B podczas renderowania wideo. Algorytm wykrywania scen musiałby zostać użyty, aby określić, gdzie go podzielić, a jakoś trzeba by podzielić film dokładnie w tej samej klatce. W zależności od materiału źródłowego często nie jest to możliwe do perfekcji, a zatem kodowanie całego filmu naraz zazwyczaj daje lepszą jakość niż renderowanie go w częściach.
Przełom
2
@Breakthrough x264 domyślnie ma maksymalną wartość GOP wynoszącą 250 klatek, przy czym materiał HD jest jeszcze mniejszy. To kiedyś zamknie GOP (chyba, że ​​go poprawisz, aby nie), a następnie nie nastąpi utrata jakości, jeśli dokonasz tam, gdzie skończy się GOP, niestety nie jest to bardzo przewidywalne. W każdym razie w 1,5-godzinnym filmie, dzieląc go na 6 15 minut. fragmenty tuż przy zmianach sceny nie zaszkodziłyby zbytnio podczas kompresji. I to pomaga!
Camilo Martin,
3

Możesz także spróbować użyć tego, jego równoległego / rozproszonego oprogramowania do kodowania dla systemu Windows i działa dobrze i ładnie skaluje się.

Spróbuj googling dla kodera równoległego xcode.

Te linki powinny zawierać więcej informacji.

http://superscalar.pbworks.com/

dxblitzx
źródło
Niepowiązane: Wygląd nazwy został zerwany bezpośrednio z dokumentu Xcode firmy Apple o tym, jak kompilacja równoległa działała z Xgrid. (IDE kontra koder wideo)
Chealion
ic, nie jestem użytkownikiem Maca, ale powinieneś spróbować, działa jednak tylko w systemie Windows. Mam konfigurację z około 10 Ghz połączonej mocy przetwarzania i 90-minutowy film zajmuje średnio 30-32 minut na konwersję (x.264 / AAC / 1800 kbs vbr / 256 kbs audio).
dxblitzx,
Dziękuję za odpowiedź. Zmieniłem to na aktualną prawidłową odpowiedź, ponieważ to rozwiązanie jest najbliższe temu, czego szukałem! :)
Przełom
2

W przypadku użytkowników Final Cut Studio (tylko Mac) składnik QuickTime x264 działa wyjątkowo dobrze, gdy jest używany z klastrem utworzonym za pomocą QMaster. Załaduj swój film do Kompresora i gotowe. W testach stwierdziłem przyzwoity wzrost prędkości, szczególnie podczas pracy na wspólnym punkcie przechowywania.

Chealion
źródło
3
Cholera ... Jestem użytkownikiem systemu Windows. Wygląda to całkiem fajnie i podobnie do tego, czego szukam - chciałbym, żeby to była platforma wieloplatformowa!
Przełom
2

W systemie Mac OS X 10.5 (nie jestem pewien zgodności z wersją 10.6) istniał VisualHub , który pozwalałby na konfigurację farmy sieci w sieci lokalnej. Teraz jest wycofany i ReduxEncoder pojawił się jako zamiennik, ale nie mogę znaleźć opcji na to.

Tiago Veloso
źródło
2

Jestem WIELKIM fanem edycji wideo Sony Vegas dla Windows ... i jest funkcja o nazwie Network Render. :) Mniam.

Przepływ pracy Sony Vegas

EDYCJA: Nie jestem pewien, czy jest to realne rozwiązanie, ale zamiast próbować znaleźć aplikację do kodowania wideo obsługującą renderowanie sieciowe, próbowałem znaleźć oprogramowanie, które umożliwi dowolnej aplikacji skorzystanie z przetwarzania rozproszonego. I znalazłem to - IAIDataShareServer .

Wygląda dość potężnie, a wyniki zamieszczone w próbce są naprawdę świetne. Jeśli masz zamiar spróbować, daj nam znać, jak to działa?

EDYCJA 2: IAIDataShareServer wydaje się po prostu instruować maszyny do uruchamiania poszczególnych zadań. W tym zakresie starałem się pozyskiwać inne rozwiązania przetwarzania rozproszonego i wymieniałem kilka obiecujących.

  1. JPPF
  2. XOREAX
  3. DCEZ (ten wygląda dobrze)
kaliban
źródło
3
Jesteś tego pewien? forums.creativecow.net/thread/24/895788
Przełom
1
@Breakthrough: hej kolego, znaleziono nowe możliwe rozwiązanie. Jednak sam nie przetestowałem. Zobacz zredagowaną odpowiedź. Powodzenia!
caliban
2
@scopedreams: Widziałem to i od razu pomyślałem, że jest idealny ... Niestety, rozproszone udostępnianie danych uruchamia po prostu wystąpienia programów na każdym podłączonym do niego komputerze - przydatne do uruchamiania wielu zadań, z każdym klientem zajmującym się pojedynczym zadaniem na raz ... Ale w moim przypadku chcę, aby jedno zadanie było obliczane równolegle na wielu komputerach.
Przełom
1
@Breakthrough: argh darn, wracam do trawlerowania sieci.
caliban
1
@Breakthrough: Zaktualizowałem moją odpowiedź, aby zapewnić listę klientów przetwarzania rozproszonego. Znowu niesprawdzone. Nie martw się o zaakceptowanie mojej odpowiedzi, robię to, aby nauczyć się czegoś nowego dla siebie. :)
caliban
1

faktem jest, że NIK nie jest na świecie. Deweloper na świecie nie zadał sobie trudu, aby napisać i przesłać rozproszone łatki klient / serwer do kodowania TCP: IP / UDP dla aktualnego x264, na dzień 1745 patrz x264.nl/

ogólny model klient / serwer jest dobrze zrozumiany, podobnie jak czysta baza kodu x264, a prośba o wyjaśnienie dowolnego kodu x264 jest prostą sprawą, aby dołączyć do kanału IRC dev x264 i zapytać, w ciągu kilku minut zwykle będziesz miał klucz x264 Dev lub dwie odpowiedzą na twoje pytanie, jak działa ta sekcja kodu, a nawet dowiedz się, w jaki sposób możesz ponownie napisać swój ewoluujący kod, aby lepiej pasował do x264 (i x262 nowy koder Mpeg2 oparty na światowej klasy frameworku x264, nad którym pracujesz teraz) model.

Więc jeśli jesteś programistą, najlepszą rzeczą, jaką możesz zrobić dla przyszłości jakości i zawodu Rozproszone kodowanie wideo w formacie 32/64 bit x264 jest napisanie tych wymaganych podstawowych poprawek klienta / serwera, aby utworzyć jedną instancję x264 lub osobnego interfejsu WWW / GUI interfejs aplikacji z tym nowym kodem API klient / serwer x264, który piszesz, aby aktywnie szukać, a także przypisywać i przekazywać w locie osobne sekcje kodowania pojedynczego wideo do dowolnego nowego pasującego zarządzanego kodu klienta x264, który również piszesz.

Twoi nowi klienci / serwer naprawdę rozproszone łaty kodujące nie muszą nawet być największym, po prostu podstawowym, ale działającym iw pełni działającym kodem C, który jest testowany i używany doom10.org/index.php?action=unread

, ponieważ jest jedna rzecz, którą deweloper x264 uwielbia robić, i to bierze istniejący powolny kod C i pisze zoptymalizowane wersje, sekcja po sekcji, ale musisz faktycznie przesłać (łatki mile widziane) rzeczywisty kod beta najpierw przeciwko najnowszy oddział OC

warto przyjrzeć się temu i faktycznie staramy się kodować te serwery x264 do wielu łat klientów x264 dzisiaj, ponieważ x264 właśnie ma możliwość kodowania głębokości 10 bitów (co oznacza wysoką jakość High, High 10, High 4: 2: 2 H. Dodano 264 profili intensywnych obliczeń dla wszystkich za darmo z dodatkiem x264).

wkrótce zostanie zoptymalizowany pod kątem dodatkowej prędkości dzięki montażowi http://mailman.videolan.org/pipermail/x264-devel/2010-October/007858.html

ale nawet jedna 8-rdzeniowa maszyna będzie miała problemy z zapewnieniem najwyższej jakości wyjścia w rozsądnym czasie dzięki 1080P, a wkrótce 2K i 4K super high Def itp., naprawdę łatwa w konfiguracji i użyciu rozproszona natywna opcja kodowania x264 / H.264 jest tylko łata lub dwie dalej So.

jeśli jesteś deweloperem, PROSZĘ nie czekaj, zrób to dzisiaj.

rozproszone x264
źródło
Właściwie to myślałem o zrobieniu tego. Głównym problemem nie jest fakt, że dwa komputery wykonują obliczenia, a raczej przesyłanie danych roboczych między komputerami. O wiele łatwiej przenosić i wyprowadzać dane z pamięci RAM na jednej maszynie (jednak w gigabajtach na sekundę), ale znacznie wolniej w sieci LAN (maksymalnie 100 megabajtów na sekundę).
Przełom
1

Możesz rzucić okiem na klaster kodowania multimediów :

Media Encoding Cluster to pierwsze rozwiązanie do kodowania klastrów Open Source napisane w C / C ++ dla rozproszonego kodowania mediów (wideo i audio).

Media Encoding Cluster to rozszerzalny koder wideo, który wykorzystuje lekką siatkę peer-to-peer do wykorzystania mocy przetwarzania zwykłych komputerów w celu dystrybucji kodowania wysoce skompresowanego wideo, na przykład MPEG4 i H.264

Rozdziela fragmenty wideo w sieci do węzłów klienta i równolegle wykonuje zadanie kodowania dla jednego pliku na więcej niż jednym komputerze, aby skrócić czas kodowania na plik.

Inne podejście jest oferowane dla Nvidii przez Badaboom (39,99 USD z wersją próbną), również sprawdzone tutaj :

Elementab's Badaboom korzysta z interfejsu CUDA Nvidii, aby wykonać wiele cholernej pracy przy zgrywaniu DVD przy użyciu GPU zamiast starego, stęchłego procesora.

W ten sam sposób istnieje również Avivo Video Converter dla ATI Radeon, opisany w wikipedii , chociaż może to trochę potrwać, aby go uruchomić.

harrymc
źródło
@Breakthrough: Czy obejrzałeś te produkty?
harrymc
1

Chociaż może to być trochę przesada, Rhozet Carbon Server może połączyć wiele instancji Carbon Codera do opisanej pracy.

Strona internetowa dla Rhozet Carbon Server

Wiele węzłów Carbon Coder można skonfigurować jako farmę transkodującą, kontrolowaną przez jeden lub więcej serwerów Carbon. Carbon Server umożliwia automatyczne przetwarzanie dużych zadań transkodowania, kontrolowane przez serwer przełączanie awaryjne węzłów Carbon Coder, a także zarządzanie dystrybucją zadań, ustalanie priorytetów zadań, równoważenie obciążenia, przesyłanie FTP, monitorowanie statusu i powiadamianie o zadaniach.

edusysadmin
źródło