Videocolleges: Unix-manier

Videocolleges: Unix-manier
Quarantaine is een prachtige tijd om iets te leren. Maar zoals u begrijpt, moet iemand lesgeven als hij iets wil leren. Als u een presentatie heeft die u voor een miljoenenpubliek wilt geven en wereldwijde bekendheid wilt verwerven, dan is dit artikel iets voor u. Hier vindt u stapsgewijze instructies voor het maken van een video van uw presentatie.

We doen het pad van het opnemen van “audiocommentaar” in PowerPoint en het exporteren van de presentatie naar video af als triviaal en bieden geen tiende van de mogelijkheden die nodig zijn voor een echt coole video.

Laten we eerst beslissen welke frames we nodig hebben:

  1. De eigenlijke slides met voice-over
  2. dia veranderen
  3. Citaten uit populaire films
  4. Diverse kaders met het gezicht van de docent en zijn favoriete kat (optioneel)

Het creëren van een directorystructuur

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

Het doel van de mappen in volgorde van plaatsing: films waaruit we citaten (clipart) zullen halen, fragmenten van onze toekomstige video (clips), video's van de camera (rec), dia's in de vorm van afbeeldingen (dia), geluid (geluid).

Een presentatie maken in beeld

Voor een echte Linux-gebruiker met rode ogen is het maken van een presentatie in de vorm van plaatjes geen enkel probleem. Ik wil u eraan herinneren dat een document in pdf-formaat met behulp van de opdracht in afbeeldingen kan worden geparseerd

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

Als een dergelijke opdracht niet bestaat, installeert u het pakket zelf poppler-utils (instructies voor Ubuntu; als je Arch hebt, dan weet je heel goed wat je zonder mij moet doen).

Hier en verder geloof ik dat de video is voorbereid in het HD Ready-formaat, d.w.z. 1280x720. Een presentatie met een horizontaal formaat van 10 inch geeft in uitgeladen toestand precies dit formaat (zie optie -r 128).

Het voorbereiden van de tekst

Als je echt geweldig materiaal wilt maken, moet je toespraak eerst geschreven worden. Ik dacht ook dat ik de tekst zonder voorbereiding kon uitspreken, vooral omdat ik goede ervaring heb met lesgeven. Maar het is één ding om live op te treden, en iets anders om een ​​video op te nemen. Wees niet lui: de tijd die u aan typen besteedt, zal zich vele malen terugbetalen.

Videocolleges: Unix-manier

Hier is mijn opnameformaat. Het nummer in de titel is gelijk aan het dianummer, de onderbrekingen zijn rood gemarkeerd. Elke editor is geschikt voor voorbereiding, maar het is beter om een ​​volwaardige tekstverwerker te nemen, bijvoorbeeld OnlyOffice.

Stem over de slides

Wat kan ik zeggen - zet de microfoon aan en schrijf :)

De ervaring leert dat de opnamekwaliteit zelfs van de goedkoopste externe microfoon onvergelijkbaar beter is dan die van de ingebouwde microfoon van een laptop. Als je kwaliteitsapparatuur wilt, raad ik het aan hier is dit artikel.

Voor opname heb ik gebruikt audiorecorder – een zeer eenvoudige toepassing voor geluidsopname. Je kunt het bijvoorbeeld hier nemen:

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

Het belangrijkste bij deze stap is om de bestanden de juiste naam te geven. De naam moet bestaan ​​uit het dianummer en het fragmentnummer. Fragmenten zijn genummerd met oneven cijfers - 1, 3, 5, enz. Dus voor de dia, waarvan de tekst in de afbeelding wordt weergegeven, worden er twee bestanden gemaakt: 002-1.mp3 и 002-3.mp3.

Als je alle video’s in één keer in een stille kamer hebt opgenomen, hoef je er verder niets mee te doen. Als u in meerdere stappen hebt opgenomen, is het beter om het volumeniveau gelijk te maken:

mp3gain -r *.mp3

nutsbedrijven mp3gain Om de een of andere reden staat het niet in de standaardrepository's, maar je kunt het hier downloaden:

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

Na dit alles moet je nog een bestand met stilte opnemen. Het is noodzakelijk om aan stille video's een soundtrack toe te voegen: als de ene video een soundtrack heeft en de andere niet, dan is het moeilijk om deze video's aan elkaar te lijmen. Stilte kan worden opgenomen via een microfoon, maar het is beter om een ​​bestand in de editor aan te maken vermetelheid. De bestandslengte moet minimaal een seconde zijn (meer is mogelijk) en moet een naam hebben stilte.mp3

Onderbrekingsvideo's voorbereiden

Hier wordt alles alleen beperkt door je verbeeldingskracht. Voor het bewerken van video's kun je een editor gebruiken Avidemux. Ooit stond het in de standaardrepository's, maar om de een of andere reden werd het eruit geknipt. Dit houdt ons niet tegen:

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

