私は、FFmpeg マスター ブランチからビルドされた、カスタム フィルター付きのカスタム FFmpeg ビルドを持っています。これは、20.04 で複数のマシン上で正常に動作しています。しかし、数週間前に 20.04 から 22.04 にアップデートした個人用マシンで実行しようとしたところ、次のエラーが発生しました。
$ ./ffmpeg
./ffmpeg: error while loading shared libraries: libvpx.so.6: cannot open shared object file: No such file or directory
その明らかな理由は、新しいバージョンのライブラリを指す新しいパッケージの新しいヘッダーを使用して再コンパイルする必要があることです。私はそうしました。しかし、何度再コンパイルしても、結局は同じ古いバージョンのライブラリを探すことになります。
ビルド プロセスで動作しないライブラリのリストは次のとおりです。
$ 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
すべて新しいバージョンがインストールされています:
$ 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
これまで試したこと:
- 当然、再構成して再コンパイルする必要があります。
- ビルド ディレクトリからすべてのバイナリを削除し、ライブラリ バージョンへの直接ハードコードされた参照を検索します (見つかりませんでした)。
- 同じ構成フラグを持ち、カスタム コードなしで、クリーンなディレクトリにリポジトリを複製します。
いずれの場合も、ビルドは成功しますが、バイナリ ファイルには存在しないライブラリへの参照があります。--enable-libstuff
ビルドを設定するときに通常行われるように、私の構成フラグはすべて異なるライブラリ用であり、明示的なバージョン管理はありません。
オンラインでこの問題を抱えている人を見かけないので、ローカルの問題なのかもしれません。しかし、それらのバージョンをどこにもハードコードしていないので、何が原因なのかわかりません。
そこで私の質問は次のとおりです。Ubuntu 22.04 でのビルドに何が影響して、このような動作になるのでしょうか?
答え1
この問題に遭遇した方へ: この問題の原因は/usr/local/lib
、更新前の数か月前にビルドされた の共有ライブラリでした。新しいコンパイルではすべて正常にビルドされましたが、sudo make install
新しい共有ライブラリを展開するために を実行していませんでした。そのため、新しい実行ファイルは古い共有ライブラリを使用しようとしましたが、その古い共有ライブラリは実際には現在は存在しないライブラリを指していました。
事件は解決しました。
答え2
Ubuntu 23.04 にアップグレードした後、ffmpeg の問題が発生し、libvpx.so.6 の問題が発生しました。
apt-cache
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)
古いdebsを見つけるには、debianパッケージ検索に行きました。例えば
https://packages.debian.org/search?keywords=libvpx&searchon=names
ここでは、古いものがたくさん表示されます。
依存関係のほとんどが の一部であることがわかったのでbullseye
、bullseye/stable リンクをクリックし、次に amd64 (またはアーキテクチャ) をクリックします。
次にミラーをクリックします。http.us.debian.org/debian
ダウンロードしたら、次のコマンドでインストールします。
sudo dpkg -i ~/Downloads/libvpx6_1.8.2-1build1_amd64.deb
他にやらなければならなかったこと:
- libdav1d4
- libx264-160
- libx265-192
...最終的にffmpeg -codecs
何らかの出力を伴って実行されました。
(そうそう、FirefoxはYouTubeの動画だけでなく、すべての動画を再生できるようになる。いくつかのそのうちの。)