美文网首页软件开发FFMpeg
shell脚本执行错误 $‘\r‘:command not fo

shell脚本执行错误 $‘\r‘:command not fo

作者: 雪域迷影 | 来源:发表于2020-10-23 00:06 被阅读0次

    今天在Windows下编辑了一段CentOS7下编译安装ffmpeg源代码以及相关依赖软件包的编译sh脚本,直接拷贝到CentOS7下报错了:出现$’\r’:command not found的错误。

    在linux上执行脚本时出现$’\r’:command not found,然而仔细检查脚本,对应行位置只是一个空行,并没有问题,那么linux为什么会将一个回车的空行报错?

    原因是这样的:脚本是在window下编辑完成后上传到linux上执行的,win下的换行是回车符+换行符,也就是\r\n,而unix下是换行符\n。linux下不识别\r为回车符,所以导致每行的配置都多了个\r,因此是脚本编码的问题。

    在linux上执行 dos2unix 脚本名,再次执行脚本,报错消失。如果没有安装dos2unix这个命令,在CentOS中执行yum install dos2unix安装,如果是Ubuntu执行apt-get install dos2unix即可。

    下面附上在CentOS7下编译安装ffmpeg以及相关依赖库的源代码的Shell脚本,参考了Compile FFmpeg on CentOS这篇文章,其中有些依赖库的下载地址已经失效,我换成了从http://www.linuxfromscratch.org/上面下载源代码。

    # install required software package
    #yum install autoconf automake bzip2 bzip2-devel cmake freetype-devel gcc gcc-c++ git libtool make mercurial pkgconfig zlib-devel
    
    mkdir ~/ffmpeg_sources
    
    INSTALL_PATH=/usr/local
    
    # build and install nasm
    # An assembler used by some libraries. Highly recommended or your resulting build may be very slow.
    cd ~/ffmpeg_sources
    curl -O -L https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.bz2
    tar xjvf nasm-2.14.02.tar.bz2
    cd nasm-2.14.02
    ./autogen.sh
    ./configure --prefix="$INSTALL_PATH" --bindir="$INSTALL_PATH/bin"
    make
    make install
    
    # build and install Yasm
    # An assembler used by some libraries. Highly recommended or your resulting build may be very slow.
    cd ~/ffmpeg_sources
    curl -O -L https://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
    tar xzvf yasm-1.3.0.tar.gz
    cd yasm-1.3.0
    ./configure --prefix="$INSTALL_PATH" --bindir="$INSTALL_PATH/bin"
    make
    make install
    
    
    # build and install libx264
    # H.264 video encoder. See the H.264 Encoding Guide for more information and usage examples.
    # Requires ffmpeg to be configured with --enable-gpl --enable-libx264.
    cd ~/ffmpeg_sources
    git clone --depth 1 https://code.videolan.org/videolan/x264.git
    curl -O -L http://anduin.linuxfromscratch.org/BLFS/x264/x264-20200819.tar.xz
    xz -d x264-20200819.tar.xz
    tar -xvf x264-20200819.tar
    mv x264-20200819 x264
    cd x264
    PKG_CONFIG_PATH="$INSTALL_PATH/lib/pkgconfig" ./configure --prefix="$INSTALL_PATH" --bindir="$INSTALL_PATH/bin" --enable-static
    make
    make install
    
    # build and install libx265
    # H.265/HEVC video encoder. See the H.265 Encoding Guide for more information and usage examples.
    # Requires ffmpeg to be configured with --enable-gpl --enable-libx265.
    cd ~/ffmpeg_sources
    # hg clone https://bitbucket.org/multicoreware/x265
    curl -O -L http://anduin.linuxfromscratch.org/BLFS/x265/x265_3.4.tar.gz
    tar -xzvf x265_3.4.tar.gz
    mv x265_3.4 x265
    cd ~/ffmpeg_sources/x265/build/linux
    cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$INSTALL_PATH" -DENABLE_SHARED:bool=off ../../source
    make
    make install
    
    
    # build and install libfdk_aac
    # AAC audio encoder. See the AAC Audio Encoding Guide for more information and usage examples.
    # Requires ffmpeg to be configured with --enable-libfdk_aac (and --enable-nonfree if you also included --enable-gpl).
    cd ~/ffmpeg_sources
    git clone --depth 1 https://github.com/mstorsjo/fdk-aac
    cd fdk-aac
    autoreconf -fiv
    ./configure --prefix="$INSTALL_PATH" --disable-shared
    make
    make install
    
    # build and install libmp3lame
    # MP3 audio encoder.
    # Requires ffmpeg to be configured with --enable-libmp3lame.
    cd ~/ffmpeg_sources
    curl -O -L https://downloads.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz
    tar xzvf lame-3.100.tar.gz
    cd lame-3.100
    ./configure --prefix="$INSTALL_PATH" --bindir="$INSTALL_PATH/bin" --disable-shared --enable-nasm
    make
    make install
    
    # build and install libopus
    # Opus audio decoder and encoder.
    # Requires ffmpeg to be configured with --enable-libopus.
    cd ~/ffmpeg_sources
    curl -O -L https://archive.mozilla.org/pub/opus/opus-1.3.1.tar.gz
    tar xzvf opus-1.3.1.tar.gz
    cd opus-1.3.1
    ./configure --prefix="$INSTALL_PATH" --disable-shared
    make
    make install
    
    # libvpx
    # VP8/VP9 video encoder and decoder. See the VP9 Video Encoding Guide for more information and usage examples.
    # Requires ffmpeg to be configured with --enable-libvpx.
    cd ~/ffmpeg_sources
    # git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git
    curl -O -L https://github.com/webmproject/libvpx/archive/v1.9.0/libvpx-1.9.0.tar.gz
    tar xzvf libvpx-1.9.0.tar.gz
    cd libvpx-1.9.0
    ./configure --prefix="$INSTALL_PATH" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm
    make
    make install
    
    # build and install FFmpeg
    cd ~/ffmpeg_sources
    curl -O -L https://ffmpeg.org/releases/ffmpeg-snapshot.tar.bz2
    tar xjvf ffmpeg-snapshot.tar.bz2
    cd ffmpeg
    PATH="$INSTALL_PATH/bin:$PATH" PKG_CONFIG_PATH="$INSTALL_PATH/lib/pkgconfig" ./configure \
      --prefix="$INSTALL_PATH" \
      --pkg-config-flags="--static" \
      --extra-cflags="-I$INSTALL_PATH/include" \
      --extra-ldflags="-L$INSTALL_PATH/lib" \
      --extra-libs=-lpthread \
      --extra-libs=-lm \
      --bindir="$INSTALL_PATH/bin" \
      --enable-gpl \
      --enable-libfdk_aac \
      --enable-libfreetype \
      --enable-libmp3lame \
      --enable-libopus \
      --enable-libvpx \
      --enable-libx264 \
      --enable-libx265 \
      --enable-nonfree
    make
    make install
    hash -d ffmpeg
    

    注意:编译安装ffmpeg源代码要以root或者超级用户权限执行,并chmod +x build_ffmpeg_all.sh为脚本添加可执行权限运行:
    sh build_ffmpeg_all.sh

    相关文章

      网友评论

        本文标题:shell脚本执行错误 $‘\r‘:command not fo

        本文链接:https://www.haomeiwen.com/subject/uopapktx.html