Bisakah GPU digunakan untuk Encode h264?

13

Saya bertanya-tanya apakah saya mendapatkan kartu grafis yang lebih baik dapat mempercepat encoding h264 di mesin saya menggunakan rem tangan?

Jika demikian, bagaimana saya bisa tahu kartu grafis apa yang akan mendukung ini?

Saya sadar bahwa GPU dapat melakukan decoding perangkat keras dari h264, tetapi saya tidak yakin tentang penyandian.

Peter
sumber
Terkait: Kompresi Video yang Dipercepat - dengan cara apa pun, Anda ingin memiliki kartu NVIDIA untuk ini dan bersedia mengeluarkan uang.
slhck
Posting blog terkait lainnya: Encode Video Anda Menggunakan GPU Anda
slhck
Untuk pengkodean h.264, rem tangan menggunakan perangkat lunak encoder x264 (videolan) . Beberapa jawaban di bawah ini menyiratkan rem tangan menggunakan ffmpeg, yang dapat menggunakan implementasi x264 atau hw (GPU). Meskipun pertanyaan lama (tapi masih relevan) ini mungkin tidak menanyakan "bagaimana membuat rem tangan lebih cepat", melainkan "bagaimana membuat penyandian h.264 lebih cepat". Jawaban akan memiliki masa simpan (beberapa sudah kedaluwarsa); tetapi untuk sekarang, jika melakukan ML dan / atau pemrosesan batch, Anda mungkin harus mencocokkan implementasi ke perangkat keras Anda
michael
fwiw, saya menemukan komentar ini dari ffmeg menarik: "Enkoder perangkat keras biasanya menghasilkan output kualitas yang jauh lebih rendah daripada enkode perangkat lunak yang baik seperti x264, tetapi umumnya lebih cepat dan tidak menggunakan banyak sumber daya CPU. (Artinya, mereka membutuhkan bitrate yang lebih tinggi untuk membuat output dengan kualitas perseptual yang sama, atau mereka membuat output dengan kualitas perseptual yang lebih rendah pada bitrate yang sama.) "
michael

Jawaban:

7

Menggunakan Handbrake jawabannya adalah tidak. Handbrake adalah encoder h.264 khusus-CPU, meskipun sekarang dapat menggunakan OpenCL untuk penskalaan video dan memiliki beberapa dukungan untuk DXVA untuk decoding video.

Pertanyaan yang dihubungkan oleh slhck menyebutkan MediaCoder , tetapi membutuhkan kartu grafis Nvidia atau CPU Intel dengan inti grafis generasi ke-2.

Ada beberapa produk lama yang sudah usang, khususnya Badaboom dan perangkat lunak ATi Avivo.

Badaboom yang dapat menggunakan prosesor grafis Nvidia dan Intel untuk mempercepat proses penyandian tetapi sekarang sudah tidak digunakan lagi dan tidak mendukung kartu grafis yang lebih baru.

ATi memiliki encoder video mereka sendiri yang dulu disebut "Avivo" sebelum digabungkan ke dalam Paket AMD Codec yang termasuk AMD Video Converter meskipun tidak lagi tersedia.

Mokubai
sumber
Jadi saya menggunakan CPU AMD saat ini, apakah itu berarti ini buang-buang waktu untuk saya? Bisakah itu kartu NVIDIA - oh jadi harus mendukung CUDA?
peter
Saya menemukan tautan ini, en.wikipedia.org/wiki/CUDA yang menunjukkan bahwa cukup banyak kartu NVIDIA mendukung CUDA.
peter
Saya telah memperbarui jawaban saya dengan tautan ke paket perangkat lunak AMD yang dapat membantu Anda menggunakan GPU untuk menyandikan video, tetapi membutuhkan kartu seri HD2000 atau lebih baik. Jika Anda memiliki CPU yang sangat kuat tetapi kartu grafis anggaran maka Handbrake mungkin masih lebih cepat.
Mokubai
Badaboom sedang berakhir masa hidupnya pada 4/18/2012.
HVS
2
Jawaban di atas tidak / tidak lagi benar.
totaam
4

x264 sekarang mendukung akselerasi pengkodean OpenCL. Berapa banyak akselerasi yang Anda dapatkan akan tergantung pada kinerja kartu grafis Anda, pada GTS 450 saya, saya tidak mendapatkannya dan dengan kartu yang lebih lambat justru memperlambat encoding. Kartu yang lebih baik dapat membantu. Yang perlu Anda lakukan adalah menambahkan --opencl ke baris perintah x264. Saya percaya rem tangan menggunakan perpustakaan x264 yang sama dan memang menawarkan akselerasi OpenCL yang sama pada build yang lebih baru.

totaam
sumber
Bagaimana saya harus menggunakan akselerasi pengkodean OpenCL?
Dr.jacky
2

https://trac.ffmpeg.org/wiki/HWAccelIntro

FFmpeg menyediakan subsistem untuk akselerasi perangkat keras.

Akselerasi perangkat keras memungkinkan untuk menggunakan perangkat tertentu (biasanya kartu grafis> atau perangkat tertentu lainnya) untuk melakukan pemrosesan multimedia. Hal ini memungkinkan untuk menggunakan perangkat keras khusus untuk melakukan perhitungan yang menuntut sambil membebaskan CPU dari perhitungan tersebut. Biasanya akselerasi perangkat keras memungkinkan perangkat keras tertentu (biasanya GPU) untuk melakukan operasi yang terkait dengan pengodean dan pengodean stream video, atau memfilter video.

