# Videokopa

---

Apraksta versija: 2021.02.12

Apraksta autors: Kārlis Kalviškis

Apraksts tiek izplatīts ar "[*CC-BY-SA*](https://creativecommons.org/licenses/by-sa/4.0/deed.lv "Atsaukties un izplatīt līdzīgi")" licenci.

---

Šajā aprakstā atrodama ziņas par direktoriju struktūru un failu saturu. Tajā ir aprakstītas gan esošās, gan vēlamās skriptu darbības.


## Īsumā

Pamācību kopa balstās uz failu sistēmu. Datu bāzes netiek izmantotas. Kopu veido statiskas *HTML* lapas ar iekļautiem video failiem un attēliem. Kopa var publicēt tīmekļa serverī tikpat labi kā apskatīt uz vietas datorā.

Galvenais pamācību vienums ir videofails. Tā kā video parādīšana balstās uz *HTML5*, ir jāizmanto tādi formāti, kuri visiespējamāk būs apskatāmi visur. Tāds varētu būt *WebM*.

Videofailam var tikt piekārtoti attēli un apraksti.


## Izmantotā programmatūra

Pamācību kopa tiek veidota izmantojot vienu *bash* skriptu un vienu *perl* skriptu. Lai skripti varētu kopīgi darboties, ir jāsakrīt pirmo divu līmeņu versiju numuriem, piemēram,  skripts, kura versija ir `0.05.99`, ir saderīgs ar skriptu, kura versija ir `0.05.00`, bet nav saderīgs ar skriptu, kura versija ir `0.06.00`.

*Markdown* formāta teksta apstrādei *perl* skriptā tiek izmantots "*Text::Markdown*" modulis (`perl-Text-Markdown.noarch`), kas neietilpst *perl* pamatinstalācijā.

Uzziņu iegūšanai par datnēm *perl* skriptā tiek izmantots "*Image::ExifTool*" modulis (`perl-Image-ExifTool.noarch`), kas neietilpst *perl* pamatinstalācijā.

Filmu un attēlu pārveidei kopas vajadzībām, tiek izmantota sekojoša programmatūra:

* *ffmpeg* – video un audio failu apvienošanai, izmēra maiņai un pārkodēšanai;
* *ffprobe* – ievāc ziņas par video failā esošo straumju izmēriem;
* *convert* – (no *ImageMagick*) sagatavo katram attēlam dažādus izmērus;
* *pngquant* – optimizē *PNG* failus;
* *jpegoptim* – optimizē *JPEG* attēlus; 
* *unoconv* (+ *LibreOffice*) – pārveido *ODF* failus par  *PDF* failiem.


## Direktoriju struktūra kopas veidošanai

Kopas veidošana ir sadalīta pa vairākām direktorijām. Jebšu iekavās dotie direktoriju nosaukumi ir tikai piemēram, uz tiem atsaucās šī apraksta turpinājumā:

* (**PRG**) – programmas direktorija, kura atrodas skripti, kopas veidošanas un citi apraksti, dažādas sagataves;

* (**saveidoti**) – direktorija, kuras apakšdirektorijās ir sagatavotie scenāriju video, audio, titru, attēlu, attēlu aprakstu un direktoriju aprakstu faili;

* (**pamaaciibas**) – gala rezultāts, kas iegūts darbinot "`veido.sh`" un "`veido.sh.pl`" skriptus;

* (**dati**) – pamācībās izmantotie faili, kurus paredzēts padarīt pieejamus gala lietotajiem.

Ja kādu failu gala formātā nav iespējams izveidot ar skriptu palīdzību un tas tiek gatavots savādāk, tad izveidotais fails  jāievieto atbilstošā **`pamaaciibas`** apakšdirektorijā. Piemēram, tur var ievietot  jau gatavus *pdf* failus. Vēlams izveidot arī atbilstošās **`saveidoti`** apakšdirektorijas ar `__dirinfo` failiem tajos.


## Satura rādītājs

Satura rādītāju veido "`veido.sh.pl`" skripts balstoties uz direktoriju struktūru un tajos esošajiem videofailiem. Satura rādītājs neiet dziļāk par direktoriju kurā ir fails "`__dirinfoS`". Šajā direktorijā tiek veidots cits satura rādītājs.

Satura rādītājs veido norādes uz:

* direktorijām, kurās ir fails "`__dirinfoS`";
* video failu ietverošos *HTML* formāta lappusēm;
* *PDF* formāta dokumentiem.

Ierastus satura rādītāja veido:

* "`__dirnfo`" vai "`__dirnfoS`" failā esošā mainīgā *title* vērtība;
* videofailam piekārtota *ass* failā esošā `Title:` vērtība;
* *pdf* dokumanta virsraksts;
* ja virsraksti nav pieejami, tad faila vai direktorijas vārds.


## <a name=keywords></a>Alfabētiskais rādītājs

