公式の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

事実:

  • \改行文字の前に、コマンドが次の行に続くことをシェルに伝えます。
  • foo=bar baz環境内の変数bazを使用して実行されます。foo
  • baz && qux成功 (終了ステータス ) が返されたqux場合にのみ実行されます。baz0

元のコマンドは次のようになります

… && \
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 \行全体を削除すると、必要な&&before はPATH=… make残ります。


補足:元のコード内のバックスラッシュの一部は、&& \行末にあるため冗長です。ただ&&&&代わりに次の行の先頭に配置することにした場合、\現在の行では省略できません。

関連情報