"Opción desconocida "PATH=[...]"" al seguir la guía oficial de compilación de ffmpeg

"Opción desconocida "PATH=[...]"" al seguir la guía oficial de compilación de ffmpeg

Quería compilar ffmpeg yo mismo para obtener un ejecutable más pequeño que luego pueda distribuir con mi programa. Siguiendo el oficialguía de compilación de ffmpeg para UbuntuRecibo un error cuando se trata de compilar ffmpeg como se describe en la secciónCompilación e instalación -> FFmpeg. Se proporciona el siguiente comando compuesto largo.

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

Solo quiero incluir el codificador libvpx y no instalar ffmpeg, solo compilarlo. Eso me deja con este comando un poco más corto.

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

Este comando compuesto consta de 6 comandos individuales. Al ejecutar el quinto comando más largo

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

me sale este error

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.

donde joker es mi nombre de usuario en esta máquina virtual.

Estoy usando Ubuntu Groovy Gorilla x64 con las últimas actualizaciones.

¿Qué estoy haciendo mal?

Respuesta1

Hechos:

  • \antes de un carácter de nueva línea le dice al shell que el comando continúa en la siguiente línea.
  • foo=bar bazse ejecuta bazcon foovariables en el entorno.
  • baz && quxse ejecuta quxsi y así bazdevuelve éxito (estado de salida 0).

El comando original era como

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

equivalentemente

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

Entonces la estructura era como

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

Lo convertiste en algo que es como

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

y PATH=…ahora es una opción para ./configure. Esto está mal.

En otras palabras, no deberías haberlo eliminado &&antes PATH="$HOME/bin:$PATH" make. Su nuevo fragmento se puede corregir agregando &&en el lugar correcto ( --enable-libvpx && \).

Esto sería menos confuso si el código original tuviera la siguiente forma:

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

Ahora bien, si eliminas toda la --enable-nonfree \línea, entonces lo necesario &&antes PATH=… makesobreviviría.


Nota al margen: algunas barras invertidas en el código original son redundantes porque && \al final de la líneapuede ser solo&&. Si decide colocarlo &&al principio de la siguiente línea, entonces \en la línea actual no se puede omitir.

información relacionada