Visai kopai tiek veidots vienot alfabētiskais rādītājs balstoties uz ierakstītajiem atslēgvārdiem failos `__dirinfo`, `dirinfoS` un `*.md`. Sarakstā paši atslēgvārdi nav aktīvi. Aiz katra atslēgvārda ir tā atrašanas kārtas numuri, kas tad aizvedīs uz attiecīgo lapu.

### Atslēgvārdi

Atslēgvārdus nosaka rindiņa, kurā pirmais vārds ir "**keywords**" tad seko viena vai vairākas atstarpes, pēc kurām seko atslēgvārdi. Katrs atslēgvārds tiek likts figūriekavās(`{}`). Atslēgvārdu līmeņus veido atdalot apakšlīmeni ar diviem koliem (`::`). Atslēgvārdi var tikt rakstīti vairākās rindās. Rindas apvieno ar atgāzto slīpsvītru ("`\`").

Atslēgvārdi, kuriem sākumā, uzreiz aiz atverošās figūriekavas, ir "at" (@) zīme, alfabētiskajā satura rādītajā tiek īpaši izcelti.

> #### Atslēgvārdu piemērs
> 
> keywords {karšu izveide}{publicēšana}\  
> {QGIS::izdruku izkārtojumi}


## Direktorijas

Direktoriju struktūra nosaka satura rādīta struktūru. Uz katru video failu attiecināmie citi faili atrodas tajā pašā direktorijā, kura atrodas dotais videofails.


### Direktoriju apraksts

Direktoriju apraksts glabājas teksta failā. Tā vārds ir vai nu "`__dirinfo`" vai "`__dirinfoS`". Fails "`__dirinfo`" nosaka, ka tā ir parasta direktorija. Fails "`__dirinfoS`" nosaka, ka šai direktorijai jāveido pašai savs satura rādītājs. Satura ziņā abi faili ir vienādi. Vienlaicīgi abi faili direktorija atrasties nevar.

Apraksta failu saturu veido mainīga nosaukuma un mainīga vērtības pāri. Nosaukumu no satura atdala nenoteikts skaits atstarpes. Tabulatori tiek pielīdzināti atstarpēm. Rindu sākumos atstarpes netiek ņemtas vērā. Rindas, kuras sākas ar "#" tiek uztvertas kā piezīmes. Viena loģiska ieraksta rinda var tikt sadalīta pa vairākām rindām. To panāk rindu nobeidzot ar atgāzto slīpsvītru ("`\`").

Mainīgā saturs var būt masīvs. Katru masīva vērtību liek figūriekavās.


#### Mainīgo apraksti

* **title**
 + Direktorijas nosaukums.
 + Izmanto satura rādītājā.
 + Izmanto veidojot lapas aprakstu.
* **about**
 + Direktorijas īss apraksts.
 + Varētu parādīties satura  rādītājā vai nu kā "`<a >`" lauka "*title*" (parādās, kad peles kursors novietojas virs ieraksta), vai arī kā paskaidrojošs teksts zem katra satura radītāja ieraksta.
 + Var saturēt *HTML* kodus.
* **description**
 + Direktorijas pilns apraksts.
 + Izmanto veidojot lapas aprakstu.
 + Var saturēt *HTML* kodus.
* **order**
 + masīvs ar vajadzīga secībā sakārtotiem failu nosaukumiem.
* **keywords**
 + masīvs ar atslēgvārdiem.
 + Tiek izmantoti veidojot alfabētisko rādītāju.
 + Var saturēt *HTML* kodus.
 + Par pašiem atslēgvārdiem [skatīt šeit](#keywords).
 

## Faili

Veidojot failu un direktoriju nosaukumus, jāievēro šādi nosacījumi:

* vārds nedrīkst saturēt atstarpes;
* vārds nedrīkst sākties ar divām zemsvītrām (`__`), izņemt failiem `__dirinfo` un `__dirinfoS`;
* pamatvārds nedrīkst saturēt `[` un `]`.

Failu savstarpējo saistību nosaka to pamatvārds. Attēla vārdu veido pamatvārds aiz kura seko kvadrātiekavās laiku sekundēs, kurā dotais attēls var būt ka papildus paskaidrojums video failam.

> ### Failu grupas piemērs
>
> 1. **mansvideo.mp4**  – video (pamat-) fails.
> 1. **mansvideo.m4a**  – video faila cits skaņas celiņš.
> 1. **mansvideo.ass**  – titru fails.
> 1. **mansvideo.md**  – papildus ziņas, piemēram, atslēgvārdi.
> 1. **mansvideo[10].png**  – video ieraksta 10. sekundei piekārtos attēls.
> 1. **mansvideo[10].md**  – attēla failam piekārtots apraksts.
> 1. **mansvideo[21].png**  – video ieraksta 21. sekundei piekārtos attēls.
> 1. **mansvideo[21].md**  – attēla failam piekārtots apraksts.

