Videoforedrag: unix way

Videoforedrag: unix way
Karantæne er en vidunderlig tid til at lære noget. Men som du forstår, skal nogen undervise for at nogen kan lære noget. Hvis du har en præsentation, som du vil give til et publikum på millioner og vinde verdensomspændende berømmelse, så er denne artikel noget for dig. Her finder du trin-for-trin instruktioner til, hvordan du laver en video fra din præsentation.

Vi afviser vejen til at optage "lydkommentarer" i PowerPoint og eksportere præsentationen til video som triviel og ikke give en tiendedel af de nødvendige muligheder for en virkelig cool video.

Lad os først beslutte, hvilke rammer vi har brug for:

  1. Selve dias med voiceover
  2. glideskift
  3. Citater fra populære film
  4. Flere rammer med underviserens ansigt og hans yndlingskat (valgfrit)

Oprettelse af en mappestruktur

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

Formålet med mapperne i rækkefølgen af ​​liste: film, hvorfra vi vil trække citater (clipart), fragmenter af vores fremtidige video (klip), videoer fra kameraet (rec), dias i form af billeder (slide), lyd (lyd).

Lav en præsentation i billeder

For en rigtig rødøjet Linux-bruger giver det ingen problemer at lave en præsentation i form af billeder. Lad mig lige minde dig om, at et dokument i pdf-format kan parses til billeder ved hjælp af kommandoen

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

Hvis der ikke er en sådan kommando, skal du installere pakken selv Poppler-utils (vejledning til Ubuntu; hvis du har Arch, så ved du udmærket, hvad du skal gøre uden mig).

Her og videre mener jeg, at videoen er udarbejdet i HD Ready-format, altså 1280x720. En præsentation med en vandret størrelse på 10 tommer giver præcis denne størrelse, når den er aflæsset (se -r 128-indstillingen).

Forberedelse af teksten

Hvis du vil lave rigtig godt materiale, skal din tale skrives først. Jeg tænkte også, at jeg kunne tale teksten uden forberedelse, især da jeg har god erfaring med at holde foredrag. Men det er én ting at optræde live, og en anden ting er at optage en video. Vær ikke doven - den tid, du bruger på at skrive, vil betale sig mange gange.

Videoforedrag: unix way

Her er mit optagelsesformat. Nummeret i titlen er lig med diasnummeret, afbrydelserne er fremhævet med rødt. Enhver editor er velegnet til forberedelse, men det er bedre at tage en fuldgyldig tekstbehandler - f.eks. OnlyOffice.

Stemme over diasene

Hvad kan jeg sige - tænd mikrofonen og skriv :)

Erfaringen viser, at optagekvaliteten selv fra den billigste eksterne mikrofon er usammenlignelig bedre end fra den indbyggede mikrofon på en bærbar computer. Hvis du vil have kvalitetsudstyr, anbefaler jeg det denne artikel.

Til optagelse brugte jeg audio-optager – en meget enkel applikation til lydoptagelse. Du kan for eksempel tage det her:

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

Det vigtigste ved dette trin er at navngive filerne korrekt. Navnet skal bestå af diasnummer og fragmentnummer. Fragmenter er nummereret med ulige tal - 1, 3, 5 osv. Så for diaset, hvis tekst er vist på billedet, oprettes to filer: 002-1.mp3 и 002-3.mp3.

Hvis du har optaget alle videoerne på én gang i et stille rum, behøver du ikke gøre mere med dem. Hvis du har optaget i flere trin, er det bedre at udligne lydstyrken:

mp3gain -r *.mp3

Hjælpeprogrammer mp3gain Af en eller anden grund er det ikke i standarddepoterne, men du kan få det her:

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

Efter alt dette skal du optage en anden fil med tavshed. Det er nødvendigt at tilføje et lydspor til lydløse videoer: hvis en video har et lydspor, og den anden ikke har, så er det svært at lime disse videoer sammen. Stilhed kan optages fra en mikrofon, men det er bedre at oprette en fil i editoren Audacity. Fillængden skal være mindst et sekund (mere er muligt), og den skal navngives stilhed.mp3

Forberedelse af afbrydelsesvideoer

Her er alt kun begrænset af din fantasi. Du kan bruge en editor til at redigere videoer Avidemux. Engang var det i standarddepoterne, men så blev det af en eller anden grund skåret ud. Dette vil ikke stoppe os:

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

