按照官方 ffmpeg 编译指南操作时出现“未知选项“PATH=[...]””

按照官方 ffmpeg 编译指南操作时出现“未知选项“PATH=[...]””

我想自己编译 ffmpeg,以便获得一个较小的可执行文件,然后可以随我的程序一起分发。在遵循官方Ubuntu 版 ffmpeg 编译指南当我按照第节所述实际编译 ffmpeg 时,我收到一个错误编译安装 -> 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 && quxqux当且仅当baz返回成功(退出状态)时才运行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。这是错误的。

换句话说,你不应该&&从之前删除。 你的新代码片段可以通过在正确的位置PATH="$HOME/bin:$PATH" make添加来修复( )。&&--enable-libvpx && \

如果原始代码采用以下形式,则不会那么令人困惑:

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

现在,如果你删除了整--enable-nonfree \行,那么必要的&&之前的内容PATH=… make将会保留下来。


附注:原始代码中的一些反斜杠是多余的,因为&& \在行的最后可以只是&&。如果您决定将其放置&&在下一行的开头,则\当前行中的 不能省略。

相关内容