Videoloengid: unix way

Videoloengid: unix way
Karantiin on suurepärane aeg midagi õppida. Kuid nagu te mõistate, et keegi peab õpetama, et keegi midagi õpiks. Kui teil on esitlus, millega soovite esineda miljoni silmapaari ees ja saavutada maailmakuulsus, siis see artikkel on teile. Siin on samm-sammuline juhend, kuidas esitluses videofilm saada.

Loistame välja tee "heli kommentaaride" salvestamisest PowerPointis ning esituse eksportimisest videoks, kuna see on triviaalne ja ei paku ükski kümnendikku vajalikest võimalustest, mis on vajalik tõeliselt ägedaks videoks.

Kuna alustame, määrame, milliseid kaadreid meil on vaja:

  1. Koheselt slaidid koos häälega
  2. Slaidide vahetus
  3. Tsitaadid tuntud filmidest
  4. Mõned kaadrid lektori ja lemmik kassi eest (valikuline)

Loome kaustade struktuuri

.
├── clipart
├── clips
├── rec
├── slide
└── sound

Kaustade määramine vastavalt loetelule: filmid, kust me tsitaate võtame (clipart), meie tulevase video fragmendid (clips), kaameraga salvestatud videod (rec), slaidid piltidena (slide), helifail (sound).

Teeme esituse piltidena

Punase silmaga Linuxi fännile pole esitluse tegemine piltide näol mingiks probleemiks. Pean meeles, et PDF-formaadis dokumendi saab piltideks jagada käsuga

pdftocairo -png -r 128 ../lecture.pdf

Kui sellist käsku ei ole, installige endale pakett poppler-utils (juhised Ubuntu jaoks; kui teil on Arch, siis teate ilmselt, kuidas edasi).

Siin ja edaspidi arvan, et video valmistatakse HD Ready formaadis, st 1280×720. Horisontaalne suurus 10 tolli annab käivitamisel just sellise suuruse (vt parameetrit -r 128).

Valmistame teksti

Kui soovite teha tõeliselt ägedat materjali, siis peate oma kõne eelnevalt kirja panema. Ma arvasin ka, et suudan teksti ilma ettevalmistuseta rääkida, lisaks on mul päris hea loengute lugemise kogemus. Kuid üks asi on esineda otse, ja teine asi on video salvestamine. Ärge olge laisad – tekstiks kulutatud aeg tasub end korduvalt ära.

Videoloengid: unix way

Siin on minu salvestusformaadi näidis. Pealkirja number vastab slaidi numbrile, punasega on välja toodud katkestused. Valmistamiseks sobib iga toimetaja, aga parem on siiski kasutada täisfunktsionaalset sõnaprotsessorit – näiteks, OnlyOffice.

Häälestame slaide

Mis siin öelda – lülitage mikrofon sisse ja kirjutage 🙂

Kogemus näitab, et isegi kõige odavama välimikrofoni salvestamise kvaliteet on võrreldes sülearvuti sisemise mikrofoniga palju parem. Kui soovite kvaliteetset seadmeid, soovitan seda artiklit.

Salvestamiseks kasutasin audio-recorder – täiesti lihtne helisalvestusrakendus. Selle leidmine on võimalik näiteks siit:

sudo add-apt-repository ppa:audio-recorder/ppa
sudo apt-get update
sudo apt-get install audio-recorder

Selle sammu peamine punkt on failide õige nimetamine. Nimi peaks koosnema slaidi numbrist ja fragmendi numbrist. Fragmente numbitakse paaritute numbritega – 1, 3, 5 jne. Nii luuakse slaidi jaoks, mille tekst on kujutatud pildil, kaks faili: 002-1.mp3 ja 002-3.mp3.

Kui salvestasite kõik videod korraga vaikuses toas, ei pea te edaspidi nendega midagi tegema. Kui salvestasite mitmes osas, on parem tasandada helitugevuse tase:

mp3gain -r *.mp3

Tööriistad mp3gain pole kummalisel kombel standardsetes repositooriumites, kuid selle saab siit:

sudo add-apt-repository ppa:flexiondotorg/audio
sudo apt-get update
sudo apt-get install mp3gain

Kõige selle järel on vaja salvestada veel üks vaikusefail. See on vajalik, et lisada helirada vaiksetele videotele: kui ühes videos on helirada ja teises pole, siis nende lõikamine on keeruline. Vaikust saab salvestada mikrofoniga, kuid parem on luua fail redaktorisse Audacity. Faili pikkus peab olema vähemalt sekund (võib olla kauem) ja seda tasub nimetada silence.mp3

Valmistame üleminekvideod

Siin on kõik piiratud ainult teie kujutlusvõimega. Videote redigeerimiseks võib kasutada redaktorit Avidemux. Kunagi oli ta standardsetes hoidlates, kuid hiljem eemaldati ta mingil põhjusel. See ei takista meid:

sudo add-apt-repository ppa:ubuntuhandbook1/avidemux
sudo apt-get update
sudo apt-get install avidemux2.7-qt5

Internedis on selle redaktori kasutamise kohta rohkelt juhiseid ja tegelikult on seal kõik intuitiivne. Oluline on järgida mõningaid tingimusi.

Esiteks peab video resolutsioon vastama sihtvideo resolutsioonile. Selleks tuleks "väljundvideo" menüüs kasutada kahte filtrit: swsResize resolutsiooni muutmiseks ja "vahede lisamine", et teha Nõukogude "kitsas formaadis" film laiemaks. Kõik muud filtrid on valikulised. Näiteks, kui keegi ei saa aru, miks hr Sharikovi väljend aruteldavas fragmendis on, võib filtri "logo lisamine" abil "Koer südame" peale kanda PostgreSQLi logo.

Teiseks, kõikides fragmentides tuleb kasutada sama kaadrisagedust. Mina kasutan 25 kaadrit sekundis, kuna nii palju annab minu kaamera ja vanad Nõukogude filmid. Kui film, millest te kaadrit välja lõikate, on filmitud teise kiirusel, kasutage filtrit "video resample".

Kolmandaks, kõik fragmentid peavad olema sama koodekiga pakitud ühte ja samasse konteinerisse. Seega valige Avidemux formaadi jaoks video – "Mpeg4 AVC (x264){ "527835": "AAC (Faac)", "527836": "",AAC (Faac)», väljundvorming – „väljundformaadiks – "MP4 Muxer».

Neljandas, on oluline õigesti nimetada lõigatud klippe. Failinimi peaks koosnema slaidi numbrist ja lõigu numbrist. Lõigud nummerdatakse paarisarvudega, alustades 2-st. Nii et arutletud kaadri jaoks peaks klipp nimega 002-2.mp4

Pärast klippide valmimist tuleb need viia lõikude katalooge. Seaded avidemux erinevad seadistustest ffmpeg vaikimisi salapäraste parameetritega tbr, tbn, tbc. Need ei mõjuta taasesitamist, kuid ei luba klippe kokku panna. Seega kodeerime ümber:

for f in ???-?.mp4;
do
  ffmpeg -hide_banner -y -i "${f}" -c copy -r 25 -video_track_timescale 12800 ../clips/$f
done

Küsimusi eemaldame

Siin on samuti kõik lihtne: filmite end mõne nutika skeemi taustal, kogute saadud klippe katalooge rec, ja sealt viite lõikude katalooge. Nimeandmise reeglid on samad nagu tsitaatoklipide puhul, kodeerimise käsu jaoks on järgmine:

ffmpeg -y -i source_file -r 25 -vcodec libx264 -pix_fmt yuv420p -profile:v high -coder 1 -s 1280x720 -ar 44100 -ac 2 ../clips/xxx-x.mp4

Kui kavatsete alustada klippi oma esinemisega, nimetage see lõik 000-1.mp4

Teeme kaadreid staatilistest piltidest

On aeg monteerida klippe staatilistest piltidest ja helist. Seda saab teha järgmise skripti abil:

#!/bin/bash

for sound in sound/*.mp3
do
  soundfile=${sound##*/}
  chunk=${soundfile%%.mp3}
  clip=${chunk}.mp4
  pic=slide/${chunk%%-?}.png

  duration=$(soxi -D ${sound} 2>/dev/null)
  echo ${sound} ${pic} ${clip} " - " ${duration}

  ffmpeg -hide_banner -y -loop 1 -i ${pic} -i ${sound} -r 25 -vcodec libx264 -tune stillimage -pix_fmt yuv420p -profile:v high -coder 1 -t ${duration} clips/${clip}
done

Pange tähele, et esialgu määrab utiliit helifaili kestuse soxi, ja seejärel monteeritakse soovitud pikkusega video. Kõik minu leitud soovitused on lihtsamad: lipu asemel -t ${duration} kasutatakse lippu -shortest. Tegelikult ffmpeg määrab mp3 pikkuse väga umbkaudselt ja montaaži käigus võib heliraja pikkus (ühe kuni kahe sekundi võrra) oluliselt erineda videoraja pikkusest. See ei oma tähtsust, kui kogu video koosneb ühest kaadrist, kuid sellise videotüki kokku monteerimisel üleminekuvahekordades võivad tekkida äärmiselt ebameeldivad klippimise efektid.

Teine viis mp3-faili kestuse määramiseks on kasutada mp3info. See eksib ka, kuid mõnikord ffmpeg annab rohkem kui mp3info, mõnikord vastupidi, mõlemad võivad vale andmeid anda – seaduspärasusi ma ei märganud. Kuid soxi töötab õigesti.

Selle kasuliku utiliidi installimiseks tehke järgmist:

sudo apt-get install sox libsox-fmt-mp3

Teeme üleminekuid slaidide vahel

Üleminek on lühike video, kus üks slaid muutub teiseks. Selliste videote valmistamiseks võtame slaidid paarikaupa ja kasutame imagemagick muutmiseks:

#!/bin/bash

BUFFER=$(mktemp -d)

for pic in slide/*.png
do
  if [[ ${prevpic} != "" ]]
  then
    clip=${pic##*/}
    clip=${clip/.png/-0.mp4}
    #
    # генерируем картинки
    #
    ./fade.pl ${prevpic} ${BUFFER} 1280 720 5 direct 0
    ./fade.pl ${pic} ${BUFFER} 1280 720 5 reverse 12
    #
    # закончили генерировать картинки
    #
    ffmpeg -y -hide_banner -i "${BUFFER}/%03d.png" -i sound/silence.mp3 -r 25 -y -acodec aac -vcodec libx264 -pix_fmt yuv420p -profile:v high -coder 1 -shortest clips/${clip}
    rm -f ${BUFFER}/*
  fi
  prevpic=${pic}
done

rmdir ${BUFFER}

Mulle tuli kuidagi soov, et slaid laguneks punktideks ja seejärel koguneks järgmiseks slaidiks, ning selleks kirjutasin skripti nimega fade.pl Olles imagemagick, tõeline linuxuserid suudab luua mistahes eriefekti, kuid kui kellelegi meeldib minu ideega lagunemisest, siis siin on skript:

#!/usr/bin/perl

use strict;
use warnings;
use locale;
use utf8;
use open qw(:std :utf8);
use Encode qw(decode);
use I18N::Langinfo qw(langinfo CODESET);

my $codeset = langinfo(CODESET);
@ARGV = map { decode $codeset, $_ } @ARGV;

my ($source, $target, $width, $height, $pixsize, $rev, $file_no) = @ARGV;

my @rects;
$rects[$_] = "0123456789AB" for 0..$width*$height/$pixsize/$pixsize/12 - 1;

for my $i (0..11) {
  substr($_,int(rand(12-$i)),1) = "" for (@rects);
  my $s = $source;
  $s =~ s#^.*/##;
  open(PICTURE,"| convert - -transparent white PNG:- | convert "$source" - -composite "$target/".substr("00".($file_no+$i),-3).".png"");
  printf PICTURE ("P3n%d %dn255n",$width,$height);
  for my $row (1..$height/$pixsize/3) {
    for my $j (0..2) {
      my $l = "";
      for my $col (1..$width/$pixsize/4) {
        for my $k (0..3) {
          $l .= (index($rects[($row-1)*$width/$pixsize/4+$col-1],sprintf("%1X",$j*4+$k))==-1 xor $rev eq "reverse") ? "0 0 0n" : "255 255 255n" for (1..$pixsize);
        }
      }
      print PICTURE ($l) for (1..$pixsize);
    }
  }
  close(PICTURE);
}

Koondame valmis video

Nüüd on meil kõik fragmendid. Liigume katalooge clips ja koondame valmis filmi kahe käsuga:

ls -1 ???-?.mp4 | gawk -e '{print "file " $0}' >list.txt
ffmpeg -y -hide_banner -f concat -i list.txt -c copy MOVIE.mp4

Head vaatamist teie tänulikud õpilased!

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster