El día de hoy tuve la necesidad de convertir un archivo de audio a formato MP3 utilizando ffmpeg en FreeBSD:

emi@hal9000:~ $ ffmpeg -i song.ogg song.mp3

Sin embargo, me encontré con que el codec lame para mp3 no está habilitado por defecto debido a implicancias legales respecto a la redistribución de paquetes pre-compilados con audio/lame:

Automatic encoder selection failed for output stream #0:0. Default encoder for format mp3 (codec mp3) is probably disabled. Please choose an encoder manually.
Error selecting an encoder for stream 0:0

Entonces, en lugar de compilar el port (multimedia/ffmpeg) me dispuse a crear mi propia versión personalizada de dicho paquete, a fin de instalar (y luego bloquear) con pkg.



Cómo compilar ffmpeg con soporte para mp3 en FreeBSD

A modo de ejemplo, veamos como compilar una versión personalizada del paquete ffmpeg.

Para identificar el port correspondiente con el paquete ffmpeg, simplemente se puede realizar una búsqueda con find en el árbol de ports:

root@hal9000:~ # find /usr/ports -name ffmpeg
/usr/ports/multimedia/ffmpeg
^C

Cambiar al directorio correspondiente al port y ejecutar make config para establecer las opciones personalizadas:

root@hal9000:~ # cd /usr/ports/multimedia/ffmpeg
root@hal9000:/usr/ports/multimedia/ffmpeg # make config

En este caso deseo asegurarme que se compile con soporte para lame (codec para el formato mp3):

Revisar, y en todo caso modificar, el resto de las opciones de compilación del port.

Ahora es posible verificar qué paquetes son necesarios para compilar el port (make build-depends-list), y qué paquetes son necesarios para el funcionamiento y uso del port (make run-depends-list). Esto permite instalar estas dependencias desde el gestor de paquetes pkg andes de compilar el port, a fin de acelerar el proceso de compilación (evitar compilar el port junto con todas sus dependencias).

Luego crear el paquete ejecutando:

root@hal9000:/usr/ports/multimedia/ffmpeg # make package

Al final el proceso de compilación, el paquete queda en el directorio packages/All dentro del árbol de ports:

root@hal9000:/usr/ports/multimedia/ffmpeg # cd /usr/ports/packages/All/
root@hal9000:/usr/ports/packages/All # ll
total 14048
-rw-r--r--  2 root  wheel  14327088 Aug 29 08:31 ffmpeg-4.0.2_2,1.txz

Para instalar nuestra versión del paquete (no la versión en los repositorios remotos), recurrir al comando pkg add:

root@hal9000:/usr/ports/packages/All # pkg add ffmpeg-4.0.2_2,1.txz 
Installing ffmpeg-4.0.2_2,1...
the most recent version of ffmpeg-4.0.2_2,1 is already installed

Si el paquete ya se encuentra instalado, es necesario forzar su instalación desde la versión local, agregando la opción -f:

root@hal9000:/usr/ports/packages/All # pkg add -f ffmpeg-4.0.2_2,1.txz
Installing ffmpeg-4.0.2_2,1...
package ffmpeg is already installed, forced install
Extracting ffmpeg-4.0.2_2,1: 100%

Luego es recomendable bloquear la actualización del paquete, para que al actualizar el sistema se preserve nuestra versión compilada e instalada manualmente:

root@hal9000:/usr/ports/packages/All # pkg lock ffmpeg
ffmpeg-4.0.2_2,1: lock this package? [y/N]: y
Locking ffmpeg-4.0.2_2,1

Tener en cuenta que, a partir de este momento, somos responsables por el mantenimiento del paquete (mantenerlo actualizado, libre de vulnerabilidades/bugs). Cada vez que se actualice el port con algún parche crítico, será necesario repetir todo este proceso de compilación e instalación.

Referencias


Tal vez pueda interesarte


Compartí este artículo