Encoding h264 yang dipercepat oleh perangkat keras dimungkinkan?

11

Raspberry Pi akan melakukan encoding h264 yang dipercepat perangkat keras saat merekam video dari papan kamera. Bagaimana saya bisa menyandikan h264 (menggunakan akselerasi perangkat keras) ketika gambar sumber tidak datang langsung dari kamera?

Apakah ada alat baris perintah yang mendukung ini?

Jika tidak, API apa yang harus saya perhatikan untuk memungkinkan hal ini?

Szabolcs
sumber
Apa yang Anda enkode, dan bagaimana saat ini? - Apakah Anda mengonversi file video, merendernya dari gambar dan suara, dll ...
Wilf
@Aku akan tertarik pada ini secara umum, namun saya memiliki aplikasi sekarang: penyandian selang waktu langsung ke video. Saya tidak dapat menggunakan raspivid karena saya membutuhkan framerates rendah antara 1/5 dan 2 fps. Juga, paparan otomatis raspividu masuk ke osilasi dalam kondisi pencahayaan saya (cahaya rendah). Jadi saya ingin menggunakan raspistill, tetapi menyandikan langsung ke video sehingga hasilnya tidak memakan terlalu banyak ruang (seperti yang dilakukan JPEG). Sebagai aplikasi kedua saya ingin memposting proses setiap frame secara real time menggunakan Mathematica (akan memakan banyak waktu CPU), dan kemudian mengirimkannya untuk dikodekan ke dalam h264.
Szabolcs
1
@Apakah saya punya solusi parsial yang saya pikir harus memungkinkan untuk bekerja: idenya adalah sesuatu seperti raspiyuv -o - | rpi-encode-yuv(kira-kira) di mana rpi-encode-yuvalat tersebut berasal dari sini . Ukuran bingkai dikodekan dalam alat ini, jadi Anda harus mengubahnya di awal file C dan mengkompilasi ulang. Sayangnya saya belum berhasil mendapatkan output yang tepat, karena raspiyuvsepertinya tidak mengkodekan ukuran frame ke dalam outputnya. Saya mendapatkan foto yang secara bertahap bergeser yang akhirnya berubah menjadi sampah. Masih mengerjakannya.
Szabolcs

Jawaban:

8

GStreamer termasuk dalam Raspbian dan dengan plugin OpenMAX-nya akan menggunakan kemampuan enkode perangkat keras Raspberry Pi.

Lihat tautan ini untuk tutorial tentang melakukan apa yang Anda cari: https://www.raspberrypi.org/forums/viewtopic.php?t=72435

Jika Anda tertarik dengan transkoding, saya baru saja memposting jawaban untuk pertanyaan lain yang mungkin menarik bagi Anda: Kecepatan apa yang dapat saya harapkan dari pengkodean perangkat keras-H264?

M. Rubio-Roy
sumber
Terima kasih! Saya tidak dapat menguji ini sekarang tetapi akan menerima di muka berdasarkan tutorial Anda.
Szabolcs
1

Sepertinya dengan mengkompilasi ffmpeg sendiri, di RPi3B + Anda bisa dapatkan

MEMENUHI KOMPLEKSITAS TINGGI 30 FPS VIDEO DARI SEQUENCE CITRA 1920 X 1080 JPEG - MOTION SIGNIFIKAN DAN DETAIL INTRAFRAME - PENGATURAN KUALITAS TINGGI:

Encoding H.264 Berbasis Perangkat Lunak (CPU): 2,6 FPS (11,5 kali lebih lambat daripada waktu nyata)

Encoding H.264 Berbasis Perangkat Keras (GPU): 6,3 FPS (4,8 kali lebih lambat dari waktu nyata)

MEMENUHI KOMPLEKSITAS TINGGI 30 FPS VIDEO DARI SEQUENCE IMAGE 640 X 480 JPEG - MOTION SIGNIFIKAN DAN DETAIL INTRAFRAME - PENGATURAN KUALITAS TINGGI:

Encoding H.264 Berbasis Perangkat Lunak (CPU): 18 FPS (1,7 kali lebih lambat daripada waktu nyata)

Encoding H.264 Berbasis Perangkat Keras (GPU): 38 FPS (1,3 kali LEBIH CEPAT daripada waktu nyata)

Script untuk bantuan mencapai semua ini dalam forum thread .

akostadinov
sumber