Raspberry Pi y la captura de video: un dilema en 1080p

Publicado por

Hace poco recibí un par de proyectos que involucran capturar video. Uno es un proyecto de imágenes en 3D en el que queremos usar cinco fuentes de video de 1080p para capturar una rotación de un minuto de un objeto en una plataforma, lo que nos da una cantidad enorme de datos para entrenar un software de reconocimiento de imágenes.

El otro proyecto es bastante emocionante, ya que tendremos a un invitado especial en nuestro laboratorio, y estaba tratando de idear cómo involucrar a la comunidad en algunas de las cosas que vamos a construir. ¿Por qué no transmitir el laboratorio completo en vivo en nuestro canal de YouTube, para que la gente pueda ver lo que estamos haciendo e interactuar con nosotros?

Ambos proyectos son divertidos, y ya que teníamos varios Raspberry Pi 3 a mano, decidí usar uno y ver si podía capturar algunos videos o convertirlo en un dispositivo de transmisión efectivo, para no tener que quitarle su laptop, que es más poderosa, a nuestro encargado de los videos. Si podía hacer que esta pequeña computadora de una sola placa realizara esas tareas, eso dejaría disponibles las máquinas más poderosas, y también sería una demostración genial, pero me preocupaba saber si la placa realmente tenía los caballos de fuerza necesarios para lograrlo.

En un principio solo estaba investigando todo lo que podía con respecto a capturar video, y decidí tratar de trabajar con una cámara web USB que tenía a mano, la Logitech C920, y traté también de implementar la cámara NoIR Pi que habíamos usado en nuestro proyecto Fridge Defender. Aunque el Raspberry Pi incluye algo de software integrado para capturar video, como Streamer, decidí tomar una ruta diferente y usar FFmpeg, que cuenta con una gran comunidad y muchas opciones para diferentes codificadores, lo que me otorga flexibilidad y muchos ejemplos con los que comenzar.

Mis resultados iniciales no fueron prometedores. Usar ffmpeg para capturar video desde la cámara web USB a un archivo AVI dio malos resultados. El Raspberry Pi llegaba a cerca del 50% del uso de la CPU y no tenía posibilidades de capturar video 1080p a una velocidad razonable de 30 cuadros por segundo. Cuando vi los resultados, tenían cerca de 6,6 cuadros por segundo, por lo que el video se veía cortado y no servía para transmitir desde nuestro laboratorio o para crear objetos en 3D. Probé con 720 y subió a 14 cuadros por segundo, pero aún no era suficiente. Pasé al formato WVGA (que es de 854x480) y finalmente obtuve los 30 cuadros por segundo consistentes que buscaba, pero la calidad de video dejaba mucho que desear, y para el reconocimiento de imágenes, entre más píxeles, mejor. Estaba decepcionado de mi pequeño caballo de batalla Pi, pero no estaba listo para rendirme aún.

A estas alturas, podía decidir usar una computadora diferente con potencia adicional, o seguir adelante. Decidí seguir adelante, porque me gustan los desafíos y pensé que el Pi podía hacer más. Comencé a recompilar ffmpeg con diferentes códecs para tener audio y video que probar. Normalmente no se recomienda compilar ffmpeg en el Raspberry Pi, ya que compilar código puede requerir mucho trabajo, pero en mi experiencia, y teniendo en mente el procesador de cuatro núcleos del Raspberry Pi 3, compilar ffmpeg de forma local con muchas opciones se vuelve razonable. Si uno elige compilar de forma local, no tomará horas, pero es suficiente tiempo para salir a tomarse un café y conversar con alguien. Se debe usar el comando "make -j4" para utilizar completamente los cuatro núcleos del Pi o se demorará mucho más.

Mi momento "eureka" llegó un jueves por la noche, con la ayuda de la cafeína y la buena música. El problema más grande que tenía con el Pi era que tenía una cantidad de poder limitada dedicada a tratar de transcodificar mi transmisión de video entrante a un formato más útil. La cámara emitía una fuente de video cruda que el Pi convertía en mpeg4, que es un formato más común. La transcodificación ocupaba mucho del poder del procesador y el ancho de banda para el almacenamiento y la memoria. Hay una forma de solucionar el problema de la entrada cruda con el C920. El C920 tiene un codificador dedicado integrado, capaz de emitir una transmisión codificada de h.264. H.264 es otro formato de video común, y aunque me acerca bastante a lo que quiero, la transcodificación igualmente reduciría los cuadros por segundo de mi video.

Después de descubrir que la cámara me podía dar h.264 sin esfuerzo adicional, también descubrí que para la transmisión del laboratorio, YouTube puede recibir una transmisión de h.264 sin que yo necesitara manipularla primero. Aún así tendría que modificar el audio un poco, pero eso no ocupaba recursos del Pi. Después de lograr emitir la transmisión de h.264, me pude ver en YouTube en 1080p a una velocidad estable de 30 cuadros por segundo, y estaba extasiado. 

A continuación se encuentra mi conjunto de comandos final configurado en ffmpeg para darles un punto partida para sus propias aventuras.

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/(insertar clave de transmisión)

El comando anterior me da una transmisión de 1080p y 30fps con audio desde mi cámara web USB a YouTube. Aún le queda mucho que perfeccionar, ya que YouTube se sigue quejando de que mis cuadros clave no son correctos, pero no se pueden negar los resultados, y realmente funciona.

Ahora que puedo capturar video en 1080p y 30fps de forma efectiva, creo que puedo capturar al menos unas cuantas de las fuentes que necesito para nuestro proyecto de imágenes en 3D. El video h.264 se puede convertir a MPEG4 después de capturarlo con MP4Box en Pi, lo que permite que nuestro software de análisis lo separe en cuadros individuales que analizar.

Ahí lo tienen, el Raspberry Pi 3 tiene suficiente potencia para transmitir video de alta definición a YouTube de forma efectiva. Solo deben asegurarse de que la cámara que desean usar pueda emitir una transmisión codificada. El Pi no tiene lo necesario para transcodificar video de 1080p en tiempo real, pero con las opciones adecuadas y algo de investigación, puede hacer gran parte del trabajo. Quiero ver lo que harán con esta información, y espero que todos puedan ver la transmisión de nuestro laboratorio con invitados especiales mientras creamos nuestros próximos proyectos geniales.

Últimas noticias

Lo sentimos, pero su selección de filtros no devolvió resultados.

Hemos actualizado nuestra política de privacidad. Por favor tome un momento para revisar estos cambios. Al hacer clic en Acepto, usted está de acuerdo con la Politica de Privacidad de Arrow Electronics y sus condiciones de uso.

Nuestro sitio Web coloca cookies en su dispositivo para mejorar su experiencia y nuestro sitio. Lea más sobre las cookies que utilizamos y cómo desactivarlas aquió. Es posible que se utilicen las cookies y tecnologías de seguimiento con fines de marketing.
Al hacer clic en "Aceptar", usted está consintiendo la colocación de cookies en su dispositivo y el uso de tecnologías de seguimiento. Haga clic en "Leer más" a continuación para obtener más información e instrucciones sobre cómo desactivar las cookies y tecnologías de seguimiento. Si bien la aceptación de cookies y tecnologías de seguimiento es voluntaria, la desactivación de estos puede resultar en que el sitio web no funcione correctamente, y es posible que ciertos anuncios sean menos relevantes para usted.
Respetamos su privacidad. Lea nuestra política de privacidad aquió