나는 내 프로그램과 함께 배포할 수 있는 더 작은 실행 파일을 얻기 위해 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
iff가 성공을 반환하면 실행됩니다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
참고 사항: 원본 코드의 일부 백슬래시는 && \
줄 끝 부분에 있기 때문에 중복됩니다.그냥 될 수있다&&
. &&
대신 다음 줄의 시작 부분에 배치하기로 결정한 경우 \
현재 줄에서는 생략할 수 없습니다.