Video predavanja: unix način

Video predavanja: unix način
Karantena je čudovit čas, da se česa naučimo. Vendar, kot razumete, da bi se nekdo nekaj naučil, mora nekdo učiti. Če imate predstavitev, ki jo želite predstaviti milijonskemu občinstvu in pridobiti svetovno slavo, potem je ta članek za vas. Tukaj boste našli navodila po korakih, kako narediti video iz svoje predstavitve.

Pot snemanja »zvočnih komentarjev« v PowerPointu in izvoza predstavitve v video zavračamo kot trivialno in ne zagotavlja niti desetine zmogljivosti, potrebnih za resnično kul video.

Najprej se odločimo, katere okvirje potrebujemo:

  1. Dejanski diapozitivi z glasom
  2. sprememba diapozitiva
  3. Citati iz priljubljenih filmov
  4. Več okvirjev z obrazom predavatelja in njegovo najljubšo mačko (neobvezno)

Ustvarjanje strukture imenika

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

Namen imenikov po vrstnem redu naštevanja: filmi, iz katerih bomo črpali citate (clipart), fragmenti našega prihodnjega videa (posnetki), videoposnetki iz kamere (rec), diapozitivi v obliki slik (diapozitivi), zvok (zvok).

Izdelava predstavitve v slikah

Za pravega rdečeokega uporabnika Linuxa izdelava predstavitve v obliki slik ne predstavlja težav. Naj vas samo spomnim, da lahko dokument v formatu pdf z ukazom razčlenimo na slike

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

Če takega ukaza ni, namestite paket sami poppler-utils (navodila za Ubuntu; če imate Arch, potem dobro veste, kaj storiti brez mene).

Tu in naprej menim, da je video pripravljen v formatu HD Ready, torej 1280x720. Predstavitev z vodoravno velikostjo 10 palcev daje točno to velikost, ko ni naložena (glejte parameter -r 128).

Priprava besedila

Če želite ustvariti res odličen material, morate svoj govor najprej napisati. Mislil sem tudi, da bi besedilo lahko spregovoril brez priprave, sploh ker imam dobre izkušnje s predavanji. A eno je nastopati v živo, drugo pa snemati video. Ne bodite leni – čas, porabljen za tipkanje, se vam bo večkrat povrnil.

Video predavanja: unix način

Tukaj je moj format snemanja. Številka v naslovu je enaka številki diapozitiva, prekinitve so označene rdeče. Vsak urejevalnik je primeren za pripravo, vendar je bolje vzeti polnopravni urejevalnik besedil - na primer OnlyOffice.

Glas preko diapozitivov

Kaj naj rečem - prižgi mikrofon in piši :)

Izkušnje kažejo, da je kakovost snemanja tudi z najcenejšim zunanjim mikrofonom neprimerljivo boljša kot z vgrajenim mikrofonom prenosnika. Če želite kvalitetno opremo, jo priporočam tukaj je ta članek.

Za snemanje sem uporabil avdio snemalnik – zelo preprosta aplikacija za snemanje zvoka. Lahko ga vzamete na primer tukaj:

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

Glavna stvar pri tem koraku je pravilno poimenovati datoteke. Ime mora biti sestavljeno iz številke diapozitiva in številke fragmenta. Fragmenti so oštevilčeni z lihimi številkami - 1, 3, 5 itd. Torej, za diapozitiv, katerega besedilo je prikazano na sliki, bosta ustvarjeni dve datoteki: 002-1.mp3 и 002-3.mp3.

Če ste posneli vse videoposnetke hkrati v tihi sobi, vam z njimi ni treba storiti ničesar več. Če ste snemali v več korakih, je bolje izenačiti glasnost:

mp3gain -r *.mp3

Javne službe mp3pet Iz nekega razloga ga ni v standardnih repozitorijih, vendar ga lahko dobite tukaj:

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

Po vsem tem morate posneti še eno datoteko s tišino. Tihim videoposnetkom je treba dodati zvočni posnetek: če ima en videoposnetek zvočni posnetek, drugi pa ne, je te videoposnetke težko zlepiti skupaj. Tišino lahko posnamete z mikrofonom, vendar je bolje ustvariti datoteko v urejevalniku Audacity. Datoteka mora biti dolga vsaj sekundo (možno je več) in mora biti poimenovana tišina.mp3

Priprava prekinitvenih videov

Tukaj je vse omejeno le z vašo domišljijo. Za urejanje videoposnetkov lahko uporabite urejevalnik Avidemux. Nekoč je bil v standardnih repozitorijih, potem pa je bil iz nekega razloga izrezan. To nas ne bo ustavilo:

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

