pyav 是如何呼叫 FFmpeg libraries 的?

ponponon發表於2023-03-03

如何檢視 pyav 依賴的動態連結庫

linux 下的方案

在 Python 中檢視 pyav 依賴的動態連結庫,可以使用 ldd 命令。ldd 命令可以列出一個可執行檔案或者共享庫依賴的共享庫列表。使用下面的命令可以檢視 pyav 依賴的動態連結庫:

ldd $(python -c "import av; print(av.__file__)")

這個命令會在終端中輸出 pyav 依賴的所有共享庫。如果系統中沒有安裝 ldd 命令,可以透過安裝 libc6-dev 包來安裝該命令。在 Ubuntu 和 Debian 系統中可以使用下面的命令來安裝:

sudo apt-get install libc6-dev

mac 下的方案

在 macOS 上,可以使用 otool 命令來檢視一個二進位制檔案的動態連結庫依賴關係。對於 Python 模組,可以先找到對應的 .so 檔案,然後使用 otool -L 命令來檢視依賴關係。

例如,假設我們要檢視 pyav 模組的依賴關係,可以按照以下步驟操作:

  1. 安裝 pyav 模組:
pip install av

找到 av 模組的 .so 檔案路徑:

$ python -c "import av; print(av.__file__)"
/path/to/site-packages/av/__init__.pyc

其中,/path/to/site-packages 是你的 Python 環境的第三方庫路徑。

使用 otool -L 命令檢視依賴關係:

$ otool -L /path/to/site-packages/av/.dylibs/av.so
/path/to/site-packages/av/.dylibs/av.so:
        /usr/local/opt/ffmpeg/lib/libavformat.58.dylib (compatibility version 58.0.0, current version 58.54.100)
        /usr/local/opt/ffmpeg/lib/libavcodec.58.dylib (compatibility version 58.0.0, current version 58.91.100)
        /usr/local/opt/ffmpeg/lib/libavutil.56.dylib (compatibility version 56.0.0, current version 56.70.100)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.100.5)

這裡可以看到 av.so 依賴於 libavformat.58.dyliblibavcodec.58.dyliblibavutil.56.dylib 以及系統庫 libSystem.B.dylib

實操

╰─➤  fd -u av   
.dylibs/libavcodec.59.37.100.dylib
.dylibs/libavdevice.59.7.100.dylib
.dylibs/libavfilter.8.44.100.dylib
.dylibs/libavformat.59.27.100.dylib
.dylibs/libavutil.57.28.100.dylib
.dylibs/libdav1d.5.dylib

可以看到,pyav 使用瞭如下的 ffmpeg 動態連結庫:

  • libavcodec
  • libavdevice
  • libavfilter
  • libavformat
  • libavutil
  • libdav1d

相關文章