Videovorträge: Unix-Weg


Quarantäne ist eine wunderbare Zeit, um etwas zu lernen. Wie Sie jedoch wissen, muss jemand unterrichten, damit jemand etwas lernen kann. Wenn Sie eine Präsentation haben, mit der Sie vor einem millionsten Publikum sprechen und Weltruhm erlangen möchten, dann ist dieser Artikel genau das Richtige für Sie. Hier finden Sie schrittweise Anleitungen zum Erstellen eines Videos aus der Präsentation.

Wir markieren die Art und Weise, wie „Soundkommentare“ in PowerPoint aufgezeichnet und die Präsentation in Video exportiert werden, als trivial und geben nicht ein Zehntel der Möglichkeiten an, die für ein wirklich cooles Video erforderlich sind.

Zunächst werden wir entscheiden, welche Frames wir benötigen:

  1. Eigentlich gleitet mit einem Voiceover
  2. Folienwechsel
  3. Unterbrechen Sie Zitate aus beliebten Filmen
  4. Einige Bilder mit der Physiognomie des Dozenten und der Lieblingskatze (optional)


Erstellen Sie eine Verzeichnisstruktur


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

Zuordnung von Katalogen in der Reihenfolge der Auflistung: Filme, aus denen wir Zitate (Cliparts) ziehen, Fragmente unseres zukünftigen Videos (Clips), Videos von der Kamera (Aufnahme), Bildfolien (Folie), Ton (Ton).

Präsentation in Bildern


Für einen echten rotäugigen Linuxoid ist das Erstellen einer Präsentation in Form von Bildern kein Problem. Ich möchte Sie nur daran erinnern, dass ein PDF-Dokument mit dem Befehl in Bilder analysiert werden kann

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

Wenn es keinen solchen Befehl gibt, installieren Sie das Paket poppler-utils (Anweisungen für Ubuntu; wenn Sie Arch haben, wissen Sie bereits, was Sie ohne mich tun sollen).

Im Folgenden glaube ich, dass das Video im HD-Ready-Format vorbereitet wird, d. H. 1280 × 720. Eine Präsentation mit einer horizontalen Größe von 10 Zoll ergibt beim Entladen genau diese Größe (siehe Option -r 128).

Wir bereiten den Text vor


Wenn Sie wirklich cooles Material machen möchten, muss Ihre Rede zuerst geschrieben werden. Ich dachte auch, dass ich den Text ohne Vorbereitung sagen könnte, zumal ich eine gute Vorlesungserfahrung habe. Aber es ist eine Sache, live aufzutreten und eine andere, Videos aufzunehmen. Seien Sie nicht faul - die Zeit, die Sie für das Tippen aufgewendet haben, zahlt sich mehr als einmal aus.



Hier ist mein Aufnahmeformat. Die Nummer in der Überschrift entspricht der Nummer der Folie, Unterbrechungen werden rot hervorgehoben. Jeder Editor ist für die Vorbereitung geeignet, aber es ist besser, ein vollwertiges Textverarbeitungsprogramm zu verwenden - zum Beispiel OnlyOffice .

Sounding Folien


Was soll ich sagen - Mikrofon einschalten und schreiben :) Die

Erfahrung zeigt, dass die Aufnahmequalität selbst mit dem billigsten externen Mikrofon unvergleichlich besser ist als mit dem eingebauten Mikrofon des Laptops. Wenn Sie hochwertige Geräte wünschen, empfehle ich diesen Artikel .

Für die Aufnahme habe ich einen Audiorecorder verwendet - eine sehr einfache Aufnahmeanwendung. Sie können es zum Beispiel hier nehmen:

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

Die Hauptsache in diesem Schritt ist die richtige Benennung der Dateien. Der Name muss aus einer Foliennummer und einer Fragmentnummer bestehen. Fragmente werden mit ungeraden Zahlen nummeriert - 1, 3, 5 usw. Für die Folie, deren Text im Bild angezeigt wird, werden zwei Dateien erstellt: 002-1.mp3 und 002-3.mp3 .

Wenn Sie alle Videos gleichzeitig in einem ruhigen Raum aufgenommen haben, können Sie nichts damit anfangen. Wenn Sie in mehreren Stufen aufgenommen haben, ist es besser, den Lautstärkepegel auszugleichen:

mp3gain -r *.mp3

Aus irgendeinem Grund befinden sich mp3gain- Dienstprogramme nicht in den Standard-Repositorys, aber Sie können sie hier herunterladen :

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

Nach all dem müssen Sie eine weitere Datei mit Stille schreiben. Es ist notwendig, stillen Clips einen Soundtrack hinzuzufügen: Wenn in einem Clip ein Soundtrack und in dem anderen kein Soundtrack vorhanden ist, ist es schwierig, diese Clips zu kleben. Die Stille kann über das Mikrofon aufgezeichnet werden. Es ist jedoch besser, eine Datei im Audacity- Editor zu erstellen . Die Datei muss mindestens eine Sekunde lang (länger) sein und Silence.mp3 sollte aufgerufen werden

Pannenrollen kochen


Alles hier ist nur durch Ihre Vorstellungskraft begrenzt. Sie können das Video mit dem Avidemux- Editor bearbeiten . Einmal war es in Standard-Repositories, aber dann wurde es aus irgendeinem Grund ausgesägt. Das wird uns nicht aufhalten:

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

