遵循官方 ffmpeg 編譯指南時出現“未知選項“PATH=[...]””

遵循官方 ffmpeg 編譯指南時出現“未知選項“PATH=[...]””

我想自己編譯 ffmpeg,以獲得一個較小的可執行文件,然後我可以將其與我的程式一起分發。在關注官方的同時Ubuntu 下的 ffmpeg 編譯指南在實際編譯 ffmpeg 時發生錯誤,如第 1 節所述編譯安裝->FFmpeg。給出以下長複合命令。

cd ~/ffmpeg_sources && \
wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \
tar xjvf ffmpeg-snapshot.tar.bz2 && \
cd ffmpeg && \
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./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" \
  --ld="g++" \
  --bindir="$HOME/bin" \
  --enable-gpl \
  --enable-gnutls \
  --enable-libaom \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libsvtav1 \
  --enable-libdav1d \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-nonfree && \
PATH="$HOME/bin:$PATH" make && \
make install && \
hash -r

我只想包含 libvpx 編碼器而不安裝 ffmpeg,只編譯它。這給我留下了這個稍微短一點的命令。

cd ~/ffmpeg_sources && \
wget -O ffmpeg-snapshot.tar.bz2 https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2 && \
tar xjvf ffmpeg-snapshot.tar.bz2 && \
cd ffmpeg && \
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./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" \
  --ld="g++" \
  --bindir="$HOME/bin" \
  --enable-libvpx \
PATH="$HOME/bin:$PATH" make && \
hash -r

此複合命令由 6 個單獨的命令組成。當執行最長的第 5 個命令時

PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./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" \
  --ld="g++" \
  --bindir="$HOME/bin" \
  --enable-libvpx \
PATH="$HOME/bin:$PATH" make

我收到這個錯誤

Unknown option "PATH=/home/joker/bin:/home/joker/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin".
See ./configure --help for available options.

其中,joker 是我在此虛擬機器上的使用者名稱。

我正在使用 Ubuntu Groovy Gorilla x64 以及所有最新更新。

我究竟做錯了什麼?

答案1

事實:

  • \在換行符號告訴 shell 指令在下一行繼續之前。
  • foo=bar baz在環境中baz使用變數運行。foo
  • baz && qux運行quxiffbaz返回成功(退出狀態0)。

原來的命令就像

… && \
PATH=… PKG_CONFIG_PATH=… ./configure \
  … \
  --enable-nonfree && \
PATH=… make && \

等價地

… && PATH=… PKG_CONFIG_PATH=… ./configure … --enable-nonfree && PATH=… make && …

所以結構就像

… && ./configure … && PATH=… make && …

你把它變成了類似的東西

… && ./configure … PATH=… make && …

現在PATH=…是一個選項./configure。這是錯誤的。

換句話說,您不應該&&從 before 中刪除PATH="$HOME/bin:$PATH" make。您的新程式碼片段可以透過新增&&到正確的位置 ( )來修復--enable-libvpx && \

如果原始程式碼採用以下形式,則不會那麼混亂:

… \
&& PATH=… PKG_CONFIG_PATH=… ./configure \
  … \
  --enable-nonfree \
&& PATH=… make \
&& …

現在,如果您刪除整--enable-nonfree \行,那麼&&先前必要的內容PATH=… make將保留下來。


附註:原始程式碼中的一些反斜線是多餘的,因為&& \在行的最後可以只是&&。如果您決定放在&&下一行的開頭,則\不能省略目前行中的內容。

相關內容