Videoföreläsningar: unix way

Videoföreläsningar: unix way
Karantän är en underbar tid att lära sig något. Men som du förstår, för att någon ska lära sig något måste någon undervisa. Om du har en presentation som du vill ge för en publik på miljoner och få världsomspännande berömmelse, då är den här artikeln för dig. Här hittar du steg-för-steg instruktioner om hur du gör en video från din presentation.

Vi avfärdar vägen att spela in "ljudkommentarer" i PowerPoint och exportera presentationen till video som trivial och inte tillhandahålla en tiondel av de möjligheter som behövs för en riktigt cool video.

Låt oss först bestämma vilka ramar vi behöver:

  1. Själva bilderna med voiceover
  2. glidbyte
  3. Citat från populära filmer
  4. Flera ramar med föreläsarens ansikte och hans favoritkatt (valfritt)

Skapa en katalogstruktur

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

Syftet med katalogerna i listad ordning: filmer från vilka vi kommer att hämta citat (clipart), fragment av vår framtida video (klipp), videor från kameran (rec), diabilder i form av bilder (slide), ljud (ljud).

Göra en presentation i bilder

För en riktig rödögd Linuxanvändare är det inga problem att göra en presentation i form av bilder. Låt mig bara påminna dig om att ett dokument i pdf-format kan tolkas till bilder med kommandot

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

Om det inte finns något sådant kommando, installera paketet själv poppler-utils (instruktioner för Ubuntu; om du har Arch, då vet du mycket väl vad du ska göra utan mig).

Här och vidare tror jag att videon är förberedd i HD Ready-format, dvs 1280x720. En presentation med en horisontell storlek på 10 tum ger exakt denna storlek när den är urladdad (se parametern -r 128).

Förbereder texten

Om du vill göra riktigt bra material måste ditt tal skrivas först. Jag trodde också att jag kunde tala texten utan förberedelser, speciellt eftersom jag har god erfarenhet av att föreläsa. Men det är en sak att uppträda live och en annan sak att spela in en video. Var inte lat – tiden för att skriva kommer att löna sig många gånger om.

Videoföreläsningar: unix way

Här är mitt inspelningsformat. Siffran i titeln är lika med bildnummer, avbrotten är markerade i rött. Vilken redaktör som helst är lämplig för förberedelse, men det är bättre att ta en fullfjädrad ordbehandlare - till exempel, OnlyOffice.

Röst över bilderna

Vad kan jag säga - slå på mikrofonen och skriv :)

Erfarenheten visar att inspelningskvaliteten även från den billigaste externa mikrofonen är ojämförligt bättre än från den inbyggda mikrofonen i en bärbar dator. Om du vill ha kvalitetsutrustning rekommenderar jag det här är den här artikeln.

För inspelning använde jag ljudinspelare – en mycket enkel applikation för ljudinspelning. Du kan ta det till exempel här:

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

Det viktigaste i detta steg är att namnge filerna korrekt. Namnet måste bestå av bildnummer och fragmentnummer. Fragment är numrerade med udda nummer - 1, 3, 5, etc. Så för bilden, vars text visas på bilden, kommer två filer att skapas: 002-1.mp3 и 002-3.mp3.

Om du spelade in alla videor på en gång i ett tyst rum, behöver du inte göra något mer med dem. Om du spelade in i flera steg är det bättre att utjämna volymnivån:

mp3gain -r *.mp3

Verktyg mp3gain Av någon anledning finns det inte i standardförvaret, men du kan få det här:

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

Efter allt detta måste du spela in en annan fil med tystnad. Det är nödvändigt att lägga till ett ljudspår till tysta videor: om en video har ett ljudspår och den andra inte har det, är det svårt att limma ihop dessa videor. Tystnad kan spelas in från en mikrofon, men det är bättre att skapa en fil i redigeraren Audacity. Fillängden bör vara minst en sekund (mer är möjligt), och den bör namnges tystnad.mp3

Förbereder avbrottsvideor

Här begränsas allt bara av din fantasi. Du kan använda en redigerare för att redigera videor avidemux. En gång i tiden låg den i standardförråden, men av någon anledning klipptes den ut. Detta kommer inte att stoppa oss:

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

