Skip to content

Instantly share code, notes, and snippets.

@hoangdh
Last active March 6, 2020 02:13
Show Gist options
  • Save hoangdh/83e0a81d886289fdf305b72aa15d8810 to your computer and use it in GitHub Desktop.
Save hoangdh/83e0a81d886289fdf305b72aa15d8810 to your computer and use it in GitHub Desktop.
Compile FFMPEG from source code
#!/bin/bash
apt-get update -qq && apt-get -y install autoconf automake build-essential cmake git libass-dev libfreetype6-dev libsdl2-dev libtheora-dev libtool libva-dev libvdpau-dev libvorbis-dev libxcb1-dev libxcb-shm0-dev libxcb-xfixes0-dev mercurial pkg-config texinfo wget zlib1g-dev
mkdir -p ~/ffmpeg_sources ~/bin ~/ffmpeg_build
cd ~/ffmpeg_sources && \
wget http://www.nasm.us/pub/nasm/releasebuilds/2.13.02/nasm-2.13.02.tar.bz2 && \
tar xjvf nasm-2.13.02.tar.bz2 && \
cd nasm-2.13.02 && \
./autogen.sh && \
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
make && \
make install
cd ~/ffmpeg_sources && \
wget -O yasm-1.3.0.tar.gz 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="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
make && \
make install
cd ~/ffmpeg_sources && \
git -C x264 pull 2> /dev/null || git clone --depth 1 https://git.videolan.org/git/x264 && \
cd x264 && \
PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --enable-static && \
PATH="$HOME/bin:$PATH" make && \
make install
cd ~/ffmpeg_sources && \
if cd x265 2> /dev/null; then hg pull && hg update; else hg clone https://bitbucket.org/multicoreware/x265; fi && \
cd x265/build/linux && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED:bool=off ../../source && \
PATH="$HOME/bin:$PATH" make && \
make install
cd ~/ffmpeg_sources && \
git -C libvpx pull 2> /dev/null || git clone --depth 1 https://chromium.googlesource.com/webm/libvpx.git && \
cd libvpx && \
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --disable-examples --disable-unit-tests --enable-vp9-highbitdepth --as=yasm && \
PATH="$HOME/bin:$PATH" make && \
make install
cd ~/ffmpeg_sources && \
git -C fdk-aac pull 2> /dev/null || git clone --depth 1 https://github.com/mstorsjo/fdk-aac && \
cd fdk-aac && \
autoreconf -fiv && \
./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
make && \
make install
cd ~/ffmpeg_sources && \
wget -O lame-3.100.tar.gz 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 && \
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" --disable-shared --enable-nasm && \
PATH="$HOME/bin:$PATH" make && \
make install
cd ~/ffmpeg_sources && \
git -C opus pull 2> /dev/null || git clone --depth 1 https://github.com/xiph/opus.git && \
cd opus && \
./autogen.sh && \
./configure --prefix="$HOME/ffmpeg_build" --disable-shared && \
make && \
make install
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" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-nonfree && \
PATH="$HOME/bin:$PATH" make && \
make install && \
echo "PATH=$HOME/bin:$PATH" >> /etc/environment
source /etc/environment && export PATH
hash -r
@phung025
Copy link

phung025 commented Mar 5, 2020

  • Cài đặt NVIDIA-SDK (Cài đặt trước khi compile ffmpeg)
       cd ~/ffmpeg_sources && \ 
       git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git && \
       cd nv-codec-headers && \
       make install
    
  • Trong file setup ffmpeg thêm vào biến CUDA_DIR="/usr/local/cuda" dẫn tới thư mục install CUDA,
  • Dòng 77 --extra-cflags="-I$HOME/ffmpeg_build/include" \ đổi thành --extra-cflags="-I$HOME/ffmpeg_build/include -I$CUDA_DIR/include/" \
  • Dòng 78 --extra-ldflags="-L$HOME/ffmpeg_build/lib" \ đổi thành --extra-ldflags="-L$HOME/ffmpeg_build/lib -L$CUDA_DIR/lib64/"
  • Thêm vào các option sau trong configure ffmpeg:
    --enable-cuda \
    --enable-cuda-nvcc \
    --enable-cuvid \
    --enable-libnpp \
    --enable-nvenc \

@hoangdh
Copy link
Author

hoangdh commented Mar 6, 2020

* Cài đặt NVIDIA-SDK (Cài đặt trước khi compile ffmpeg)
  ```
     cd ~/ffmpeg_sources && \ 
     git clone https://git.videolan.org/git/ffmpeg/nv-codec-headers.git && \
     cd nv-codec-headers && \
     make install
  ```

* Trong file setup ffmpeg thêm vào biến `CUDA_DIR="/usr/local/cuda"` dẫn tới thư mục install CUDA,

* Dòng 77 `--extra-cflags="-I$HOME/ffmpeg_build/include" \` đổi thành `--extra-cflags="-I$HOME/ffmpeg_build/include -I$CUDA_DIR/include/" \`

* Dòng 78 `--extra-ldflags="-L$HOME/ffmpeg_build/lib" \` đổi thành `--extra-ldflags="-L$HOME/ffmpeg_build/lib -L$CUDA_DIR/lib64/"`

* Thêm vào các option sau trong configure ffmpeg:
  `--enable-cuda \`
  `--enable-cuda-nvcc \`
  `--enable-cuvid \`
  `--enable-libnpp \`
  `--enable-nvenc \ `

Cảm ơn Nam chia sẻ!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment