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.mp4
1 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 videoposnetkaw
enaka polovici širine vhodnega videoposnetkaiw
(enako za višino).
Da uporabimo drug filter, lahko zamenjamo argument scale=w=iw/2:h=ih/2
z ustreznim nizom, nekaj primerov :
hflip
invflip
: 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.