Det finns många instruktioner för att arbeta med denna editor på Internet, och i princip är allt intuitivt. Det är viktigt att uppfylla flera villkor.

Först måste videoupplösningen matcha målvideoupplösningen. För att göra detta måste du använda två filter i "utgångsvideon": swsResize för att ändra upplösningen och "lägga till fält" för att förvandla en sovjetisk film i "smal format" till ett brett format. Alla andra filter är valfria. Till exempel, om någon inte förstår varför Sharikovs uttalande finns i fragmentet som diskuteras, med hjälp av filtret "lägg till logotyp", kan du lägga PostgreSQL-logotypen ovanpå "Hundhjärtat".

För det andra måste alla fragment använda samma bildhastighet. Jag använder 25 bilder per sekund eftersom min kamera och gamla sovjetiska filmer ger mig så mycket. Om filmen du klipper från spelades in med en annan hastighet, använd filtret Resample Video.

För det tredje måste alla fragment komprimeras med samma codec och förpackas i samma behållare. Därför i avidemux för formatet, välj video – “MPEG4 AVC (x264)", ljud -"AAC (FAAC)", Utmatningsformat - "MP4 Muxer".

För det fjärde är det viktigt att namnge de klippta videorna korrekt. Filnamnet måste bestå av bildnummer och fragmentnummer. Fragment numreras med jämna nummer, med början från 2. För den bildruta som diskuteras bör videon med avbrottet därför kallas 002-2.mp4

När videorna är klara måste du överföra dem till katalogen med fragment. inställningar avidemux skiljer sig från inställningarna ffmpeg som standard med mystiska parametrar tbr, tbn, tbc. De påverkar inte uppspelningen, men de tillåter inte att videorna limmas ihop. Så låt oss koda om:

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

Fotografera skärmsläckare

Även här är allt enkelt: du fotograferar mot bakgrunden av något smart schema, lägger de resulterande videorna i en katalog REC, och därifrån överför den till katalogen med fragment. Namnreglerna är desamma som för avbrottscitattecken, omkodningskommandot är som följer:

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

Om du planerar att starta videon med ditt tal, namnge detta fragment 000-1.mp4

Gör ramar från statiska bilder

Det är dags att redigera videor från statiska bilder och ljud. Detta görs med följande skript:

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

Observera att ljudfilens varaktighet först bestäms av verktyget soxi, och sedan redigeras videon med önskad längd. Alla rekommendationer jag hittade är enklare: istället för en flagga -t ${duration} flaggan används -kortast. Faktiskt ffmpeg bestämmer längden på mp3 mycket ungefärligt, och under redigering kan längden på ljudspåret skilja sig mycket (med en eller två sekunder) från längden på videospåret. Det spelar ingen roll om hela videon består av en enda bildruta, men när du limmar en sådan video med avbrott vid gränsen uppstår extremt obehagliga stamningseffekter.

Ett annat sätt att bestämma varaktigheten för en mp3-fil är att använda mp3 info. Hon gör misstag också, och ibland ffmpeg ger mer än mp3 info, ibland är det tvärtom, ibland ljuger de båda – jag märkte inget mönster. Och här soxi fungerar korrekt.

För att installera detta användbara verktyg, gör så här:

sudo apt-get install sox libsox-fmt-mp3

Göra övergångar mellan bilder

En övergång är en kort video där en bild förvandlas till en annan. För att göra sådana filmer tar vi bilder i par och använder imagemagick förvandla det ena till det andra:

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

Av någon anledning ville jag att bilden skulle vara spridd med prickar, och sedan skulle nästa bild monteras från prickarna, och för detta skrev jag ett manus som heter fade.pl Har imagemagick, en riktig Linux-användare kommer att skapa vilken speciell effekt som helst, men om någon gillar min idé med spridning, här är skriptet:

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

Vi monterar den färdiga videon

Nu har vi alla fragment. Gå till katalogen klipp och montera den färdiga filmen med två kommandon:

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

Njut av att titta på dina tacksamma elever!

Källa: will.com

Lägg en kommentar