Skoči na vsebino

Osnovna obdelava videoposnetkov

Za delo z videoposnetki bomo uporabili prost 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
ffmpeg version 4.2.2 Copyright (c) 2000-2019 the FFmpeg developers
  built with gcc 9.3.0 (GCC)
  configuration: --prefix=/ceph/grid/software/modules/software/FFmpeg/4.2.2-GCCcore-9.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
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.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 napišemo izhodno datoteko 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 v obeh smereh zmanjšamo za polovico, napišemo:

$ srun --ntasks=1 ffmpeg \
-y -i llama.mp4 -codec:a copy -filter:v scale=w=iw/2:h=ih/2 llama-small.mp4
srun --ntasks=1 ffmpeg -y -i llama.mp4 -codec:a copy -filter:v scale=w=iw/2:h=ih/2 llama-small.mp4

Ta ukaz iz vhodnega videoposnetka llama.mp4 ustvari novo videoposnetek llama-small.mp4, v katerem sta višina in širina videa dvakrat manjši. 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=w=iw/2:h=ih/2: uporabi (video) filter scale, pri čemer naj bo širina izhodnega videoposnetka w enaka polovici širine vhodnega videoposnetka iw (enako za višino).

Da uporabimo drug filter, lahko zamenjamo argument scale=w=iw/2:h=ih/2 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=w=iw/2:h=ih/2,edgedetect.

Vaja

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


  1. Videoposnetek je nastal v okviru projekta Blender