공식 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 && quxquxiff가 성공을 반환하면 실행됩니다 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. 이것은 잘못된 것입니다.

즉, &&before before 를 제거하면 안 됩니다 PATH="$HOME/bin:$PATH" make. &&올바른 위치( )에 추가하면 새 스니펫을 수정할 수 있습니다 --enable-libvpx && \.

원래 코드가 다음 형식이라면 혼란이 덜할 것입니다.

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

이제 전체 줄을 제거하면 이전에 --enable-nonfree \필요한 부분이 살아남을 것입니다.&&PATH=… make


참고 사항: 원본 코드의 일부 백슬래시는 && \줄 끝 부분에 있기 때문에 중복됩니다.그냥 될 수있다&&. &&대신 다음 줄의 시작 부분에 배치하기로 결정한 경우 \현재 줄에서는 생략할 수 없습니다.

관련 정보