Чи є спосіб розподілити завдання кодування x264 на декілька комп'ютерів (щоб збільшити швидкість кодування)?


29

Хтось знає про поточне, активне рішення для кодування відео x264 на багатьох комп’ютерах (через мережу) для збільшення кодування FPS?

Brownie вказує на кросплатформенний і відкритий код, але просто так, щоб ви всі знали, я зазвичай використовую Windows.


Програми, про які я чув, і чому я не вважаю, що вони підходять:

  • x264farm : Не розвинений активно. Хороший інтерфейс, але не підтримує двопрохідне кодування та виходить з ладу при нових версіях x264.
  • ELDER : Знову ж таки, не активно розвивався, але моє питання полягало в тому, що він не працював з новими збірками x264, і це було дуже важко налаштувати (читати: випадково перестала працювати).

Хоча мені абсолютно не потрібна програма, яка активно розробляється, я хотів би той, який підтримує двопрохідне кодування і працює з новими (er) x264 побудовами .


Додаткова інформація : Поки що я запропонував (і нагородив!) Двома окремими нагородами з цього питання, оскільки я вперше опублікував це понад два роки тому, і досі не знайшов рішення цієї проблеми. Що я шукаю в основному, це проста програма, яка дозволяє мені кодувати відео x264, використовуючи потужність обробки декількох комп'ютерів, підключених через локальну мережу. Крім того, було б непогано, якби він працював з новими (er) x264 побудовами та підтримував кодування з двома проходами.

Якщо в будь-який час у когось є оновлена ​​відповідь або нове рішення цієї проблеми, будь ласка, опублікуйте її, і вона буде розглянута.


Оновлення 2016 року :

Після великого досвіду роботи з комп'ютером / машинним зором я зрозумів, що накладні витрати, пов'язані з великою кількістю спільних даних / пам’яті, та потенційним вузьким місцем, яке вона представляє, можуть перевищувати потенційні переваги.

Хоча я все ще хотів би знайти щось, що дозволило б мені використати простою обчислювальну потужність декількох пристроїв, на сьогоднішній день сучасні кодери на основі GPGPU є набагато кращим підходом, якщо вам потрібно покращити кодування в режимі реального часу. Саме це надає більшість хмарних плат для кодування відео (яка ще одна альтернатива, якщо ви працюєте в SaaS або хмарних обчисленнях), хоча і в більшому масштабі.


Ще над цим працюю. x264farm - це лише менеджер візуалізації, здається, ви повинні мати можливість розмістити будь-яку версію x264, яка вам подобається, на рабському ПК. Ви пробували це, і які помилки з'являються, якщо ви це зробили?
Кек


1
Я усвідомлюю, що це стара нитка, але я думаю, що варто поділитися своїм особистим досвідом. Не поширюйте одну роботу на декілька машин, це марна трата часу, розповсюдження на декілька ядер вже знижує продуктивність, і є кілька фізичних процесорів, а потім декілька машин, у кожного з проблемою і затримкою вводу-виводу. При цьому, використовуйте його лише тоді, коли це дійсно потрібно, якщо є кілька файлів (завдань), поширюйте по файлам, я вважаю, що Squeeze може розподілити навантаження на декілька машин, але це досить дорого.
Шейн Хсу

@ShaneHsu дякую за обмін. Я вперше написав це питання понад чотири роки тому, і в той час машина, яку я використовував для виконання цієї роботи, була не настільки потужною, як у мене зараз, тому тоді було набагато більше сенсу піти цим шляхом. Сьогодні я мав би погодитися з вами - якщо швидкість візуалізації стає проблемою, найкраще завантажити всю роботу на іншу машину, а не розділяти одну роботу на кілька фрагментів (і нехай один екземпляр кодера h.264 подбає про це будь-яке багатопотокове / багатоядерне кодування при необхідності).
Прорив

Я хочу зробити те саме, але, на жаль, схоже, що ця нитка в основному наповнена напівфабрикатами рішеннями або проектами, які вже не існують. Хоча це здається, що ваша потреба зробити це зникло, якщо ви маєте більше інформації про можливі рішення з моменту останнього оновлення цього повідомлення, будь ласка, дайте мені знати.
Локссліу

Відповіді:


6

Ви можете візуалізувати окремі фрагменти відео та використовувати VirtualDub, щоб зшити все це разом із його режимом копіювання (де воно не кодує). Це не справжнє розподілене кодування або щось інше, але найпростіші рішення іноді працюють найкраще.


5
Знову ж таки, єдина проблема в тому, що відбудеться втрата якості через розміщення кадрів вводу / виводу при відтворенні відео. Алгоритм виявлення сцени повинен бути використаний, щоб визначити, куди поділити його, і якось вам слід розділити відео саме на цей кадр ...
Прорив

У VirtualDub є ті «зелено-червоні» піктограми, які повинні служити для виявлення комутаторів сцени. Якщо моя пам’ять від декількох років тому слугувала мені правильно, це спрацювало досить непогано. Але знову ж таки, я любитель, коли мова йде про кодування відео та відео.
Іван Вучиця

AFAIK VirtualDub має команду "перейти до наступного кадру". Я б просто розділив його вручну.
Каміло Мартін

@Breakthrough Отже, все, що вам потрібно, це фільтр, який розбиває вхід відео на шматки при зміні меж сцени (щоб потім їх можна було закодувати окремо)? Це досить просто. Чи є якесь інше питання?
GroovyDotCom

@GroovyDotCom на додачу до цього, все підтримуюче програмне забезпечення (наприклад, сервер для ініціювання фільтра розщеплення, розподілення його на всі клієнтські вузли, що виконують кодери, чергування завдань, перенесення файлів назад на основний сервер та повторне об'єднання результат) все ще потрібно вирішити, і це все ще не вирішує жодних потенційних проблем якості та ефективності з методом кодування великого відео в окремих сегментах. Також зауважте, що цьому питанню на даний момент вже майже шість років, тому я впевнений, що з того часу багато що змінилося і щодо розподіленого кодування.
Прорив

4

Це бета-версія, але функціональна. Це не так просто, але це працює. Це ОС Windows і безкоштовно.

ELDER від деяких хлопців Doom9


2
Я також це бачив, але сподівався на щось порівнянне з x264farm - немає якості з хітом x264farm ... Крім того, проект був покинутий досить довгий час.
Прорив

1
Я спочатку нагородив цю відповідь на 50 балів, бо це було найближчим рішенням на той час . Однак ця програма мала певні втрати якості порівняно з кодувачем для одного комп'ютера. Я сподіваюся уникнути потрапляння на якість.
Прорив

@Breakthrough Що робити, якщо ви націлите трохи вище, наприклад, якщо це робить його на 10% гіршим, зробіть налаштування (деталізація / рамка / тощо) на 10% вище?
tobylane

@tobylane, проблема полягає у розміщенні I / B кадрів при відтворенні відео. Алгоритм виявлення сцени повинен бути використаний, щоб визначити, де його розділити, і якось вам потрібно буде розділити відео саме на цей кадр. Залежно від вихідного матеріалу, це часто неможливо зробити ідеально, і, таким чином, кодування цілого відео одразу, як правило, матиме кращу якість, ніж рендеринг.
Прорив

2
@Breakthrough x264 за замовчуванням має максимальний GOP в 250 кадрів, а HD-матеріал ще менше. Він колись закриє GOP (якщо не налаштувати його), і тоді втрат якості не буде, якщо розрізати там, де закінчиться GOP, на жаль, це не дуже передбачувано. У будь-якому випадку, у фільмі, що триває 1,5 години, розбивши його на 6 15 хв. шматки прямо на сцені зміни не зашкодили б сильному стисненню. І це допомагає!
Каміло Мартін

3

Ви також можете спробувати скористатися цим, його паралельним / розподіленим кодуючим програмним забезпеченням для Windows, і він працює добре і масштабується також.

Спробуйте googling для кодера xcode Paralellel.

Ці посилання мають надавати більше інформації.

http://superscalar.pbworks.com/


Непов'язане: Іменування виглядає зірваним прямо з документа Xcode Apple про те, як паралельна компіляція працювала з Xgrid. (IDE проти відеокодера)
Chealion

ic, я не користувач Mac, але ви повинні спробувати це, але працює тільки на Windows. У мене встановлено близько 10 ГГц комбінованої процесорної потужності, а відео тривалістю 90 хв займає в середньому 30-32 хв для перетворення (x.264 / AAC / 1800 kbs vbr / 256 kbs аудіо).
dxblitzx

Спасибі за вашу відповідь. Я змінив це на теперішню правильну відповідь, оскільки це рішення є найближчим до того, що я шукав! :)
Прорив