Anleitung zur Arbeit mit diesem Editor auf See, ja, im Prinzip ist dort alles intuitiv. Es ist wichtig, mehrere Bedingungen zu beachten.

Erstens muss die Auflösung des Films mit der Zielauflösung des Films übereinstimmen. Dazu müssen Sie im "Video zum Beenden" zwei Filter verwenden: swsResize, um die Auflösung zu ändern, und "Felder hinzufügen", um den sowjetischen "Schmalformat" -Film zu einem Breitformat zu machen. Alle anderen Filter sind optional. Wenn beispielsweise jemand nicht versteht, was die Aussage von Herrn Sharikov in dem diskutierten Fragment ist, können Sie mithilfe des Filters "Logo hinzufügen" das PostgreSQL-Logo über "Hundeherz" hinzufügen.

Zweitens müssen alle Fragmente dieselbe Bildrate verwenden. Ich benutze 25 Bilder pro Sekunde, weil meine Kamera und alte sowjetische Filme so viel geben. Wenn der Film, aus dem Sie das Bild ausgeschnitten haben, mit einer anderen Geschwindigkeit aufgenommen wurde, verwenden Sie den Filter „Video neu abtasten“.

Drittens müssen alle Fragmente mit demselben Codec komprimiert und in denselben Behältern verpackt werden. Wählen Sie daher in Avidemux für das Format das Video " Mpeg4 AVC (x264) ", das Audio " AAC (Faac) " und das Ausgabeformat " MP4 Muxer " aus.

Viertens ist es wichtig, die geschnittenen Clips richtig zu benennen. Der Dateiname sollte aus einer Foliennummer und einer Fragmentnummer bestehen. Fragmente werden mit geraden Zahlen nummeriert, beginnend mit 2. Für den besprochenen Frame sollte der Clip mit dem Zerhacken 002-2.mp4 heißen .

Nachdem die Clips fertig sind, müssen Sie sie in das Verzeichnis mit den Fragmenten übertragen. Die Avidemux- Einstellungen unterscheiden sich von den Standardeinstellungen für ffmpeg durch die mysteriösen Parameter tbr, tbn, tbc. Sie beeinträchtigen die Reproduktion nicht, ermöglichen jedoch nicht das Verkleben der Walzen. Deshalb kodieren wir neu:

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

Wir entfernen Bildschirmschoner


Hier ist auch alles einfach: Nehmen Sie im Hintergrund eines cleveren Schemas auf, legen Sie die empfangenen Videos in das Rec- Verzeichnis und übertragen Sie sie von dort mit Fragmenten in das Verzeichnis. Die Benennungsregeln sind die gleichen wie für Anführungszeichen. Der Umcodierungsbefehl lautet wie folgt:

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

Wenn Sie das Video mit Ihrer Rede starten möchten , benennen Sie dieses Fragment 000-1.mp4

Wir machen Rahmen aus statischen Bildern


Es ist Zeit, Clips aus statischen Bildern und Ton zu mounten. Dies geschieht mit diesem 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

Bitte beachten Sie, dass zuerst die Dauer der Audiodatei vom Dienstprogramm soxi bestimmt wird und dann das Video mit der gewünschten Länge gemountet wird. Alle Empfehlungen, die ich gefunden habe, sind einfacher: Anstelle des Flags -t $ {duration} wird das Flag -shortest verwendet . Tatsächlich bestimmt ffmpeg die Länge der MP3-Datei sehr ungefähr, und während der Installation kann sich die Länge der Audiospur stark (ein bis zwei Sekunden) von der Länge der Videospur unterscheiden. Es spielt keine Rolle, ob das gesamte Video aus einem einzelnen Frame besteht. Wenn Sie jedoch einen solchen Film mit einem Bruch an der Grenze kleben, treten äußerst unangenehme Effekte mit Stottern auf.

Eine andere Möglichkeit, die Dauer einer MP3-Datei zu bestimmen, ist die Verwendung von mp3info . Sie irrt sich auch und manchmalffmpeg bietet mehr als mp3info , manchmal umgekehrt, manchmal lügen beide - ich habe keine Muster bemerkt. Aber Soxi funktioniert richtig.

Gehen Sie folgendermaßen vor, um dieses nützliche Dienstprogramm zu installieren:

sudo apt-get install sox libsox-fmt-mp3

Übergänge zwischen Folien vornehmen


Übergang - ein kurzes Video, in dem eine Folie in eine andere verwandelt wird. Um solche Videos zu erstellen , nehmen Sie Folien paarweise und verwandeln Sie sie mit imagemagick ineinander:

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

Aus irgendeinem Grund wollte ich, dass die Folie gepunktet wird, und dann wurde die nächste Folie aus den Punkten zusammengesetzt. Dafür habe ich ein Skript namens fade.pl geschrieben. Mit imagemagick funktioniert ein echtes Linuxoid für jeden Spezialeffekt, aber wenn jemand meine Idee, verstreut zu sein, mag, Hier ist das 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 ("P3\n%d %d\n255\n",$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 0\n" : "255 255 255\n" for (1..$pixsize);
        }
      }
      print PICTURE ($l) for (1..$pixsize);
    }
  }
  close(PICTURE);
}

Montieren Sie die fertige Walze


Jetzt haben wir alle Fragmente. Wir gehen zum Clips- Verzeichnis und sammeln den fertigen Film mit zwei Befehlen:

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

Viel Spaß beim Betrachten Ihrer dankbaren Schüler!

All Articles