Eu tenho uma compilação personalizada do FFmpeg, com filtros personalizados, criada a partir do branch master do FFmpeg. Está funcionando bem no 20.04, em várias máquinas. Porém, quando tentei executá-lo em minha máquina pessoal, atualizada de 20.04 para 22.04 há algumas semanas, recebi este erro:
$ ./ffmpeg
./ffmpeg: error while loading shared libraries: libvpx.so.6: cannot open shared object file: No such file or directory
A razão óbvia para isso é a necessidade de recompilá-lo usando novos cabeçalhos de novos pacotes apontando para novas versões das bibliotecas. O que eu fiz. Porém, não importa quantas vezes eu recompilei, ele sempre acaba procurando as mesmas versões antigas das bibliotecas.
Aqui está uma lista de bibliotecas que não funcionam no meu processo de construção:
$ 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 eles têm versões mais recentes instaladas:
$ 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
Até agora, eu tentei:
- Obviamente reconfigure e recompile.
- Excluindo todos os binários do diretório de construção, bem como procurando referências diretas codificadas para versões lib (que não encontrei).
- Clonando o repositório em um diretório limpo, com os mesmos sinalizadores de configuração, mas sem código personalizado.
Em todos os casos, a compilação foi bem-sucedida, mas os arquivos binários possuem referências a essas bibliotecas inexistentes. Meus flags de configuração são todos --enable-libstuff
para bibliotecas diferentes, como é normal ao configurar alguma compilação, e não possuem versionamento explícito.
Não vejo ninguém online com esse problema, então suponho que talvez seja algum problema local. Mas não entendo o que poderia ser, pois não tenho essas versões codificadas em lugar nenhum.
Então, minha pergunta é:o que pode estar afetando minha build no Ubuntu 22.04, que acaba se comportando dessa forma?
Responder1
Para quem está tendo esse problema: eram as bibliotecas compartilhadas do /usr/local/lib
, construídas meses atrás, antes da atualização. As compilações mais recentes construíram tudo bem, mas eu não estava executando sudo make install
para implantar as bibliotecas compartilhadas mais recentes. Portanto, o executável mais recente estava tentando usar as bibliotecas compartilhadas mais antigas, que por sua vez apontavam para bibliotecas inexistentes.
Caso encerrado.
Responder2
Tive problemas com ffmpeg após atualizar para o Ubuntu 23.04 e tive o problema libvpx.so.6.
apt-cache
mostra apenas 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 os debs mais antigos, fui até a pesquisa de pacotes debian, por exemplo
https://packages.debian.org/search?keywords=libvpx&searchon=names
Aqui mostra um monte de coisas antigas:
Descobri que a maioria das minhas dependências faz parte do bullseye
, então basta clicar no link bullseye/stable e, em seguida, clicar em, por exemplo, amd64 (ou qualquer que seja sua arquitetura):
Em seguida, clique em um espelho, por exemplohttp.us.debian.org/debian
Depois de baixado, instale com:
sudo dpkg -i ~/Downloads/libvpx6_1.8.2-1build1_amd64.deb
Outros que tive que fazer:
- libdav1d4
- libx264-160
- libx265-192
... finalmente ffmpeg -codecs
foi executado com alguma saída.
(Ah, e então o Firefox também poderia começar a reproduzir TODOS os vídeos do Youtube, não apenasalgunsdeles.)