Er zijn veel instructies voor het werken met deze editor op internet, en in principe is alles daar intuïtief. Het is belangrijk om aan een aantal voorwaarden te voldoen.

Ten eerste moet de videoresolutie overeenkomen met de doelvideoresolutie. Om dit te doen, moet je twee filters gebruiken in de "uitvoervideo": swsResize om de resolutie te wijzigen en "velden toevoegen" om een ​​Sovjet-film van "smal formaat" in een breed formaat te veranderen. Alle andere filters zijn optioneel. Als iemand bijvoorbeeld niet begrijpt waarom de verklaring van de heer Sharikov in het besproken fragment staat, kunt u met behulp van het filter “logo toevoegen” het PostgreSQL-logo over het “Hondenhart” leggen.

Ten tweede moeten alle fragmenten dezelfde framesnelheid gebruiken. Ik gebruik 25 frames per seconde omdat mijn camera en oude Sovjetfilms mij zoveel opleveren. Als de film waaruit u knipt met een andere snelheid is opgenomen, gebruikt u het filter Video opnieuw samplen.

Ten derde moeten alle fragmenten worden gecomprimeerd met dezelfde codec en in dezelfde containers worden verpakt. Daarom binnen Avidemux selecteer voor het formaat video – “MPEG4 AVC (x264)", audio-"AAC (FAAC)", uitvoerformaat - "MP4-Muxer.

Ten vierde is het belangrijk om de geknipte video's de juiste naam te geven. De bestandsnaam moet bestaan ​​uit het dianummer en het fragmentnummer. Fragmenten worden genummerd met even cijfers, beginnend bij 2. Voor het besproken frame moet dus de video met de onderbreking worden genoemd 002-2.mp4

Nadat de video's klaar zijn, moet je ze met fragmenten naar de map overbrengen. Instellingen Avidemux verschillen van instellingen ffmpeg standaard met mysterieuze parameters tbr, tbn, tbc. Ze hebben geen invloed op het afspelen, maar laten niet toe dat de video's aan elkaar worden geplakt. Dus laten we hercoderen:

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

Schermbeveiligingen opnemen

Ook hier is alles eenvoudig: je fotografeert tegen de achtergrond van een slim schema en plaatst de resulterende video's in een catalogus rec, en breng het van daaruit over naar de map met fragmenten. De naamgevingsregels zijn dezelfde als voor interrupt-aanhalingstekens; het hercoderingscommando is als volgt:

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

Als je van plan bent de video te starten met jouw toespraak, geef dit fragment dan een naam 000-1.mp4

Kaders maken van statische afbeeldingen

Het is tijd om video's te bewerken van statische beelden en geluid. Dit gebeurt met het volgende script:

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

Houd er rekening mee dat de duur van het audiobestand eerst wordt bepaald door het hulpprogramma soxen vervolgens wordt de video met de vereiste lengte bewerkt. Alle aanbevelingen die ik heb gevonden zijn eenvoudiger: in plaats van een vlag -t ${duur} vlag wordt gebruikt -kortste... Werkelijk ffmpeg bepaalt bij benadering de lengte van mp3, en tijdens het bewerken kan de lengte van de audiotrack sterk verschillen (een of twee seconden) van de lengte van de videotrack. Het maakt niet uit of de hele video uit één frame bestaat, maar als je zo’n video met onderbrekingen aan de rand aan elkaar plakt, ontstaan ​​er uiterst onaangename stottereffecten.

Een andere manier om de duur van een mp3-bestand te bepalen is door gebruik te maken van mp3info. Ze maakt ook fouten, en soms ffmpeg geeft meer dan mp3info, soms is het andersom, soms liegen ze allebei – ik heb geen enkel patroon opgemerkt. En hier sox werkt correct.

Ga als volgt te werk om dit handige hulpprogramma te installeren:

sudo apt-get install sox libsox-fmt-mp3

Overgangen maken tussen dia's

Een overgang is een korte video waarin de ene dia in de andere verandert. Om dergelijke video's te maken, maken we dia's in paren en gebruiken we imagemagick transformeer het één in het ander:

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

Om de een of andere reden wilde ik dat de dia bezaaid was met punten, en dat de volgende dia uit de punten zou worden samengesteld, en hiervoor schreef ik een script met de naam fade.pl hebben imagemagick, zal een echte Linux-gebruiker een speciaal effect creëren, maar als iemand mijn idee met verstrooiing leuk vindt, is hier het script:

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

We monteren de voltooide video

Nu hebben we alle fragmenten. Ga naar de catalogus clips en assembleer de voltooide film met behulp van twee opdrachten:

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

Veel kijkplezier naar uw dankbare leerlingen!

Bron: www.habr.com

Voeg een reactie