Apakah ada cara untuk mendistribusikan pekerjaan penyandian x264 di banyak komputer (untuk meningkatkan kecepatan penyandian)?

29

Adakah yang tahu solusi aktif saat ini untuk menyandikan video x264 di banyak komputer (melalui jaringan) untuk meningkatkan encoding FPS?

Brownie menunjuk untuk cross-platform dan open source, tetapi supaya kalian semua tahu, saya biasanya menggunakan Windows.


Program yang telah saya dengar, dan mengapa saya tidak percaya mereka cocok:

  • x264farm : Tidak dikembangkan secara aktif. Antarmuka yang bagus, tetapi tidak mendukung pengkodean dua-pass, dan gagal dengan versi x264 yang lebih baru.
  • ELDER : Sekali lagi, tidak dikembangkan secara aktif, tetapi masalah saya adalah bahwa itu tidak berfungsi dengan build x264 baru, dan sangat sulit untuk dikonfigurasikan (baca: berhenti bekerja secara acak).

Walaupun saya tidak benar-benar membutuhkan program yang sedang dikembangkan secara aktif, saya ingin yang mendukung pengkodean dua-pass , dan bekerja dengan build (er) x264 yang baru .


Informasi tambahan : Sejauh ini, saya telah menawarkan (dan menganugerahkan!) Dua hadiah terpisah untuk pertanyaan ini sejak saya pertama kali mempostingnya lebih dari dua tahun yang lalu, dan saya masih belum menemukan solusi untuk masalah ini. Apa yang saya cari pada dasarnya adalah program sederhana yang memungkinkan saya untuk menyandikan video x264 menggunakan kekuatan pemrosesan beberapa komputer yang terhubung melalui LAN. Lebih jauh lagi, akan lebih baik jika bekerja dengan build (er) x264 baru, dan mendukung pengkodean dua-pass.

Jika suatu saat seseorang memiliki jawaban yang diperbarui, atau solusi baru untuk masalah ini, silakan posting dan akan dipertimbangkan.


Pembaruan 2016 :

Setelah banyak pengalaman kerja saya dengan visi komputer / mesin, saya menyadari bahwa overhead yang terkait dengan sejumlah besar data / memori bersama, dan potensi kemacetan yang ada, mungkin lebih besar daripada manfaat potensial.

Meskipun saya masih ingin menemukan sesuatu yang akan memungkinkan saya untuk memanfaatkan kekuatan komputasi idle dari beberapa perangkat, untuk saat ini, encoder berbasis GPGPU modern adalah pendekatan yang jauh lebih baik jika Anda memerlukan peningkatan / real-time encoding. Inilah yang disediakan oleh sebagian besar platform encoding video berbasis cloud (yang merupakan alternatif lain jika Anda menyukai SaaS atau cloud computing), meskipun pada skala yang lebih besar.

Terobosan
sumber
Masih mengerjakan ini. x264farm hanyalah pengelola render, sepertinya Anda harus dapat menempatkan versi x264 apa pun yang Anda suka di PC slave. Sudahkah Anda mencoba ini, dan kesalahan apa yang muncul jika Anda melakukannya?
Keck
1
Saya menyadari ini adalah utas lama, tetapi saya pikir saya harus membagikan pengalaman pribadi saya. Jangan mendistribusikan satu pekerjaan ke beberapa mesin, ini buang-buang waktu, mendistribusikan ke banyak core sudah menurunkan kinerja, dan ada beberapa prosesor fisik, kemudian beberapa mesin, masing-masing dengan masalah dan latensi IO. Yang sedang berkata, gunakan ketika hanya benar-benar dibutuhkan, jika ada banyak file (pekerjaan), distribusikan berdasarkan file, saya percaya Squeeze dapat mendistribusikan beban di beberapa mesin, tapi itu cukup mahal.
Shane Hsu
@ShaneHsu terima kasih telah berbagi. Saya pertama kali menulis pertanyaan ini selama empat tahun yang lalu, dan pada waktu itu, mesin saya menggunakan untuk melakukan pekerjaan ini tidak hampir sekuat yang saya miliki sekarang, sehingga membuat lebih banyak merasakan kembali kemudian untuk pergi rute ini. Hari ini, saya harus setuju dengan Anda - jika kecepatan render menjadi masalah, yang terbaik adalah melepas seluruh pekerjaan ke komputer lain, daripada membagi satu pekerjaan menjadi beberapa bongkahan (dan biarkan satu contoh encoder h.264 menangani setiap pengkodean multithreaded / multicore jika perlu).
Terobosan
Saya mencari untuk melakukan hal yang sama, tetapi sayangnya sepertinya utas ini sebagian besar diisi dengan solusi setengah matang atau proyek yang tidak ada lagi. Meskipun sepertinya kebutuhan Anda untuk melakukan ini telah memudar, jika Anda memiliki informasi lebih lanjut tentang solusi yang mungkin sejak terakhir kali Anda memperbarui ini, beri tahu saya.
Locksleyu

Jawaban:

6

Anda bisa membuat potongan video yang terpisah, dan menggunakan VirtualDub untuk menjahit semuanya bersama-sama dengan mode Salinnya (di mana tidak ada pengkodean). Ini bukan pengkodean terdistribusi nyata atau apa pun, tetapi solusi paling sederhana terkadang bekerja paling baik.

Ivan Vučica
sumber
5
Sekali lagi, satu-satunya masalah dengan ini adalah bahwa akan ada kehilangan kualitas, karena penempatan frame I / B saat membuat video. Algoritma pendeteksian adegan perlu digunakan untuk menentukan di mana harus membaginya, dan entah bagaimana, Anda akan perlu untuk membagi video pada frame yang tepat ...
Terobosan
VirtualDub memang memiliki ikon "hijau-dan-merah" yang seharusnya berfungsi dalam deteksi sakelar adegan. Jika ingatan saya dari beberapa tahun lalu melayani saya dengan benar, itu berfungsi dengan baik. Tapi sekali lagi, saya seorang amatir ketika datang ke encoding video dan video.
Ivan Vučica
AFAIK VirtualDub memiliki perintah "buka frame berikutnya". Saya baru saja membaginya secara manual.
Camilo Martin
@Breakthrough Jadi yang Anda butuhkan adalah filter yang membagi input video menjadi potongan-potongan di batas perubahan adegan (sehingga ini kemudian dapat dikodekan secara terpisah)? Cukup sederhana. Apakah ada masalah lain?
GroovyDotCom
@GroovyDotCom juga sebagai tambahan, semua perangkat lunak pendukung (misalnya server untuk memulai filter pemisahan, mendistribusikannya ke semua node klien yang menjalankan encoders, mengantre pekerjaan, mentransfer file kembali ke server utama, dan menggabungkan kembali hasil) masih perlu ditangani, dan ini masih tidak membahas masalah kualitas / efisiensi potensial dengan metode pengkodean video besar di segmen individu. Perhatikan juga bahwa pertanyaan ini hampir berusia enam tahun pada saat ini, jadi saya yakin banyak yang telah berubah sejak saat itu sehubungan dengan pengkodean yang didistribusikan.
Terobosan
4

Ini beta, tetapi fungsional. Ini tidak sesederhana itu, tetapi berhasil. Ini berbasis windows dan gratis.

ELDER dari beberapa orang Doom9

Muntah
sumber
2
Saya melihat itu juga, tetapi berharap untuk sesuatu yang sebanding dengan x264farm - tidak ada kualitas hit dengan x264farm ... Juga, proyek ini telah ditinggalkan selama beberapa waktu.
Terobosan
1
Saya awalnya memberikan hadiah 50 poin untuk jawaban ini, karena itu adalah solusi terdekat pada waktu itu . Namun, program ini memang memiliki beberapa kehilangan kualitas dibandingkan dengan encoder komputer tunggal. Saya berharap untuk menghindari hit pada kualitas.
Terobosan
@Breakthrough Bagaimana jika Anda bertujuan sedikit lebih tinggi, seperti jika itu membuat 10% lebih buruk membuat pengaturan (detail / framesize / dll) 10% lebih tinggi?
tobylane
@tobylane, masalahnya adalah penempatan frame I / B saat merender video. Algoritma pendeteksian adegan perlu digunakan untuk menentukan di mana harus membaginya, dan entah bagaimana, Anda harus membagi video tepat pada bingkai itu. Bergantung pada bahan sumbernya, ini seringkali tidak mungkin dilakukan dengan sempurna, dan dengan demikian meng-encode seluruh video sekaligus biasanya akan menghasilkan kualitas yang lebih baik kemudian merendernya menjadi potongan-potongan.
Terobosan
2
@Breakthrough x264 secara default memiliki GOP maksimum 250 frame, dengan materi HD lebih sedikit. Kadang-kadang akan menutup GOP (kecuali jika Anda tidak mengubahnya), dan kemudian tidak akan ada penurunan kualitas jika Anda memotong tepat di mana GOP akan berakhir, sayangnya itu tidak terlalu dapat diprediksi. Dalam kasus apa pun, dalam film berdurasi 1,5 jam, pisahkan menjadi 6 15 menit. bongkahan tepat di tempat kejadian perubahan tidak akan menyakiti banyak kompresibilitas. Dan itu membantu!
Camilo Martin
3

Anda juga dapat mencoba menggunakan ini, ini adalah perangkat lunak pengkodean paralel / terdistribusi untuk windows dan berfungsi dengan baik dan skala juga baik.

Coba googling untuk xcode Parallel encoder.

Tautan ini harus memberikan informasi lebih lanjut.

http://superscalar.pbworks.com/

dxblitzx
sumber
Tidak terkait: Penamaan terlihat robek langsung dari dokumen Xcode Apple tentang bagaimana kompilasi paralel bekerja dengan Xgrid. (A IDE versus video encoder)
Chealion
ic, saya bukan pengguna mac tetapi Anda harus mencoba ini, hanya bekerja di windows sekalipun. Saya memiliki pengaturan dengan sekitar 10 Ghz daya pemrosesan gabungan dan video berdurasi 90 menit memakan waktu rata-rata 30-32 menit untuk konversi (audio x.264 / AAC / 1800 kbs vbr / 256 kbs).
dxblitzx
Terima kasih atas tanggapan Anda. Saya telah mengubah ini menjadi jawaban yang benar saat ini, karena solusi ini adalah yang paling dekat dengan apa yang saya cari! :)
Terobosan
2

Untuk pengguna Final Cut Studio (hanya Mac), komponen QuickTime x264 bekerja sangat baik bila digunakan dengan klaster yang dibuat menggunakan QMaster. Muat film Anda ke dalam Kompresor dan lanjutkan. Dalam tes saya menemukan peningkatan kecepatan yang layak terutama ketika bekerja pada titik penyimpanan bersama.

Chealion
sumber
3
Sial ... Saya pengguna Windows. Itu terlihat sangat keren, dan mirip dengan apa yang saya cari - Saya hanya berharap itu multi-platform!
Terobosan
2

Untuk Mac OS X 10.5 (saya tidak yakin kompatibilitas untuk 10.6) dulu ada VisualHub , yang akan memungkinkan Anda untuk mengatur peternakan grid di jaringan lokal Anda. Sekarang dihentikan dan ReduxEncoder muncul sebagai penggantinya, tetapi saya tidak bisa menemukan opsi untuk itu.

Tiago Veloso
sumber
2

Saya penggemar berat Sony Vegas untuk pengeditan video Windows ... dan ada fitur yang disebut Network Render. :) Yums.

Alur Kerja Sony Vegas

