Estou tentando fazer a super resolução com o FFmpeg seguindo este tópico do Video Stackexchange: Como funcionam os filtros de super resolução no FFmpeg? .
SISTEMA :
- Ubuntu 20.04
- Nvidia 510 (verificado usando
nvidia-smi
) - CUDA 11.6 (verificado usando (
nvcc --version
) - CUDNN 8.4 (método de instalação e verificação de execução seguindo seu site oficial )
- Tensorflow 2.7.0 (método de instalação e verificação de execução seguindo seu site oficial )
- TensorRT (instalado a partir do
pip3
) - Instalado
zlib1g
ezlib1g-dev
(viaapt-get
)
Eu tive que construir o ffmpeg com tensorflow, aqui estão as configurações completas do tutorial:
./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--extra-libs="-lpthread -lm" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-gnutls \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-libtensorflow \
--enable-nonfree
ERRO:
Não houve erro durante a construção e instalação do FFmpeg da fonte. No entanto, a execução do FFmpeg (incluindo ffmpeg --version
) resulta neste erro:
ffmpeg: Relink `/usr/local/lib/libtensorflow_framework.so.2' with `/lib/x86_64-linux-gnu/libz.so.1' for IFUNC symbol `crc32_z'
ffmpeg: symbol lookup error: ffmpeg: undefined symbol: vaSyncBuffer
Parece que está relacionado ao tensorflow, no entanto, verifiquei que o tensorflow está funcionando corretamente no meu sistema. Não consegui encontrar nada no Google, há apenas um tópico discutindo exatamente o mesmo erro ( aqui ), no entanto, ainda não há solução. Estou ciente de que o erro não está relacionado ao link simbólico, mas apenas no caso de essa informação ser necessária:
$ ls -l /usr/local/lib | grep "libtensor*"
lrwxrwxrwx 1 root root 28 Apr 10 05:17 libtensorflow_framework.so -> libtensorflow_framework.so.2
lrwxrwxrwx 1 root root 32 Apr 10 05:19 libtensorflow_framework.so.2 -> libtensorflow_framework.so.2.7.0
-r-xr-xr-x 1 root root 38362936 Apr 10 05:14 libtensorflow_framework.so.2.7.0
lrwxrwxrwx 1 root root 18 Apr 10 05:18 libtensorflow.so -> libtensorflow.so.2
lrwxrwxrwx 1 root root 22 Apr 10 05:19 libtensorflow.so.2 -> libtensorflow.so.2.7.0
-r-xr-xr-x 1 root root 784355912 Apr 10 05:14 libtensorflow.so.2.7.0
$ ldd /usr/local/lib/libtensorflow_framework.so.2
linux-vdso.so.1 (0x00007ffdd598e000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc9f93bd000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc9f926e000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc9f9264000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc9f9241000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fc9f9027000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fc9f900c000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc9f8e18000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc9fb31a000)
$ ls -l /lib/x86_64-linux-gnu | grep "libz.*"
lrwxrwxrwx 1 root root 14 Oct 15 2020 libz.so.1 -> libz.so.1.2.11
-rw-r--r-- 1 root root 108936 Oct 15 2020 libz.so.1.2.11
$ ldd /lib/x86_64-linux-gnu/libz.so.1
linux-vdso.so.1 (0x00007ffc693bf000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f3935cfb000)
/lib64/ld-linux-x86-64.so.2 (0x00007f3935f5c000)
[ATUALIZAR]
O erro 1 foi resolvido (veja a resposta abaixo). Agora o que resta é o Erro 2:
$ ffmpeg --version
ffmpeg: symbol lookup error: ffmpeg: undefined symbol: vaSyncBuffer
Alguma sugestão ?
CORREÇÃO PARA O ERRO 1:
Instalei
zlib1g
viaapt-get
e acho que esse foi o problema porque não era a versão que o FFmpeg queria. Estou seguindo a resposta desta pergunta com algumas modificações:Procure informações sobre links simbólicos em
libz.so.1
Abra este site e procure um pacote seguindo o link simbólico (o meu é
libz.so.1.2.11
). Baixei todos os pacotes (3 deles :zlib1g
,zlib1g-dev
ezlib1g-dbg
).Remova e limpe já instalado
zlib1g
ezlib1g-dev
comapt-get remove --purge
, depois corrija qualquer coisa,sudo apt --fix-broken install
se necessário.Instale 3 pacotes do ponto 2 com:
sudo dpkg -i
sudo ldconfig.
Pronto, o erro 1 desapareceu.
PS : Se você fizer
apt-get dist-upgrade
isso, será solicitado que você atualizezlib1g
e/ouzlib1g-dev
, bem, não os atualize, caso contrário, você encontrará esse erro novamente. Eu mantenho o meu de atualização comapt-mark hold
.CORREÇÃO PARA O ERRO 2:
Remova toda
libva*
a instalação da máquina.Instale libva e libva-utils do Intel Github.
libva
em particular, será instalado em um diretório que o FFmpeg não encontrará. Portanto, durante a configuração de ambos, adicione prefixo/usr
Reinício.
Não há mais erro vaSyncBuffer. FFmpeg conseguiu encontrar
libva