Ffmpeg

Allikas: Tipikate Rattamatkaklubi teabebaas
Jump to navigation Jump to search

Sissejuhatus

Tegemist on vabavaralise ja avatud lähtekoodiga tarkvaraga, mida väga aktiivselt edasi arendatakse. FFMPEG on käsurea tööriist, mis võimaldab videofailidega kõikvõimalikke trikke teha. Meid huvitab ta suuresti seetõttu, et kui videokaardistamise tarbeks on vaja videosid ühel või teisel viisil töödelda, siis soovime selle protseduuri ära automatiseerida (ehk teha skripti).

Paigaldamine

Üldiselt on võimalik teda Ubuntu peale paigaldada lihtsalt nii:

sudo apt-get install ffmpeg

Samas on arendaja kodulehel rõhutatud, et võimalusel tuleks kindlasti laadida alla uusim versioon GIT'ist ning see ise kokku kompileerida. Reaalselt on ette tulnud ka olukordi, kus standardpakk Ubuntu peale on liiga vana. Ubuntu peale kompileerimise juhend on üleval siin.

Olgu siinkohal ära toodud kokkuvõte, mis käsud Ubuntu all täpselt anda tuleb:

sudo apt-get update -qq && sudo apt-get -y install \
  autoconf \
  automake \
  build-essential \
  cmake \
  git \
  libass-dev \
  libfreetype6-dev \
  libsdl2-dev \
  libtool \
  libva-dev \
  libvdpau-dev \
  libvorbis-dev \
  libxcb1-dev \
  libxcb-shm0-dev \
  libxcb-xfixes0-dev \
  pkg-config \
  texinfo \
  wget \
  zlib1g-dev < "/dev/null"
mkdir -p ~/ffmpeg_sources ~/bin
cd ~/ffmpeg_sources && \
wget https://www.nasm.us/pub/nasm/releasebuilds/2.13.03/nasm-2.13.03.tar.bz2 && \
tar xjvf nasm-2.13.03.tar.bz2 && \
cd nasm-2.13.03 && \
./autogen.sh && \
PATH="$HOME/bin:$PATH" ./configure --prefix="$HOME/ffmpeg_build" --bindir="$HOME/bin" && \
make && \
make install
sudo apt-get -y install yasm libx264-dev libx265-dev libnuma-dev libvpx-dev libfdk-aac-dev libmp3lame-dev libopus-dev < "/dev/null"
cd ~/ffmpeg_sources && \
git -C aom pull 2> /dev/null || git clone --depth 1 https://aomedia.googlesource.com/aom && \
mkdir aom_build && \
cd aom_build && \
PATH="$HOME/bin:$PATH" cmake -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$HOME/ffmpeg_build" -DENABLE_SHARED=off -DENABLE_NASM=on ../aom && \
PATH="$HOME/bin:$PATH" 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-libaom \
  --enable-libass \
  --enable-libfdk-aac \
  --enable-libfreetype \
  --enable-libmp3lame \
  --enable-libopus \
  --enable-libvorbis \
  --enable-libvpx \
  --enable-libx264 \
  --enable-libx265 \
  --enable-nonfree && \
PATH="$HOME/bin:$PATH" make && \
make install && \
hash -r
source ~/.profile

Kui kõik läks edukalt, siis võib ajutised kataloogid ära kustutada:

rm -rf ~/ffmpeg_build
rm -rf ~/ffmpeg_sources

Mingi hetk tekkis mõte, et äkki on võimalik rajalogidest rohkem infot välja lugeda, kui lisada ffmpgeg-ile miski subtiitrite moodul. Ei ole tuvastatud, et see midagi konkreetsel juhul kaasa oleks aidanud, aga igaks juhuks teadmine, kuidas seda lisada: enne buildimist tuleb öelda "sudo apt-get install libzvb1-dev" ning buildimisel lisada valik --enable-libzvbi.

Tähelepanekud

  • Vaikimisi (ehk lihtsalt ffmpeg -i sisend.MP4 valjund.MP4) kodeeritakse nii video kui audio striim ringi vastavalt ffmpeg vaikimisi seadistustele. Kui on soov videostriim otse ümber kopeerida, siis selleks on vajalik võti "-c:v copy" ja audio jaoks "-c:a copy".
  • Kui on soov audio üldse eemaldada, siis selleks on võti "-an".
  • Kui on soov videot 180 kraadi pöörata, siis selleks tarbeks sobib "ffmpeg -i in.MP4 -vf "transpose=2,transpose=2" out.MP4". Kui on soov, et audiot ringi ei kodeeritaks, võib lisada "-c:a copy". NB! Eeldus on, et EXIF info rotation väljal on 0. Kui see nii ei ole, siis tuleks see väli samuti peale pööramist ära nullida. Selleks tarbeks tuleks lisada "-metadata:s:v rotate=0".