2

Для користувачів Final Cut Studio (лише для Mac) компонент x264 QuickTime надзвичайно добре працює при використанні з кластером, створеним за допомогою QMaster. Завантажте свій фільм у компресор і подалі він йде. У тестах я виявив пристойне збільшення швидкості, особливо під час роботи на спільному місці зберігання.


3
Чорт ... я користувач Windows. Це виглядає досить круто, і схоже на те, що я шукаю - я просто хочу, щоб він був багатоплатформенним!
Прорив

2

Для Mac OS X 10.5 (я не впевнений у сумісності 10.6) раніше існував VisualHub , який дозволив би налаштувати сітку ферму у вашій локальній мережі. Тепер це припинено, і ReduxEncoder з'явився замість нього, але я не можу знайти варіанти для цього.


2

Я великий фанат Sony Vegas для редагування відео в Windows ... і є функція під назвою Network Render. :) Yums.

Sony Vegas Workflow

EDIT: Не надто впевнений, чи це життєздатне рішення, але замість того, щоб намагатись знайти додаток для кодування відео, що підтримує мережеве візуалізацію, я спробував знайти програмне забезпечення, яке дозволяє будь-якій програмі скористатися перевагою розподілених обчислень. І я знайшов це - IAIDataShareServer .

Це виглядає досить потужно, а вибірки, розміщені на вибірці, справді чудові. Якщо ви збираєтеся спробувати, повідомте нам, як це працює?

EDIT2: IAIDataShareServer, здається, просто інструктує машини виконувати окремі завдання. У цій мірі я спробував знайти джерело для інших розподілених обчислювальних рішень і перерахувати кілька перспективних.

  1. JPPF
  2. XOREAX
  3. DCEZ (цей добре виглядає)

3
Ви впевнені в цьому? forums.creativecow.net/thread/24/895788
Прорив

1
@ Попередження: ей, товариш, знайдено нове можливе рішення. Неперевірений самим, хоча. Див. Відредаговану відповідь. Удачі!
Калібан

2
@scopedreams: Я побачив це, і миттєво подумав, що це ідеально ... На жаль, поділена розподілена інформація просто запускає екземпляри програм на кожному підключеному до неї комп’ютері - корисно для виконання багатьох завдань, кожен клієнт вирішує одну роботу за один раз ... Але в моєму випадку я хочу, щоб лише одна робота була обчислена паралельно серед багатьох комп'ютерів.
Прорив

1
@ Прорив: argh darn, назад до того, що бродять в Інтернеті, я здогадуюсь.
caliban

1
@ Попередження: оновлено мою відповідь, щоб надати список клієнтів, що розподіляються. Знову неперевірений. Не переживайте за прийняття моєї відповіді, я роблю це, щоб дізнатися щось нове і для себе. :)
caliban

1

простий факт - NON світового розробника на сьогоднішній день турбується писати і подавати розподілені TCP: загальне кодування патчів клієнта / сервера IP / UDP для поточного x264, станом на сьогоднішній день 1745 див. x264.nl/

загальна модель клієнт / сервер добре зрозуміла, як і чиста база коду x264, і просити роз'яснення будь-якого коду x264 є простим питанням приєднатися до IRC-каналу x264 dev і запитати, протягом декількох хвилин у вас зазвичай буде ключ x264 Dev або два відповідають на ваш запит про те, як працює цей розділ коду, і навіть отримати практичне уявлення про те, як ви можете переписати свій еволюціонуючий код, щоб краще підходити до x264 (і x262 новий кодер Mpeg2, заснований на рамці світового класу x264, що працює правильно тепер) модель.

