Pikimov je velmi užitečný nástroj pro grafické návrháře, který se velmi nápadně podobá svými funkcemi Adobe After Effects. Má však několik omezení. Mezi ty největší patří zejména počet FPS, se kterými lze pracovat, chybějící podpora zvuku, a nelze exportovat video s podporou průhledného pozadí. Tato omezení mohou být frustrující.
Nezbývá než čekat, než tyto funkce autor nástroje doplní. Jenže to může trvat roky, a vám se nejspíš čekat nechce. Pojďme na to od lesa, ukážu vám, jak jsem přišel na to, jak to udělat. Návod píšu zejména pro sebe, abych se měl kam vrátit, pokud bych zapomněl postup, a potřeboval si připomenout příkazy a metodiku postupu.
Jako první krok je vytvoření samotného designu. Pikimov je poměrně dobrou alternativou k After Effects, navíc je zdarma, a funguje ve webovém prohlížeči, takže je multiplatformní. I Linuxoví nadšenci si tak přijdou na své. Jenže export do WebM formátu neexistuje, tedy alespoň ne přímou cestou. Jediný video formát, který Pikimov na export podporuje, je MP4, tento video formát nepodporuje průhledné pozadí. Ale druhá možnost je naštěstí export do sekvence PNG obrázků, jako jednotlivých snímků. To nám navíc dává určitou flexibilitu v FPS.
Pikimov nelze nastavit na více než 30 fps. Ale to nám nevadí. Pokud potřebujeme 60 fps, prostě to uděláme v poloviční rychlosti, sekvenci snímků pak jen zrychlíme na požadovaných 60 fps. Při exportu do sekvence snímků nezapomeňte zatrhnout použití průhledného pozadí! Jinak bude pozadí exportovaných obrázků v barvě pozadí projektu (ve výchozím nastavení je to černá).
Export se zeptá na adresář, kam se mají obrázky zapsat.
Vyberte dle svého gusta. Eportované obrázky mají formát
názvu souboru frame_<číslo>.png
, kde <číslo>
je číslo
o nejméně 4 místech uvozených nulou, začínající od nuly.
Pokud by počet snímků přesáhl čtyřmístné číslo, počet cifer
bude vyšší podle čísla posledního snímku.
Pro slepení sekvence snímků potřebujeme použít jiný nástroj.
Existují video editory, které proces zjednodušují, ne všechny
to však podporují. Já používám pro editaci a střih videí
Filmoru. Je to placený program, já si kdysi kupoval doživotní
licenci, kterou mohu používat dodnes. Filmora zrovna z nějakého
důvodu nepodporuje import sekvence snímků, a tak jsem musel
přistoupit k mezikroku. Použil jsem nástroj příkazového řádku
ffmpeg
, který umožňuje základní mixování různých mediálních
formátů. Pokud tento nástroj nemáte nainstalovaný, nainstalujte
si jej, budete ho potřebovat pro tento postup.
Otevřete terminál, a navigujte do adresáře s uloženou sekvencí snímků. Případně do adresáře nadřazeného, pokud nechcete výsledný soubor ukládat mezi tyto snímky. Pro slepení použijte následující příkaz:
$ ffmpeg -r <fps> -f image2 -i <názvy snímků>.png -c:v libvpx-vp9 -pix_fmt yuva420p <výstupní soubor>.webm
Je tu pár argumentů, které je třeba vysvětlit:
<fps>
: Počet snímů za sekundu, které má video mít. Například já používám 60 fps.<názvy snímků>
: Toto je vlastně formát předlohy názvu souboru jednoho snímku, podle kteréhoffmpeg
pozná všechny ostatní soubory. Používá se formátovací řetězec známý z programovacího jazyka C. Číselná sekvence se zadává pomocí%#d
, kde#
znamená počet číslic. Jelikož číselná sekvence je vždy uvozena nulami pro zachování pořadí sekvence, toto číslo bude vždy uvozeno nulou. Pokud mají všechny snímky čtyřciferné číslo sekvence, potom tento formát bude%04d
.<výstupní soubor>
: Toto je název výstupního souboru. Do tohoto souboru se budou zapisovat data po konverzi.- Ostatní parametry určují výstupní formát kodeku.
-c:v libvpx-vp9
určuje VP9 video formát na výstupu,-pix_fmt yuva420p
určuje formát barevného prostoru, který je ve formátu YUVA420 progresivní (YUV s alfa kanálem = průhlednost), a-f image2
určuje, že se jedná o konverzi sekvence snímků. Teoreticky tento parametr uvozen být nemusí,ffmpeg
je schopno si tuto konverzi domyslet, ale pro jistotu ho zde uvádím. Mě to fungovalo.
Takže při 60 fps, a čtyřmístné číselné sekvenci snímků s uvozeným názvem frame_
bude tento příkaz vypadat následovně:
$ ffmpeg -r 60 -f image2 -i frame_%04d.png -c:v libvpx-vp9 -pix_fmt yuva420p output_silent.webm
Výsledný soubor bude ve VP9 formátu s barevným prostorem YUVA420 a průhledným pozadím
s názvem output_silent.webm
. Tento subor nemá žádný zvuk.
Nejjednodušší způsob je použít video editor, který podporuje přidání zvuku. Filmora, kterou používám, nabízí ke stažení zvukové efekty, některé z nich jsou zdarma. Podle gusta přidáme zvukové efekty, které chceme, aby byly vloženy k naší pohyblivé grafice, a exportujeme opět do WebM formátu s podporou průhlednosti (pokud to editor podporuje, pokud ne, čtěte dále). V mém případě Filmora podporuje export do WebM formátu s průhledností, ale limituje fps na 30. Některé video editory podporují jen export do MP4 nebo jiných konvenčních formátů, které se hodí na finální zpracování. V našem případě ale chceme pohyblivou grafiku, která je určena k dalšímu zpracování. Video exportujeme v nejlepším možném formátu.
Pokud je výsledné video v souladu s tím, co chceme, tak toto je konec cesty. Ale
pokud nabídka exportu není dostačující, tak to lze obejít. Z exportovaného videa
totiž můžeme použít zvuk a připojit ho k původnímu slepenému exportu. Toto audio
však potřebujeme nejdříve extrahovat. To opět provedeme nástrojem ffmpeg
.
Nejprve si zjistíme něco o kodecích v exportovaném souboru se zvukovými efekty. K tomu perfektně poslouží následující jednoduchý příkaz:
$ ffmpeg -i <název souboru>.webm
Tento příkaz je technicky chybné použití programu, a také nám to i napíše do
konzole. Ale i tak nám dá i daném souboru informace, které potřebujeme.
<název souboru>
je samozřejmě samotný název souboru, a za .webm
si lze
domyslet jakýkoliv výstupní video formát z exportu. Například výstupní video
je output_sounds.webm
, tak příkaz a jeho výstup je následující:
$ ffmpeg -i output_sounds.webm
ffmpeg version 4.4.2-0ubuntu0.22.04.1 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 11 (Ubuntu 11.2.0-19ubuntu1)
configuration: --prefix=/usr --extra-version=0ubuntu0.22.04.1 --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --arch=amd64 --enable-gpl --disable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzimg --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-pocketsphinx --enable-librsvg --enable-libmfx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-shared
libavutil 56. 70.100 / 56. 70.100
libavcodec 58.134.100 / 58.134.100
libavformat 58. 76.100 / 58. 76.100
libavdevice 58. 13.100 / 58. 13.100
libavfilter 7.110.100 / 7.110.100
libswscale 5. 9.100 / 5. 9.100
libswresample 3. 9.100 / 3. 9.100
libpostproc 55. 9.100 / 55. 9.100
Input #0, matroska,webm, from 'output_sounds.webm':
Metadata:
encoder : WS Matroska Muxer
creation_time : 2025-02-19T19:02:07.000000Z
Duration: 00:00:10.00, start: 0.000000, bitrate: 907 kb/s
Stream #0:0: Video: vp8, yuv420p(progressive), 1080x1920, SAR 1:1 DAR 9:16, 30 fps, 30 tbr, 1k tbn, 1k tbc (default)
Metadata:
alpha_mode : 1
Stream #0:1: Audio: vorbis, 44100 Hz, stereo, fltp (default)
At least one output file must be specified
Zde je vidět, že v mém případě je zvuk ve formátu vorbis. Výstupní formát však může být jakýkoliv. Pro WebM formát je nejlepší vorbis formát, případně opus.
Extrakce se provede následujícím příkazem:
$ ffmpeg -i <název souboru>.webm -q:a 0 [-acodec copy] -map a <název souboru>.ogg
<název souboru>
: Toto je název souboru, ze kterého extrahujeme audio a do kterého ho ukládáme..webm
je přípona video souboru. Lze domyslet jakýkoliv video formát..ogg
je přípona audio souboru. Lze domyslet.ogg
pro vorbis formát a.opus
pro opus formát.[-acodec copy]
: Tento parametr se doplňuje, pokud chceme do souboru data jen zkopírovat, bez překódování. To se hodí, pokud je ve video souboru zvuk již v požadovaném formátu vorbis nebo opus. Parametr se uvozuje bez hranatých závorek, takže-acodec copy
.
Například:
$ ffmpeg -i output_sound.webm -q:a 0 -acodec copy -map a output_sound.ogg
Pro přímou extrakci vorbis zvukových dat z video souboru do samostatného zvukového souboru bez překódování.
Pro spojení videa a audia použijeme jednoduchý příkaz:
$ ffmpeg -i <název video vstupu>.webm -i <název audio vstupu>.ogg -c copy <název výstupu>.webm
<název video vstupu>
: To je název souboru pro video vstup. V našem případě náš původní slepený export.<název audio vstupu>
: To je název souboru s extrahovaným zvukem. Za.ogg
(vorbis) si lze domyslet také i.opus
pro opus formát.<název výstupu>
: To je název souboru, do kterého chceme oba vstupy spojit.- Formát videa je v tomto případě vždy
.webm
Pojďme si shrnout tyto informace na příkladu. Chci vytvořit pohyblivou grafiku na short z klipu z Twitche,
kde je vidět název mého kanálu. Tuto grafiku jsem si vytvořil v online nástroji Pikimov, a projekt jsem si
uložil do pracovního souboru twitch_clip_short.pikimov
, který je určen pro editaci v nástroji Pikimov.
Export jsem provedl pomocí sekvence PNG snímků s průhledným pozadím. Tyto snímky mám v podadresáři .img_seq
,
a začínají sekvencí frame_
a čtyřmístné číslo snímku, číslované od nuly. Výstup chci do přechodného
podadresáře .ffpmeg
a chci odlišit, že se jedná o video bez zvuku. Tak provedu následující příkaz:
$ ffmpeg -r 60 -f image2 -i .img_seq/frame_%04d.png -c:v libvpx-vp9 -pix_fmt yuva420p .ffmpeg/twitch_clip_short_silent.webm
Nyní si tento soubor importuju do své Filmory, kde k němu přidám zvukové efekty švihnutí při vysunutí
a zasunutí názvu kanálu. Export mi dovolí jen 30 fps ve WebM formátu s průhledným pozadím. Video exportuju
do souboru twitch_clip_short_sound.webm
ve stejném podadresáři, jako mezikrok, protože chci svých 60 fps.
Provedu následující příkaz a zjistím následující skutečnosti:
$ ffmpeg -i .ffmpeg/twitch_clip_short_sound.webm
- Video formát je nejen 30 fps (tedy polovina, co chci), ale navíc ve starším formátu VP8, takže došlo i k překódování a tím pádem ke ztrátě kvality.
- Audio formát je ve formátu vorbis, sice starší a o něco horší formát, než opus, ale lepšího výsledku nedosáhnu. WebM formát tento kodek doporučuje. Překódováním bych si jen uškodil.
Následujícím příkazem extrahuju zvuk bez překódování do samostatného audio souboru:
$ ffmpeg -i .ffmpeg/twitch_clip_short_sound.webm -q:a 0 -acodec copy -map a .ffmpeg/twitch_clip_short_sound.ogg
Na závěr sloučím původní tiché video a extrahované audio do jednoho souboru:
$ ffmpeg -i .ffmpeg/twitch_clip_short_silent.webm -i .ffmpeg/twitch_clip_short_sound.ogg -c copy twitch_clip_short.webm
A je hotovo. Výsledný video soubor lze nadále použít ve vašem stříhacím programu.