Skoči na vsebino

Osnovna obdelava videoposnetkov

Za delo z videoposnetki bomo uporabili odprtokodni programski paket FFmpeg, ki podpira večino vrst zapisov (angl. formats) videoposnetkov in zvoka. Poleg tega vsebuje širok nabor filtrov za obdelavo videoposnetkov. Programski paket FFmpeg je na voljo za večino distribucij Linuxa, za macOS in za Windows.

Na gruči bomo programski paket FFmpeg zaganjali preko ukazne vrstice. Za lažjo nastvitev stikal si lahko pomagamo s spletnim vmesnikom, kot je na primer FFmpeg Commander, ali s programom - na Linux in Windows na primer z WinFF.

Pretvorba zapisa

Najprej naložimo ustrezni modul, ki nam bo omogočil uporabo programa ffmpeg na gruči.

$ module load FFmpeg
module load FFmpeg

Preverimo, če modul deluje pravilno:

ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
    built with gcc 12.3.0 (GCC)
    configuration: --prefix=/cvmfs/sling.si/modules/el7/software/FFmpeg/6.0-GCCcore-12.3.0 --enable-pic --enable-shared --enable-gpl --enable-version3 --enable-nonfree --cc=gcc --cxx=g++ --enable-libx264 --enable-libx265 --enable-libmp3lame --enable-libfreetype --enable-fontconfig --enable-libfribidi --enable-sdl2
    libavutil      58.  2.100 / 58.  2.100
    libavcodec     60.  3.100 / 60.  3.100
    libavformat    60.  3.100 / 60.  3.100
...
ffmpeg -version

Poskusimo sedaj uporabiti program ffmpeg za obdelavo videoposnetka. Najprej iz povezave prenesimo videoposnetek llama.mp41 in ga shranimo na gručo.

Najenostavnejši ukaz ffmpeg pretvori posnetek iz ene oblike v drugo (brez dodatnih stikal bo program ffmpeg sam izbral primerne nastavitve kodiranja glede na končnice podanih datotek). Poskrbeti moramo, da se pretvorba izvrši na enem od računskih vozlišč zato uporabimo srun.

$ srun --ntasks=1 ffmpeg -y -i llama.mp4 llama.avi
srun --ntasks=1 ffmpeg -y -i llama.mp4 llama.avi

S stikalom -y zahtevamo, da ffmpeg prepiše obstoječe datoteke brez vprašanj. S stikalom -i podamo vhodno datoteko llama.mp4, kot zadnji argument pa napišemo ime izhodne datoteke llama.avi, ki naj jo izdela program ffmpeg.

Zmanjšanje ločljivosti

Zaradi obilice možnosti lahko kombinacije stikal za ffmpeg postanejo precej kompleksne. Na spletu najdemo mnogo primerov, ki jih lahko uporabimo za izhodišče pri pisanju svojih ukazov.

Če recimo želimo zmanjšati ločljivost posnetka, lahko uporabimo filter scale. Da ločljivost z izvornih 960 × 540 zmanjšamo na 640 × 360 slikovnih točk, napišemo:

$ srun --ntasks=1 ffmpeg \
-y -i llama.mp4 -codec:a copy -filter:v scale=640:360 llama-small.mp4
srun --ntasks=1 ffmpeg -y -i llama.mp4 -codec:a copy -filter:v scale=640:360 llama-small.mp4

Ta ukaz iz vhodnega videoposnetka llama.mp4 ustvari novo videoposnetek llama-small.mp4, v katerem sta širina in višina videa enaka 640 × 360 slikovnih točk. Znak \ na koncu prve vrstice pove, da se ukaz nadaljuje še v naslednji vrstici. Novi argumenti v ukazu so:

  • -codec:a copy: zvočni (avdio) zapis naj se nespremenjen skopira v izhodno datoteko in
  • -filter:v scale=640:360: uporabi (video) filter scale, pri čemer naj bo širina izhodnega posnetka enaka 640, višina pa 360.

Da uporabimo drug filter, lahko zamenjamo argument scale=640:360 z ustreznim nizom, nekaj primerov :

  • hflip in vflip: zrcalita sliko vodoravno oziroma navpično,
  • edgedetect: zazna robove v sliki,
  • crop=480:270:240:135: izreže sliko velikosti 480 × 270, začne na mestu (240, 135),
  • drawtext=text=%{pts}:x=w/2-tw/2:y=h-2*lh:fontcolor=green: zapiše v sliko časovni žig (pts).

Filtre lahko kombiniramo preprosto tako, da jih ločimo z vejico, na primer scale=640:360,edgedetect.

Vaja

Na povezavi najdete naloge za utrditev znanja o uporabi programa ffmpeg za obdelavo videa.


  1. Videoposnetek je nastal v okviru projekta Blender