EDIT: Tidak terlalu yakin apakah ini merupakan solusi yang layak, tetapi alih-alih mencoba mencari aplikasi pengkodean video yang mendukung render jaringan, saya mencoba mencari perangkat lunak yang memungkinkan aplikasi apa pun untuk memanfaatkan komputasi terdistribusi. Dan saya menemukan ini - IAIDataShareServer .

Ini terlihat sangat kuat, dan sampel yang diposting hasilnya sangat bagus. Jika Anda akan mencobanya, beri tahu kami cara kerjanya?

EDIT2: IAIDataShareServer tampaknya hanya menginstruksikan mesin untuk menjalankan tugas individu. Sejauh itu, saya telah mencoba untuk mencari solusi komputasi terdistribusi lainnya, dan daftar beberapa yang menjanjikan.

  1. JPPF
  2. XOREAX
  3. DCEZ (Yang ini terlihat bagus)
pemarah
sumber
3
Kamu yakin tentang itu? forums.creativecow.net/thread/24/895788
Terobosan
1
@Breakthrough: hai sobat, solusi baru yang mungkin ditemukan. Tidak diuji oleh saya sendiri. Lihat jawaban yang diedit. Semoga berhasil!
caliban
2
@scopedreams: Saya melihat itu, dan langsung berpikir itu sempurna ... Sayangnya, pembagian data terdistribusi hanya menjalankan contoh program pada setiap komputer yang terhubung dengannya - berguna untuk menjalankan banyak pekerjaan, dengan setiap klien menangani satu pekerjaan pada satu waktu ... Tetapi dalam kasus saya, saya ingin hanya satu pekerjaan yang dihitung secara paralel di antara banyak komputer.
Terobosan
1
@Breakthrough: argh darn, kembali untuk menjaring web kurasa.
caliban
1
@Breakthrough: Memperbarui jawaban saya untuk memberikan daftar klien komputasi terdistribusi. Sekali lagi, tidak diuji. Jangan khawatir tentang menerima jawaban saya, saya melakukannya untuk mempelajari sesuatu yang baru untuk diri saya juga. :)
caliban
1

fakta sederhananya adalah TIDAK ada Pengembang di dunia yang sampai saat ini merasa repot untuk menulis dan mengirimkan TCP yang terdistribusi: patch klien / server pengkodean IP / UDP generik untuk x264 saat ini, pada hari ini 1745 lihat x264.nl/

model generik klien / server dipahami dengan baik, seperti basis kode x264 yang bersih, dan meminta klarifikasi kode x264 apa pun adalah masalah bergabung dengan saluran IRC x264 dan bertanya, dalam beberapa menit Anda biasanya akan memiliki kunci x264 Dev atau dua menjawab pertanyaan Anda dalam cara kerja bagian kode itu, dan bahkan mendapatkan gagasan praktis tentang bagaimana Anda dapat menulis ulang kode Anda yang sedang berkembang agar lebih sesuai dengan x264 (dan x262 encoder Mpeg2 baru berdasarkan kerangka kerja kelas dunia x264 sedang dikerjakan dengan benar sekarang) model.

Jadi jika Pengembang Anda maka hal terbaik yang dapat Anda lakukan untuk masa depan kualitas dan profesi 32/64 bit x264 encoding video terdistribusi sebenarnya menulis ini klien dasar / server patch yang diperlukan untuk membuat satu contoh x264 atau web terpisah / GUI antarmuka aplikasi dengan kode API x264 klien / server baru yang Anda tulis, untuk secara aktif mencari, dan menetapkan serta meneruskan bagian penyandian terpisah dari satu video ke kode klien x264 terkelola baru yang cocok yang juga Anda tulis.

klien / server baru Anda benar-benar didistribusikan, tambalan dasar encode bahkan tidak perlu menjadi yang terbaik, hanya dasar tetapi berfungsi dan kode C berfungsi penuh yang akan diuji dan digunakan doom10.org/index.php?action=unread

