„Unbekannte Option „PATH=[...]““ beim Befolgen der offiziellen ffmpeg-Kompilierungsanleitung

„Unbekannte Option „PATH=[...]““ beim Befolgen der offiziellen ffmpeg-Kompilierungsanleitung

Ich wollte ffmpeg selbst kompilieren, um eine kleinere ausführbare Datei zu erhalten, die ich dann mit meinem Programm verteilen kann. Während ich den offiziellenffmpeg-Kompilierungshandbuch für UbuntuIch erhalte eine Fehlermeldung, wenn ich ffmpeg tatsächlich kompiliere, wie im Abschnitt beschriebenKompilierung & Installation -> FFmpeg. Der folgende lange zusammengesetzte Befehl wird gegeben.

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

Ich möchte nur den libvpx-Encoder einbinden und ffmpeg nicht installieren, sondern nur kompilieren. Damit bleibt mir dieser etwas kürzere Befehl.

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

Dieser zusammengesetzte Befehl besteht aus 6 einzelnen Befehlen. Bei der Ausführung des längsten, 5. Befehls

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

Ich erhalte diesen Fehler

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.

wobei „Joker“ mein Benutzername auf dieser virtuellen Maschine ist.

Ich verwende Ubuntu Groovy Gorilla x64 mit allen neuesten Updates.

Was mache ich falsch?

Antwort1

Fakten:

  • \bevor ein Zeilenumbruchzeichen der Shell mitteilt, dass der Befehl in der nächsten Zeile fortgesetzt wird.
  • foo=bar bazläuft bazmit fooVariablen in der Umgebung.
  • baz && quxläuft quxnur, wenn bazErfolg zurückgegeben wird (Beendigungsstatus 0).

Der ursprüngliche Befehl war wie folgt

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

Gleichwertig

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

Die Struktur war also wie

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

Du hast es in etwas verwandelt, das ist wie

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

und PATH=…ist jetzt eine Option für ./configure. Das ist falsch.

&&Mit anderen Worten: Sie hätten from before nicht entfernen dürfen PATH="$HOME/bin:$PATH" make. Ihr neues Snippet kann durch Hinzufügen &&an der richtigen Stelle ( --enable-libvpx && \) korrigiert werden.

Dies wäre weniger verwirrend, wenn der ursprüngliche Code die folgende Form hätte:

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

Wenn Sie nun die gesamte --enable-nonfree \Zeile entfernen würden, bliebe das erforderliche &&Davor PATH=… makeerhalten.


Randbemerkung: Einige Backslashes im Originalcode sind überflüssig, da && \am Ende der Zeilekann einfach sein&&Wenn Sie sich stattdessen für die Platzierung &&am Anfang der nächsten Zeile entscheiden, \kann in der aktuellen Zeile nicht weggelassen werden.

verwandte Informationen