Na internetu je veliko navodil za delo s tem urejevalnikom in načeloma je tam vse intuitivno. Pomembno je izpolniti več pogojev.

Prvič, ločljivost videa se mora ujemati s ciljno ločljivostjo videa. Če želite to narediti, morate v "izhodnem videu" uporabiti dva filtra: swsResize za spremembo ločljivosti in "dodajanje polj", da sovjetski film "ozkega formata" spremenite v širok format. Vsi ostali filtri so neobvezni. Na primer, če nekdo ne razume, zakaj je izjava g. Sharikova v obravnavanem fragmentu, lahko z uporabo filtra »dodaj logotip« prekrijete logotip PostgreSQL na vrhu »pasjega srca«.

Drugič, vsi fragmenti morajo uporabljati enako hitrost sličic. Uporabljam 25 sličic na sekundo, ker mi toliko dajo fotoaparat in stari sovjetski filmi. Če je bil film, iz katerega izrezujete, posnet z drugačno hitrostjo, uporabite filter Resample Video.

Tretjič, vsi fragmenti morajo biti stisnjeni z istim kodekom in zapakirani v iste vsebnike. Zato v Avidemux za format izberite video – “MPEG4 AVC (x264)", zvok - "AAC (FAAC)", izhodna oblika - "MP4 mukser".

Četrtič, pomembno je pravilno poimenovati izrezane videoposnetke. Ime datoteke mora biti sestavljeno iz številke diapozitiva in številke fragmenta. Fragmenti so oštevilčeni s sodimi številkami, začenši z 2. Tako je treba za obravnavani okvir poimenovati videoposnetek s prekinitvijo 002-2.mp4

Ko so videoposnetki pripravljeni, jih morate prenesti v imenik z fragmenti. nastavitve avidemux razlikujejo od nastavitev ffmpeg privzeto s skrivnostnimi parametri tbr, tbn, tbc. Ne vplivajo na predvajanje, vendar ne omogočajo lepljenja videoposnetkov. Torej prekodirajmo:

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

Snemanje ohranjevalnikov zaslona

Tudi tukaj je vse preprosto: posnamete v ozadju neke pametne sheme, videoposnetke postavite v katalog rec, od tam pa ga prenesite v imenik z fragmenti. Pravila poimenovanja so enaka kot za prekinitvene narekovaje, ukaz za ponovno kodiranje je naslednji:

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

Če nameravate video začeti s svojim govorom, poimenujte ta fragment 000-1.mp4

Izdelava okvirjev iz statičnih slik

Čas je za urejanje videoposnetkov iz statičnih slik in zvoka. To se naredi z naslednjim skriptom:

#!/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

Upoštevajte, da trajanje zvočne datoteke najprej določi pripomoček soxi, nato pa se zmontira videoposnetek zahtevane dolžine. Vsa priporočila, ki sem jih našel, so preprostejša: namesto zastavice -t ${trajanje} uporablja se zastava - najkrajša. Pravzaprav ffmpeg določa dolžino mp3 zelo približno, med montažo pa se lahko dolžina zvočnega zapisa močno razlikuje (za eno ali dve sekundi) od dolžine video zapisa. To ni pomembno, če je celoten video sestavljen iz enega samega okvirja, a ko lepite tak video s prekinitvami na meji, se pojavijo izjemno neprijetni učinki zatikanja.

Drug način za določitev trajanja datoteke mp3 je uporaba mp3info. Tudi ona dela napake in včasih ffmpeg daje več kot mp3info, včasih je obratno, včasih oba lažeta – nisem opazil nobenega vzorca. In tukaj soxi deluje pravilno.

Če želite namestiti ta uporaben pripomoček, naredite to:

sudo apt-get install sox libsox-fmt-mp3

Izdelava prehodov med diapozitivi

Prehod je kratek video, v katerem se en diapozitiv spremeni v drugega. Za izdelavo takšnih videoposnetkov vzamemo diapozitive v parih in jih uporabimo ImageMagick spremeniti eno v drugo:

#!/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}

Iz nekega razloga sem želel, da je diapozitiv posut s pikami, nato pa bi bil naslednji diapozitiv sestavljen iz pik, in za to sem napisal skript z imenom fade.pl Ob ImageMagick, bo pravi uporabnik Linuxa ustvaril kakšen poseben učinek, če pa je komu všeč moja ideja z razpršitvijo, je tukaj 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);
}

Montiramo končni video

Zdaj imamo vse fragmente. Pojdite v katalog posnetki in sestavite končni film z dvema ukazoma:

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

Prijetno gledanje vašim hvaležnim učencem!

Vir: www.habr.com

Dodaj komentar