Der er mange instruktioner til at arbejde med denne editor på internettet, og i princippet er alt der er intuitivt. Det er vigtigt at opfylde flere betingelser.

For det første skal videoopløsningen matche målvideoopløsningen. For at gøre dette skal du bruge to filtre i "outputvideoen": swsResize for at ændre opløsningen og "tilføje felter" for at omdanne en sovjetisk film i "smalt format" til et bredt format. Alle andre filtre er valgfrie. For eksempel, hvis nogen ikke forstår, hvorfor hr. Sharikovs udtalelse er i det fragment, der diskuteres, ved at bruge "tilføj logo"-filteret, kan du overlejre PostgreSQL-logoet oven på "Hundehjertet".

For det andet skal alle fragmenter bruge den samme billedhastighed. Jeg bruger 25 billeder i sekundet, fordi mit kamera og gamle sovjetiske film giver mig så meget. Hvis filmen, du klipper fra, er optaget med en anden hastighed, skal du bruge Resample Video-filteret.

For det tredje skal alle fragmenter komprimeres med det samme codec og pakkes i de samme beholdere. Derfor i Avidemux for formatet, vælg video – “MPEG4 AVC (x264)", lyd -"AAC (FAAC)", outputformat - "MP4 Muxer'.

For det fjerde er det vigtigt at navngive de klippede videoer korrekt. Filnavnet skal bestå af diasnummeret og fragmentnummeret. Fragmenter er nummereret med lige tal, startende fra 2. For det billede, der diskuteres, skal videoen med afbrydelsen derfor kaldes 002-2.mp4

Når videoerne er klar, skal du overføre dem til mappen med fragmenter. Indstillinger Avidemux afvige fra indstillingerne ffmpeg som standard med mystiske parametre tbr, tbn, tbc. De påvirker ikke afspilningen, men de tillader ikke, at videoerne limes sammen. Så lad os omkode:

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

Optagelse af pauseskærme

Også her er alt enkelt: du skyder på baggrund af et smart skema, sætter de resulterende videoer i et katalog rec, og derfra overføre det til mappen med fragmenter. Navngivningsreglerne er de samme som for interrupt-citater, omkodningskommandoen er som følger:

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

Hvis du planlægger at starte videoen med din tale, skal du navngive dette fragment 000-1.mp4

Fremstilling af rammer ud fra statiske billeder

Det er tid til at redigere videoer fra statiske billeder og lyd. Dette gøres med følgende 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

Bemærk venligst, at varigheden af ​​lydfilen først bestemmes af værktøjet soxi, og derefter redigeres videoen i den ønskede længde. Alle de anbefalinger, jeg fandt, er enklere: i stedet for et flag -t ${duration} flag bruges - korteste. Faktisk ffmpeg bestemmer længden af ​​mp3 meget cirka, og under redigering kan længden af ​​lydsporet afvige meget (med et eller to sekunder) fra længden af ​​videosporet. Det er lige meget, om hele videoen består af et enkelt billede, men når du limer sådan en video med afbrydelser ved grænsen, opstår der ekstremt ubehagelige stammeeffekter.

En anden måde at bestemme varigheden af ​​en mp3-fil er at bruge mp3 info. Hun laver også fejl, og nogle gange ffmpeg giver mere end mp3 info, nogle gange er det omvendt, nogle gange lyver de begge - jeg bemærkede ikke noget mønster. Og her soxi fungerer korrekt.

Gør dette for at installere dette nyttige værktøj:

sudo apt-get install sox libsox-fmt-mp3

Lav overgange mellem dias

En overgang er en kort video, hvor et dias bliver til et andet. For at lave sådanne videoer tager vi slides i par og vha ImageMagick forvandle det ene til det andet:

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

Af en eller anden grund ønskede jeg, at dias skulle være spredt med prikker, og så ville det næste dias blive samlet af prikkerne, og til dette skrev jeg et script kaldet fade.pl At have ImageMagick, vil en rigtig Linux-bruger skabe enhver speciel effekt, men hvis nogen kan lide min idé med spredning, er her scriptet:

#!/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 monterer den færdige video

Nu har vi alle fragmenterne. Gå til kataloget clips og saml den færdige film ved hjælp af to kommandoer:

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

Nyd at se til dine taknemmelige elever!

Kilde: www.habr.com

Tilføj en kommentar