Saat menggunakan FFmpeg alat, decoding berbantuan HW diaktifkan menggunakan melalui -hwaccelopsi, yang memungkinkan decoder tertentu. Setiap dekoder mungkin memiliki batasan spesifik (misalnya dekoder H.264 hanya dapat mendukung profil dasar). Pengkodean yang dibantu HW diaktifkan melalui penggunaan enkoder tertentu (misalnya nvenc_h264). Pemfilteran pemrosesan yang dibantu HW hanya didukung dalam beberapa filter, dan dalam hal ini Anda mengaktifkan kode OpenCL melalui opsi filter.

Ada beberapa standar akselerasi perangkat keras API, beberapa di antaranya didukung sampai batas tertentu oleh FFmpeg.

Opsi "-hwaccel auto" memungkinkan Anda untuk memilih pengodean akselerasi berbasis perangkat keras yang akan digunakan untuk sesi penyandian. Anda dapat menambahkan param ini dengan "auto" sebelum input (jika x264 Anda dikompilasi dengan dukungan OpenCL Anda dapat mencoba menambahkan param -x264opts), misalnya:

ffmpeg -hwaccel auto -i input -vcodec libx264 -x264opts opencl output

Maaf, tapi saya tidak ingat bagaimana mendaftar semua opsi yang tersedia untuk "-hwaccel".

Anda juga dapat mencoba ini: https://wiki.archlinux.org/index.php/Hardware_video_acceleration

Ruslan Berozov
sumber
Tampaknya ini tidak menjawab pertanyaan secara khusus, meskipun tampaknya bermanfaat. Bagaimana kalau Anda menambahkan beberapa detail yang menunjukkan bagaimana ffmpeg dan argumennya dapat membantu OP.
music2myear
Jawaban ini menyiratkan menggunakan ffmpeg alih - alih rem tangan untuk pengkodean h.264, yang mungkin baik-baik saja, karena pertanyaannya mungkin hanya menanyakan cara tercepat untuk menyandikan - dan anggap GPU akan mengaktifkannya. Perhatikan bahwa tidak semua GPU sama kuatnya (misalnya GPU terintegrasi vs khusus), dan CPU juga memiliki optimisasi yang dapat digunakan perpustakaan jika perpustakaan dikompilasi untuk mendukungnya. Jadi "akselerasi perangkat keras" adalah jalan yang benar untuk turun, apakah itu melalui CPU atau GPU.
michael
0

Saat ini, Handbrake mendukung encoders yang dipercepat perangkat keras berikut untuk H.264 / AVC:

  1. Intel QuickSync (di Windows dan di Linux). Ini kompatibel dengan setidaknya Sandybridge (Core generasi ke-2) Intel - jalur prosesor seri dengan grafik terintegrasi yang diaktifkan dan terpapar ke sistem operasi. Perangkat keras yang disarankan untuk kualitas penyandian yang dapat diterima: Haswell (Core-series generasi ke-4) dan seterusnya, yang memperkenalkan konsep level target berbutir halus (TUs), fungsi lookahead (seperti mode pengkodean LA-BRC dan ICQ ) dengan kinerja yang jauh lebih baik. Lihat panduan penggunaan dari dokumentasi rem tangan di sini .

  2. NVENCIA NVIDIA : Ini membutuhkan setidaknya GPU seri Kepler (GK +) NVIDIA ke atas dari SKU konsumen berkinerja tinggi (seri GTX) dan jajaran profesional (GPU Quadro dan Tesla berdasarkan Kepler dan seterusnya). Ini tersedia di Windows dan Linux.

Yang perlu diperhatikan adalah bahwa dengan NVENC, Anda akan dibatasi secara artifisial paling banyak pada dua sesi penyandian simultan pada SKU konsumen, sedangkan jajaran profesional tetap tidak terpengaruh oleh ini. Untuk referensi Anda tentang kemampuan enkoder tertentu, lihat matriks GPU . Untuk kinerja dan kualitas encoder terbaik, ikuti iterasi Pascal dan Volta GPU terbaru.

Opsional:

  1. Dukungan encoding AMD AMF juga tersedia di build Nightly terkini untuk Windows ONLY. Catatan khusus tentang AMD AMF (yang memanfaatkan VCE encoder yang dibangun di dalam perangkat keras di semua GCN + SKU) adalah pada perangkat keras yang lebih baru, seperti Polaris (seri RX 400+) dan Vega , beberapa penyetelan encoder canggih untuk H.264 / AVC dihentikan karena mereka memperkenalkan dukungan pengkodean HEVC. Apa yang AMD jatuhkan adalah pengkodean bingkai-B, tanpa dukungan untuk kuantisasi adaptif (AQ), sebuah fitur yang telah diimplementasikan oleh encoders berbasis perangkat keras (QuickSync dan NVENC) yang telah diimplementasikan untuk generasi tanpa regresi. Juga, lihat ini di catatan tentang metrik throughput tentang apa yang diharapkan.

Sejauh menyangkut dukungan Apple, ini yang terbaik, tentatif . The VideoToolBox API, di mana dilaksanakan di luar lingkup Handbrake, juga tampaknya memiliki satu set yang sangat terbatas kontrol. Bahkan jika Handbrake mengadopsinya di hulu, jangan berharap keajaiban dalam hal retensi kualitas dan throughput.

Perhatikan bahwa Anda mungkin perlu menggunakan bangunan malam terbaru untuk menggunakan fitur enkoder terbaru di platform Anda, seperti saat ini. Ini pasti akan berubah di masa depan.

林正浩
sumber