Erro com bibliotecas compartilhadas: FFMPEG

5

No meu laptop antigo rodando 16.04, sempre que tento usar o ffmpeg, recebo o seguinte erro:

$ ffmpeg
ffmpeg: error while loading shared libraries: libcudart.so.5.5: cannot open shared object file: No such file or directory

O ffmpeg costumava funcionar bem e quebrou em algum momento. Eu não posso ter certeza exatamente quando, mas pode ter sido quando eu fiz a atualização de 14.04 para 16.04.

A execução do ldd confirma que esta biblioteca (a biblioteca de tempo de execução CUDA) está ausente, mas tudo está bem:

$ ldd /usr/bin/ffmpeg | grep libcudart
libcudart.so.5.5 => not found

Tenho quase certeza de que o arquivo (libcudart5.5) não existe em nenhum lugar do sistema (tentei 'localizar' etc) ou, na verdade, qualquer outra versão do libcudart. O mais próximo do repo para o que eu preciso é o libcudart7.5, uma versão posterior. Mas isso vem junto com uma atualização de driver nvidia (nvidia-367) como uma dependência que eu encontrei várias vezes agora tanques todo o sistema (devido à placa gráfica estar um pouco fora da data, eu acho).

Então, basicamente, estou confuso sobre o motivo pelo qual o ffmpeg está tentando vincular ao libcudart5.5 em primeiro lugar. Certamente, deveria ser possível executar o ffmpeg sem precisar de suporte a GPU? Na verdade eu sei que é porque em outro computador eu uso o 16.04, o ldd não mostra nenhuma dependência em qualquer versão do libcudart e o ffmpeg funciona muito bem. A versão do pacote ffmpeg é a mesma em ambos os casos:

$ dpkg -s ffmpeg | grep Version
Version: 7:2.8.11-0ubuntu0.16.04.1

Então, por que está procurando no meu laptop? Eu tentei remover o ffmpeg e reinstalá-lo várias vezes sem sorte. Uma coisa que parece relevante é que encontrei uma entrada residual-config para um pacote chamado libcudart5.5 instalado no meu sistema. Eu realmente não sei o que isso significa, mas depois de removê-lo e reinstalar o ffmpeg, não fez diferença. Também pode ser relevante que em um estágio (abaixo de 14.04) eu tenha o sdk CUDA completo instalado, mas depois o tenha removido completamente e não queira reinstalá-lo.

Eu realmente aprecio qualquer ajuda, porque eu realmente gostaria de usar ffmpeg no meu laptop para conversão de vídeo e isso tem me incomodado há algum tempo.

Obrigado!

    
por C Bridge 25.02.2017 / 00:55

3 respostas

5

Estou respondendo a minha própria pergunta depois de alguma investigação inspirada pelo comentário de ridgy sobre a pergunta original (obrigado!). Comecei a explorar se alguma outra biblioteca usada pelo ffmpeg tinha libcudart como dependência. A ferramenta lddtree do pacote pax-utils é realmente útil para isso, pois fornece uma lista hierárquica das dependências do vinculador em vez de uma lista simples. Por exemplo,

$ lddtree /usr/bin/ffmpeg

Usando isso, descobri que libcudart.so.5.5 era uma dependência do linker de libopencv_core.so.2.4 que ficava em /usr/local/lib de um tempo atrás quando eu compilava o OpenCV 2.4 da origem e nunca limpava quando a nova versão (versão 3.0) veio junto.

Para corrigir isso, eu desinstalei o ffmpeg e todos os opencv packages usando o apt, depois deletei manualmente os arquivos opencv 2.4 restantes em /usr/local/lib using

$ sudo rm /usr/local/lib/libopencv_*.so.2.4*

Em seguida, reinstalou o ffmpeg do repositório e agora está tudo bem.

Isso parece um conjunto bastante específico de circunstâncias que podem não ser tão relevantes para os outros, mas talvez essa resposta possa ser útil para outras pessoas com problemas semelhantes.

    
por C Bridge 25.02.2017 / 17:16
0

Eu tive um problema parecido. E resolvi isso excluindo todas as instâncias do opencv e ffmpeg, desinstalando o ffmpeg e, em seguida, instalando-o novamente:

sudo find / -name "*opencv*" -exec rm -R {} \; 
sudo find / -name "*ffmpeg*" -exec rm -R {} \;
sudo apt-get install ffmpeg
    
por MGM 29.05.2018 / 13:28
0

Execute ffmpeg para ver o que está faltando. Tente encontrar onde está libopencv_core.so.2.4 (ou qualquer arquivo que está faltando). Por exemplo:

find / -name "*libopencv_core.so*"

e se você encontrá-lo em algum diretório, copie-o para /usr/lib/ :

sudo cp /path-where-you-found-it/ /usr/lib/

Finalmente, execute novamente ffmpeg .

Se tudo estiver certo, ele mostrará as opções de ajuda para ele.

    
por soylis 26.10.2017 / 22:46