Raspberry Pi et enregistrement vidéo : un casse-tête à 1 080 p

Publié par

J'ai récemment vu passer quelques projets qui impliquaient des enregistrements vidéo. L'un est un projet d'imagerie 3D pour lequel nous souhaitons utiliser cinq sources vidéo 1 080 p afin d'enregistrer la rotation d'un élément sur une plateforme pendant une minute, ce qui nous donne une quantité incroyable de données pour entraîner un logiciel de reconnaissance d'images.

L'autre projet est assez passionnant, puisque nous aurons un invité spécial dans notre labo et que j'essaie de trouver comment impliquer la communauté dans quelques-uns des projets que nous allons créer. On pourrait, par exemple, placer tout le labo en streaming sur une chaîne YouTube pour que les gens voient ce sur quoi nous travaillons et interagissent avec nous.

Ce sont deux projets assez amusants et puisque nous avions plusieurs Raspberry Pi 3 à notre disposition, j'ai décidé d'en utiliser un et de voir si je pouvais lui faire enregistrer une série de sources vidéo ou le transformer en un bon périphérique de streaming pour ne pas avoir à subtiliser l'ordinateur portable plus puissant de notre spécialiste vidéo. Si je pouvais arriver à faire accomplir ces tâches à ce petit ordinateur à carte unique, ça libérerait vraiment des machines plus puissantes, sans compter que ça ferait une excellente démo, mais je me demandais si la carte était suffisamment puissante pour ça.

Au début, j'ai commencé par chercher des renseigner partout sur l'enregistrement vidéo et j'ai décidé d'essayer de travailler avec une caméra USB que j'avais sous la main, la Logitech C920. J'avais aussi imaginé de mettre à contribution la caméra NoIR Pi que nous avions utilisée pour notre projet Fridge Defender. Bien que le Raspberry Pi soit livré avec quelques logiciels de capture vidéo intégrés, comme Streamer, j'ai décidé de faire autrement et d'utiliser FFmpeg, qui peut tabler sur une large communauté d'utilisateurs et qui offre de nombreuses options pour différents encodeurs, ce qui me donnait donc de la souplesse et une foule d'exemples pour démarrer.

Les premiers résultats n'ont pas été encourageants. L'utilisation de ffmpeg pour enregistrer la vidéo de la webcam USB sur un fichier AVI donnait des résultats médiocres. Le Raspberry Pi consommait environ 50 % de l'utilisation du processeur et je n'avais aucune chance d'arriver à enregistrer de la vidéo en 1 080 p à une résolution raisonnable de 30 images par seconde. Quand j'ai regardé les résultats, j'obtenais environ 6,6 images par seconde, ce qui me donnait une vidéo hachée, inutilisable pour une diffusion en streaming de notre labo ou de la création d'objets en 3D. Je suis redescendu à 720 p et les choses se sont améliorées, jusqu'à 14 images par seconde, mais ça ne suffisait toujours pas. En passant au format WVGA (soit 854 x 480), j'ai finalement pu obtenir mes 30 images par seconde avec la régularité dont j'avais besoin, mais la qualité vidéo laissait beaucoup à désirer. Pour de la reconnaissance d'images, il vaut mieux avoir le plus de pixels possibles. J'étais un peu déçu par mon brave petit Pi, mais je n'étais pas encore prêt à jeter l'éponge.

À ce moment-là, je pouvais choisir d'utiliser un autre ordinateur plus puissant ou de creuser encore la question. Je dis « creuser la question » à dessein, parce que j'aime la difficulté et je pensais que le Pi avait les moyens de faire mieux. Je me suis mis à recompiler le ffmpeg avec différents codecs audio et vidéo pour voir ce que ça donnerait. Compiler du ffmpeg sur le Raspberry Pi est en général déconseillé car compiler du code peut demander beaucoup de travail. Pourtant, si j'en crois mon expérience et si on prend en compte le processeur quadricœur du Raspberry Pi 3, il est parfaitement raisonnable de compiler du ffmpeg en local avec de nombreuses options. Si vous décidez effectivement de compiler en local, ça ne prendra pas des heures, mais vous aurez quand même le temps d'aller vous faire un café et de bavarder avec quelqu'un. N'oubliez pas d'utiliser la commande « make -j4 » pour exploiter pleinement les quatre cœurs du Pi ou vous risquez d'attendre encore plus longtemps.

