Tengo una compilación de FFmpeg personalizada, con filtros personalizados, creada a partir de la rama maestra de FFmpeg. Está funcionando bien en 20.04, en varias máquinas. Sin embargo, cuando intenté ejecutarlo en mi máquina personal, actualizada del 20.04 al 22.04 hace unas semanas, recibí este error:
$ ./ffmpeg
./ffmpeg: error while loading shared libraries: libvpx.so.6: cannot open shared object file: No such file or directory
La razón obvia para esto es la necesidad de recompilarlo usando nuevos encabezados de nuevos paquetes que apunten a nuevas versiones de las bibliotecas. Lo cual hice. Sin embargo, no importa cuántas veces lo recompilé, siempre termina buscando las mismas versiones antiguas de las bibliotecas.
Aquí hay una lista de bibliotecas que no funcionan en mi proceso de compilación:
$ ldd ./ffmpeg | grep not
libvpx.so.6 => not found
libwebp.so.6 => not found
libcodec2.so.0.9 => not found
libx264.so.155 => not found
libx265.so.179 => not found
Todos ellos tienen instaladas versiones más recientes:
$ find /usr/ -name "libvpx.so*" -or -name "libwebp.so*" -or -name "libcodec2.so*" -or -name "libx264.so*" -or -name "libx265.so*" 2>/dev/null
/usr/lib/i386-linux-gnu/libwebp.so.7.1.3
/usr/lib/i386-linux-gnu/libwebp.so.7
/usr/lib/x86_64-linux-gnu/libwebp.so.5
/usr/lib/x86_64-linux-gnu/libx264.so.163
/usr/lib/x86_64-linux-gnu/libcodec2.so
/usr/lib/x86_64-linux-gnu/libx265.so.79
/usr/lib/x86_64-linux-gnu/libvpx.so.3.0.0
/usr/lib/x86_64-linux-gnu/libwebp.so.5.0.4
/usr/lib/x86_64-linux-gnu/x264-10bit/libx264.so.148
/usr/lib/x86_64-linux-gnu/libvpx.so.7.0.0
/usr/lib/x86_64-linux-gnu/libwebp.so
/usr/lib/x86_64-linux-gnu/libvpx.so.7.0
/usr/lib/x86_64-linux-gnu/libcodec2.so.1.0
/usr/lib/x86_64-linux-gnu/libvpx.so.3
/usr/lib/x86_64-linux-gnu/libvpx.so.7
/usr/lib/x86_64-linux-gnu/libwebp.so.7.1.3
/usr/lib/x86_64-linux-gnu/libvpx.so
/usr/lib/x86_64-linux-gnu/libwebp.so.7
/usr/lib/x86_64-linux-gnu/libx265.so
/usr/lib/x86_64-linux-gnu/libvpx.so.3.0
/usr/lib/x86_64-linux-gnu/libx265.so.199
/usr/lib/x86_64-linux-gnu/libx264.so
/usr/lib/x86_64-linux-gnu/libx264.so.148
Hasta ahora he probado:
- Obviamente reconfigure y vuelva a compilar.
- Eliminar todos los archivos binarios del directorio de compilación, además de buscar referencias codificadas directas a versiones de lib (que no encontré).
- Clonar el repositorio en un directorio limpio, con los mismos indicadores de configuración pero sin código personalizado.
En todos los casos, la compilación es exitosa, pero los archivos binarios tienen referencias a esas bibliotecas inexistentes. Mis indicadores de configuración son todos --enable-libstuff
para bibliotecas diferentes, como es normal cuando se configura alguna compilación, y no tienen control de versiones explícito.
No veo a nadie en línea que tenga este problema, así que supongo que tal vez sea algún problema local. Pero no entiendo qué podría ser, ya que no tengo esas versiones codificadas en ninguna parte.
Entonces, mi pregunta es:¿Qué podría estar afectando mi compilación en Ubuntu 22.04, que termina comportándose de esta manera?
Respuesta1
Para cualquiera que tenga este problema: fueron las bibliotecas compartidas en /usr/local/lib
, creadas hace meses, antes de la actualización. Las compilaciones más nuevas compilaron todo bien, pero no las estaba ejecutando sudo make install
para implementar las bibliotecas compartidas más nuevas. Entonces, el ejecutable más nuevo intentaba utilizar las bibliotecas compartidas más antiguas, que a su vez apuntaban a bibliotecas que ahora no existen.
Caso cerrado.
Respuesta2
Tuve problemas con ffmpeg después de actualizar a Ubuntu 23.04 y tuve el problema libvpx.so.6.
apt-cache
solo muestra v7:
$ apt-cache search libvpx
libvpx-dev - VP8 and VP9 video codec (development files)
libvpx-doc - VP8 and VP9 video codec (API documentation)
libvpx7 - VP8 and VP9 video codec (shared library)
Para encontrar las debs más antiguas, simplemente fui a la búsqueda de paquetes de Debian, por ejemplo
https://packages.debian.org/search?keywords=libvpx&searchon=names
Aquí muestra un montón de cosas antiguas:
Descubrí que la mayoría de mis dependencias son parte de bullseye
, así que simplemente haga clic en el enlace diana/estable, luego haga clic en, por ejemplo, amd64 (o cualquiera que sea su arquitectura):
Luego haga clic en un espejo, por ejemplohttp.us.debian.org/debian
Una vez descargado, instálelo con:
sudo dpkg -i ~/Downloads/libvpx6_1.8.2-1build1_amd64.deb
Otros que tuve que hacer:
- libdav1d4
- libx264-160
- libx265-192
... finalmente ffmpeg -codecs
se ejecutó con algún resultado.
(Ah, y entonces Firefox también podría empezar a reproducir TODOS los vídeos de Youtube, no sóloalgunode ellos.)