Отже, якщо ваш розробник, то найкраще, що ви могли зробити для майбутнього якості та професії 32/64 біт x264 розподілене кодування відео - це фактично написати ці необхідні базові патчі клієнт / сервер, щоб зробити один екземпляр x264 або окремий веб / GUI Інтерфейс програми з цим новим API-кодом / сервером x264 API, який ви пишете, щоб активно шукати та призначати та передавати на леті окремі секції кодування одного відео будь-якому новому відповідному керованому коду клієнта x264, який ви також пишете.

вашим новим клієнтам / серверу, по-справжньому розподіленим базовими патчами кодування, навіть не потрібно бути найбільшим, просто базовим, але працюючим і повністю функціонуючим кодом C, який перевіряється і використовується doom10.org/index.php?action=unread

, як це є одне, що, як видається, любить розробник x264, і це взяти існуючий повільний код C і написати оптимізовані його версії, розділ за розділом, але вам потрібно фактично подати фактичний бета-код (виправлення латок) спочатку проти остання філія OC

на це варто звернути увагу, і насправді доклавши зусиль, щоб кодувати ці сервери x264 багатьом клієнтам патчу x264, оскільки x264 щойно отримав можливість кодування 10-ти бітової глибини (це означає високу якість High, High 10, High 4: 2: 2 H. 264 обчислювальні інтенсивні профілі тепер доступні для всіх безкоштовно, додавши x264).

буде оптимізовано для додаткової швидкості зі складанням дуже скоро http://mailman.videolan.org/pipermail/x264-devel/2010-O жовтня/ 007858.html

але навіть одна 8-ядерна машина буде намагатися забезпечити випуск найвищої якості в розумний час з 1080P, а незабаром 2K і 4K надвисокою Def і т.д. патч-два геть.

якщо ваш диявол, БУДЬ ласка, не чекайте, зробіть це сьогодні.


Власне, я думав про це. Основна проблема полягає не в тому, щоб отримати два комп'ютери для виконання обчислень, а швидше перенести дані робочого набору між машинами. Набагато простіше переміщувати дані в оперативну пам’ять і виходити з неї на одній машині (хоча багато гігабайт в секунду), але набагато повільніше в локальній мережі (максимум на 100 мегабайт в секунду).
Прорив

1

Ви можете подивитися кластер кодування медіа :

Кластер кодування медіа - це перше рішення з кодування кластера з відкритим кодом, яке пишеться на C / C ++ для кодування розподілених медіа (відео та аудіо).

Кластер Media Encoding - це розширюваний кодер відео, в якому використовується легка сітка однорангових мереж, щоб використовувати потужність обробки звичайних ПК для розповсюдження кодування сильно стисненого відео, наприклад MPEG4 та H.264

Він розподіляє відеокліпи по мережі по вузлах клієнтів і паралелізує завдання кодування для одного файлу навіть більше, ніж один комп’ютер, щоб зменшити час кодування на файл.

Інший підхід пропонується компанією Badaboom для Nvidia ($ 39,99 з пробною версією ), також розглянуто тут :

Elemental's Badaboom використовує CUDA-інтерфейс Nvidia, щоб виконувати багато бурхливих робіт з видобутку DVD, використовуючи GPU замість вашого затхлого старого процесора.

Таким же чином є також Avivo Video Converter для ATI Radeon, описаний у wikipedia , хоча це може зайняти певну роботу, щоб його працювати.


@Результат: Ви подивилися ці продукти?
harrymc

1

Незважаючи на те, що це може бути дещо пропозицією про перевищення, Rhozet Carbon Server може зібрати кілька екземплярів Carbon Coder для описаної вами роботи.

Веб-сайт для сервера Rhozet Carbon

Кілька вузлів вуглецевого кодера можуть бути налаштовані як ферма перекодування, керована одним або декількома серверами вуглецю. Carbon Server дозволяє автоматизувати обробку завдань з великого обсягу транскодування, керований сервером відмову від вузлів Carbon Coder, а також управління розподілом роботи, визначення пріоритетності роботи, балансування навантаження, передача FTP, моніторинг стану та повідомлення про роботу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.