Avant de pouvoir crier eurêka, j'ai dû attendre une heure avancée, un jeudi soir, en tenant grâce à la caféine et à de la bonne musique. Mon plus gros problème avec le Pi était la puissance limitée dédiée à essayer de transcoder mon flux vidéo entrant en quelque chose que je pensais plus utilisable. La caméra transmettait un flux vidéo raw que le Pi transformait en mpeg4, qui est un format plus courant. Ce transcodage drainait la puissance du processeur, ainsi que la bande passante pour le stockage et la mémoire. Il existe un moyen de contourner ce problème d'entrée raw avec la C920. Cette caméra intègre un encodeur dédié capable d'émettre un flux encodé en h.264. Le h.264 est aussi un format vidéo largement répandu. Il me rapprochait nettement de mon but, mais la tâche de transcodage continuait à peser sur mon nombre d'images par seconde.

Après avoir compris que la caméra me donnerait du h.264 sans travail supplémentaire, j'ai également découvert que pour le flux du labo, YouTube acceptait un flux h.264 en entrée sans que j'aie besoin de le manipuler auparavant. Il fallait encore que je modifie un peu l'audio, mais ça ne posait pas de problème au pi. Après avoir réussi à faire passer tout juste le flux h.264, j'ai pu me voir sur YouTube en 1 080 p avec une résolution régulière de 30 images par seconde. J'étais ravi. 

Vous trouverez ci-dessous mon jeu de commandes définitif set command set into ffmpeg pour vous aider à vous lancer dans vos propres aventures.

ffmpeg -ar 44100 -ac 2 -f alsa -i hw:1,0 -f v4l2 -codec:v h264 -framerate 30 -video_size 1920x1080 -itsoffset 0.5 -i /dev/video0 -copyinkf -codec:v copy -codec:a aac -ab 128k -g 10 -f flv rtmp://a.rtmp.youtube.com/live2/(votre clé de flux ici)

La commande ci-dessus me donne un flux 1 080 p 30 fps avec de l'audio depuis ma caméra USB jusqu'à YouTube. Il y a encore des améliorations à apporter pour que tout soit parfait (YouTube se plaint encore de ce que mes images clés ne sont pas correctes), mais les résultats sont indéniables et ça marche.

Maintenant que j'arrive à enregistrer correctement ma vidéo en 1 080 p/30 fps, je pense que je peux récupérer au moins quelques-unes des sources dont j'ai besoin pour notre projet d'imagerie 3D. La vidéo h.264 peut être convertie en MPEG4 sur le Pi après l'enregistrement à l'aide de MP4Box, ce qui donne à notre logiciel d'analyse quelque chose à découper en images individuelles afin de les analyser.

La preuve est donc faite, le Raspberry Pi 3 est suffisamment puissant pour transférer efficacement une vidéo en streaming haute définition sur YouTube. Il suffit de vérifier que la caméra que vous souhaitez utiliser vous donne un flux encodé. Le Pi n'a pas tout à fait ce qu'il faut pour transcoder de la vidéo 1 080 p en temps réel, mais en faisant les bons choix et en se creusant un peu la tête, on arrive quand même à lui faire faire beaucoup de choses. Je suis impatient de voir ce que vous arriverez à faire avec ces informations et j'espère que vous pourrez tous visionner le flux de notre labo avec nos invités spéciaux lorsque nous créerons nos prochains projets.

Actualité

Sorry, your filter selection returned no results.

Nous avons mis à jour notre politique de confidentialité. Prenez un moment pour lire les changements. En cliquant sur "J'accepte", vous acceptez la clause de confidentialité d'Arrow Electronics ainsi que les conditions d'utilisation.

Notre site Internet place des cookies sur votre appareil pour améliorer votre expérience et pour améliorer notre site. Pour en savoir plus sur les cookies que nous utilisons et la façon de les désactiver, cliquez ici. Des cookies et des technologies de suivi peuvent être utilisés à des fins de marketing. En cliquant sur « Accepter », vous consentez au placement de cookies sur votre appareil et à notre utilisation de technologies de suivi. Cliquez sur « En savoir plus » pour de plus amples informations et instructions sur la façon de désactiver les cookies et les technologies de suivi. Même si l'acceptation des cookies et technologies de suivi est volontaire, leur désactivation peut entraîner un mauvais fonctionnement du site Internet et certaines publicités peuvent être moins pertinentes pour vous. Nous respectons votre confidentialité. Lisez notre politique de confidentialité ici.