สามารถทำการเข้ารหัส h264 ด้วยฮาร์ดแวร์ได้หรือไม่


12

Raspberry Pi จะทำการเข้ารหัสฮาร์ดแวร์เร่งความเร็ว h264 เมื่อบันทึกวิดีโอจากบอร์ดกล้อง ฉันจะเข้ารหัส h264 (โดยใช้การเร่งความเร็วฮาร์ดแวร์) ได้อย่างไรเมื่อภาพต้นฉบับไม่ได้มาจากกล้องโดยตรง

มีเครื่องมือบรรทัดคำสั่งที่สนับสนุนสิ่งนี้หรือไม่

ถ้าไม่ฉันควรใช้ API ใดเพื่อให้เป็นไปได้


คุณกำลังเข้ารหัสอะไรและปัจจุบันเป็นอย่างไร - คุณกำลังแปลงไฟล์วิดีโอ, แสดงผลจากภาพและเสียง, ฯลฯ ...
วิลฟ

@ Wilf ฉันสนใจสิ่งนี้โดยทั่วไป แต่ฉันมีแอปพลิเคชันปัจจุบัน: การเข้ารหัสเวลาล่วงเลยไปยังวิดีโอโดยตรง ฉันไม่สามารถใช้ raspivid เพราะฉันต้องการ framerates ต่ำระหว่าง 1/5 และ 2 fps นอกจากนี้การเปิดรับแสงอัตโนมัติของ raspivid ก็เข้าสู่การแกว่งภายใต้สภาพแสงของฉัน (แสงน้อย) ดังนั้นฉันต้องการใช้ raspistill แต่เข้ารหัสโดยตรงกับวิดีโอเพื่อให้ผลไม่ใช้พื้นที่มากเกินไป (เช่น JPEGs) ในฐานะที่เป็นแอปพลิเคชั่นที่สองฉันต้องการโพสต์ประมวลผลแต่ละเฟรมตามเวลาจริงโดยใช้ Mathematica (ใช้เวลา CPU นาน) แล้วส่งไปเข้ารหัสใน h264
Szabolcs

1
@Wilf ฉันจะมีวิธีการแก้ปัญหาบางส่วนซึ่งผมคิดว่าควรจะเป็นไปได้ที่จะทำให้การทำงาน: ความคิดเป็นสิ่งที่ต้องการraspiyuv -o - | rpi-encode-yuv(ประมาณ) ที่rpi-encode-yuvเครื่องมือจากที่นี่ ขนาดเฟรมมีการกำหนดค่าตายตัวในเครื่องมือนี้ดังนั้นคุณต้องเปลี่ยนมันที่จุดเริ่มต้นของไฟล์ C และคอมไพล์ใหม่ น่าเสียดายที่ฉันยังไม่ได้จัดการเพื่อให้ได้เอาต์พุตที่จัดเรียงอย่างถูกต้องเนื่องจากraspiyuvดูเหมือนจะไม่เข้ารหัสขนาดเฟรมลงในเอาต์พุต ฉันได้ภาพที่ค่อยๆเปลี่ยนไปซึ่งในที่สุดก็เปลี่ยนเป็นขยะ ยังคงทำงานกับมัน
Szabolcs

คำตอบ:


8

GStreamer รวมอยู่ใน Raspbian และด้วยปลั๊กอิน OpenMAX มันจะใช้ความสามารถในการเข้ารหัสฮาร์ดแวร์ของ Raspberry Pi

ดูลิงค์นี้สำหรับการสอนเกี่ยวกับการทำสิ่งที่คุณกำลังมองหา: https://www.raspberrypi.org/forums/viewtopic.php?t=72435

หากคุณสนใจแปลงรหัสฉันเพิ่งโพสต์คำตอบไปยังอีกคำถามที่คุณอาจสนใจ: ฉันคาดหวังความเร็วอะไรจากการเข้ารหัสฮาร์ดแวร์ H264


ขอบคุณ! ฉันไม่สามารถทดสอบได้ในตอนนี้ แต่จะยอมรับล่วงหน้าตามบทแนะนำของคุณ
Szabolcs

1

ดูเหมือนรวบรวม ffmpeg ด้วยตัวเองใน RPi3B + คุณจะได้รับ

การเข้ารหัสวิดีโอความละเอียดสูง 30 FPS จากลำดับภาพ1920 X 1080 JPEG - การเคลื่อนไหวที่สำคัญและรายละเอียดอินทราเฟรม - การตั้งค่าคุณภาพสูง:

ซอฟต์แวร์การเข้ารหัส H.264 (CPU): 2.6 FPS (ช้ากว่าเวลาจริง 11.5 เท่า)

การเข้ารหัสฮาร์ดแวร์ H.264 (GPU): 6.3 FPS (ช้ากว่าเวลาจริง 4.8 เท่า)

การเข้ารหัสวิดีโอความละเอียดสูง 30 FPS จากลำดับภาพ640 X 480 JPEG - การเคลื่อนไหวที่สำคัญและรายละเอียดอินทราเฟรม - การตั้งค่าคุณภาพสูง:

ซอฟต์แวร์การเข้ารหัส H.264 (CPU): 18 FPS (ช้ากว่าเวลาจริง 1.7 เท่า)

การเข้ารหัสฮาร์ดแวร์ H.264 (GPU): 38 FPS (1.3 เท่าเร็วกว่าเวลาจริง)

สคริปต์ที่จะช่วยให้บรรลุทั้งหมดนี้อยู่ในฟอรั่ม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.