, karena ada satu hal yang tampaknya suka dilakukan oleh pengembang x264, dan itu mengambil kode C yang ada lambat dan menulis versi yang dioptimalkan itu, bagian demi bagian, tetapi Anda harus benar-benar mengirimkan (tambalan selamat datang) kode beta yang sebenarnya pertama terhadap cabang terbaru OC

itu harus layak dilihat, dan benar-benar membuat upaya untuk mengkodekan server x264 ini ke banyak klien x264 yang ditambal saat ini karena x264 baru saja memiliki kemampuan pengkodean kedalaman 10bit (yang berarti kualitas tinggi Tinggi, Tinggi 10, Tinggi 4: 2: 2 H. 264 profil intensif komputasi sekarang tersedia untuk semua orang secara gratis dengan x264) ditambahkan.

untuk dioptimalkan untuk kecepatan ekstra dengan perakitan segera http://mailman.videolan.org/pipermail/x264-devel/2010-October/007858.html

tetapi bahkan mesin 8 inti tunggal akan berjuang untuk memberikan output kualitas tertinggi dalam waktu yang wajar dengan 1080P, dan segera 2K dan 4K Def sangat tinggi dll, sangat mudah untuk mengatur dan menggunakan opsi enkode x264 / H.264 didistribusikan asli hanya satu atau dua tambalan Jadi.

jika seorang dev, tolong jangan tunggu, lakukan hari ini.

didistribusikan x264
sumber
Sebenarnya, saya berpikir untuk melakukan ini. Masalah utama sebenarnya bukan membuat dua komputer melakukan perhitungan, melainkan mentransfer data set-kerja antar mesin. Jauh lebih mudah untuk memindahkan data masuk dan keluar dari RAM pada satu mesin (dalam banyak gigabyte per detik), tetapi jauh lebih lambat pada LAN (maksimal 100 megabita per detik).
Terobosan
1

Anda mungkin melihat di Media Encoding Cluster :

Media Encoding Cluster adalah Solusi Pengodean Cluster Open Source pertama yang ditulis dalam C / C ++ untuk Media (Video dan Audio) yang didistribusikan.

Media Encoding Cluster adalah encoder video yang dapat diperluas, yang menggunakan grid peer-to-peer yang ringan untuk meningkatkan kekuatan pemrosesan PC biasa dengan tujuan mendistribusikan encoding video yang sangat terkompresi, misalnya MPEG4 dan H.264

Ini mendistribusikan Potongan Video melalui Jaringan ke Node Klien dan memparalelkan Tugas Pengkodean untuk satu File bahkan lebih dari satu Komputer untuk mengurangi Waktu Pengodean per File.

Pendekatan lain ditawarkan untuk Nvidia oleh Badaboom ($ 39,99 dengan uji coba), juga diulas di sini :

Badaboom Elemental menggunakan antarmuka CUDA Nvidia untuk melakukan banyak pekerjaan kasar DVD ripping dengan menggunakan GPU, bukan CPU lama apak Anda.

Dengan cara yang sama, ada juga Avivo Video Converter untuk ATI Radeon, yang dijelaskan dalam wikipedia , meskipun mungkin perlu beberapa upaya untuk membuatnya berfungsi.

harrymc
sumber
@Breakthrough: Sudahkah Anda melihat produk-produk ini?
harrymc
1

Meskipun mungkin sedikit saran berlebihan, Server Karbon Rhozet dapat menggabungkan beberapa contoh Carbon Coder untuk pekerjaan yang telah Anda jelaskan.

Situs web untuk Server Karbon Rhozet

Beberapa node Carbon Coder dapat dikonfigurasikan sebagai transcoding farm, dikendalikan oleh satu atau lebih Server Carbon. Carbon Server memungkinkan pemrosesan otomatis tugas transcoding volume tinggi, kegagalan server yang dikendalikan oleh simpul Carbon Coder, serta mengelola distribusi pekerjaan, penentuan prioritas pekerjaan, keseimbangan beban, transfer FTP, pemantauan status, dan pemberitahuan pekerjaan.

edusysadmin
sumber