«Неизвестная опция «PATH=[...]»» при следовании официальному руководству по компиляции ffmpeg

«Неизвестная опция «PATH=[...]»» при следовании официальному руководству по компиляции ffmpeg

Я хотел скомпилировать ffmpeg сам, чтобы получить исполняемый файл меньшего размера, который я затем смогу распространять вместе со своей программой. Следуя официальномуРуководство по компиляции ffmpeg для UbuntuЯ получаю сообщение об ошибке, когда дело доходит до компиляции 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, если 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сохранится.


Примечание: некоторые обратные косые черты в исходном коде излишни, поскольку находятся && \в самом конце строкиможет быть просто&&. Если вы решили разместить &&в начале следующей строки, то \в текущей строке его нельзя будет пропустить.

Связанный контент