ffmpegfs: sistema de archivos basado en FUSE para vídeo y audio
Seguramente sepas que existen varios tipos de sistemas de archivos o FS (File System en inglés). Algunos basados en FUSE (Filesystem in Userspace), un módulo del kernel Linux que permite que un usuario no privilegiado pueda crear sus propios sistemas de archivos sin necesidad de editar el código del núcleo.
Eso se logra gracias a esta implementación de “puente” para poder tener sistemas FS virtuales (véase VFS), que a diferencia de los tradicionales, no almacenan datos propios. Solo actúan como una capa intermediario dicho a groso modo sin entrar en demasiados detalles.
Dicho eso, seguramente también conozcas la potente herramienta ffmpeg, para contenido multimedia para reparar, modificar, y cambiar formatos de los archivos, entre otras cosas. Una potente utilidad de la que ya hemos escrito en este blog. Pues bien, ahora uniendo ambos conceptos tenemos ffmpegfs.
¿Qué es ffmpegfs? Pues es un sistema de archivos basado en FUSE para transcoding de vídeo y audio al vuelo mientras está abierto. Algo super práctico e interesante.
Las características más destacables de ffmpegfs son:
- Transcodificación de solo lectura. Es decir, convertir formatos de audio y vídeo sobre la marcha.
- Gratuito, y puedes ver la página en Github.
- Soporta formatos como MP4, WebM, OGG, MP3, OPUS, MOV, ProRes, WaV, etc.
- Escrito en C y C++, haciendo uso de la biblioteca FUSE.
Para su instalación, puedes hacerlo desde los repos de tu distro favorita, como puede ser con APT-GET en Debian y derivados. Una vez instalado, puedes usarlo fácilmente. Por ejemplo, imagina que quieres convertir todos los archivos de un directorio /home/multimedia a MOV y pasarlos a /home/convertidos, entonces puedes usar el siguiente comando:
ffmpegfs --desttype=mov+aiff --log_maxlevel=DEBUG --cachepath=/tmp/cache ~/home/multimedia ~/home/convertidos
O puedes convertir todos los de audio de ese mismo directorio a MP3 con Bitrate de 256:
ffmpegfs --audiobitrate=256K --desttype=mp3 ~/home/multimedia ~/home/convertidos -o allow_other,ro
Como puedes ver, es bastante simple de usar…