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 baz
se ejecutabaz
confoo
variables en el entorno.baz && qux
se ejecutaqux
si y asíbaz
devuelve éxito (estado de salida0
).
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=… make
sobrevivirí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.