Video-Vorträge: Unix Way

Video-Vorträge: Unix Way
Quarantäne ist eine wunderbare Zeit, um etwas zu lernen. Doch, wie Sie verstehen, muss jemand lehren, damit jemand etwas lernt. Wenn Sie eine Präsentation haben, mit der Sie vor einem Millionenpublikum auftreten und weltberühmt werden möchten, dann ist dieser Artikel für Sie. Hier finden Sie eine Schritt-für-Schritt-Anleitung, wie Sie aus einer Präsentation ein Video erstellen.

Wir verwerfen den Weg, „Audio Kommentare“ in PowerPoint aufzunehmen und die Präsentation als Video zu exportieren, da dieser trivial ist und nicht im Entferntesten die Möglichkeiten bietet, die für ein wirklich tolles Video nötig sind.

Beginnen wir damit, welche Aufnahmen wir benötigen:

  1. Die eigentlichen Folien mit Voice-over
  2. Folienwechsel
  3. Zitate aus beliebten Filmen als Zwischenschnitte
  4. Einige Szenen mit dem Dozenten und seiner Lieblingskatze (optional)

Wir erstellen die Ordnerstruktur

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

Zweck der Ordner in der aufgezählten Reihenfolge: Filme, aus denen wir Zitate entnehmen (clipart), Fragmente unseres zukünftigen Videos (clips), Aufnahmen von der Kamera (rec), Folien in Bildform (slide), Ton (sound).

Wir erstellen die Präsentation in Bildern

Für einen echten Red-Eye-Linux-Fan ist es kein Problem, eine Präsentation in Bildform zu erstellen. Ich möchte nur daran erinnern, dass ein Dokument im PDF-Format mit dem Befehl

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

Wenn ein solcher Befehl nicht vorhanden ist, installieren Sie das Paket poppler-utils (Anleitung für Ubuntu; wenn Sie Arch verwenden, wissen Sie auch ohne mich, was zu tun ist).

Hier und im Folgenden gehe ich davon aus, dass das Video im HD Ready-Format vorbereitet wird, d. h. 1280×720. Eine Präsentation mit einer Breite von 10 Zoll ergibt genau diese Größe (siehe Parameter -r 128).

Text vorbereiten

Wenn Sie wirklich großartiges Material erstellen möchten, sollten Sie Ihre Rede vorher aufschreiben. Ich dachte auch, ich könnte den Text ohne Vorbereitung einsprechen, zumal ich gute Erfahrung im Halten von Vorträgen habe. Aber es ist ein Unterschied, live zu sprechen, und etwas anderes ist, ein Video aufzunehmen. Seien Sie nicht faul – die Zeit, die Sie für das Tippen des Textes aufwenden, wird sich vielfach auszahlen.

Video-Vorträge: Unix Way

So nehme ich auf. Die Nummer in der Überschrift entspricht der Foliennummer, rote markierte Abschnitte sind Übergänge. Für die Vorbereitung eignet sich jeder Editor, aber es ist besser, einen vollwertigen Textverarbeiter zu verwenden – zum Beispiel OnlyOffice.

Folien vertonen

Was soll man sagen – einfach das Mikrofon einschalten und loslegen 🙂

Die Erfahrung zeigt, dass die Aufnahmequalität selbst mit dem günstigsten externen Mikrofon ungleich besser ist als mit dem integrierten Mikrofon eines Laptops. Wenn du auf qualitativ hochwertige Ausrüstung Wert legst, empfehle ich dir diesen Artikel.

Für die Aufnahme habe ich verwendet audio-recorder – eine ganz einfache Anwendung zur Tonaufnahme. Du kannst sie zum Beispiel hier herunterladen:

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

Das Wichtigste in diesem Schritt ist die richtige Benennung der Dateien. Der Name sollte aus der Foliennummer und der Fragmentnummer bestehen. Die Fragmente werden mit ungeraden Zahlen nummeriert – 1, 3, 5 usw. So würden für die Folie, deren Text im Bild dargestellt ist, zwei Dateien erstellt: 002-1.mp3 und 002-3.mp3.

Wenn du alle Clips auf einmal in einem ruhigen Zimmer aufgenommen hast, musst du anschließend nichts weiter damit tun. Wenn du sie in mehreren Durchgängen aufgenommen hast, ist es besser, die Lautstärke auszugleichen:

mp3gain -r *.mp3

Utilities mp3gain ist aus irgendeinem Grund nicht in den Standard-Repositorys zu finden, du kannst sie jedoch hier herunterladen:

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

Nach alledem muss eine weitere Datei mit Stille aufgenommen werden. Sie ist notwendig, um einen Audiotrack zu lautlosen Clips hinzuzufügen: Wenn ein Clip einen Audiotrack hat und der andere nicht, ist es schwierig, diese Clips zusammenzufügen. Stille kann mit einem Mikrofon aufgenommen werden, aber es ist besser, die Datei im Editor zu erstellen. Audacity. Die Dateilänge sollte mindestens eine Sekunde betragen (kann länger sein), und es ist sinnvoll, ihr einen Namen zu geben. silence.mp3

Wir bereiten Übergangsvideos vor.

Hier sind nur Ihrer Fantasie Grenzen gesetzt. Zum Bearbeiten von Videos kann der Editor genutzt werden, Avidemux. Früher war er in den Standard-Repositories enthalten, wurde dann jedoch aus irgendeinem Grund entfernt. Das hält uns nicht auf:

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

Es gibt unzählige Anleitungen zu diesem Editor im Internet, und grundsätzlich ist alles recht intuitiv verständlich. Es ist wichtig, ein paar Bedingungen zu beachten.

Zunächst muss die Auflösung des Videos mit der Zielauflösung übereinstimmen. Dazu sollten im Bereich "Video für den Export" zwei Filter verwendet werden: swsResize zur Änderung der Auflösung und "Felder hinzufügen", um aus dem sowjetischen "schmalformatigen" Film ein Breitformat zu erstellen. Alle anderen Filter sind optional. Wenn jemand zum Beispiel nicht versteht, was Herr Scharikow in dem besprochenen Fragment ausdrücken möchte, kann man mit dem Filter "Logo hinzufügen" das PostgreSQL-Logo über "Herz der Dogge" legen.

Zweitens muss in allen Fragmenten die gleiche Bildrate verwendet werden. Ich benutze 25 Bilder pro Sekunde, weil meine Kamera und alte sowjetische Filme genau diese Rate haben. Wenn der Film, aus dem Sie das Bild ausschneiden, mit einer anderen Geschwindigkeit aufgenommen wurde, verwenden Sie den Filter "Video neu sampeln".

Drittens müssen alle Fragmente mit demselben Codec komprimiert und in identischen Containern verpackt sein. Daher wählen Sie für Avidemux das Format Video – „Mpeg4 AVC (x264)“, Audio – „AAC (Faac)“, Ausgabeformat – „MP4 Muxer».

Viertens ist es wichtig, die geschnittenen Clips richtig zu benennen. Der Dateiname sollte aus der Foliennummer und der Fragmentnummer bestehen. Die Fragmente werden mit geraden Zahlen ab 2 nummeriert. So sollte der Clip mit der Überleitung für den besprochenen Frame heißen 002-2.mp4

Nachdem die Clips fertig sind, müssen sie in das Verzeichnis mit den Fragmenten verschoben werden. Die Einstellungen avidemux unterscheiden sich von den Einstellungen ffmpeg durch die mysteriösen Parameter tbr, tbn, tbc. Diese beeinflussen die Wiedergabe nicht, hindern jedoch am Zusammenfügen der Clips. Daher 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 nehmen die Intros auf

Auch hier ist alles einfach: Sie filmen sich vor einem intelligenten Diagramm, legen die aufgenommenen Clips in das Verzeichnis rec, und von dort verschieben Sie sie in das Verzeichnis mit den Fragmenten. Die Benennungsregeln sind dieselben wie für Zitat-Überleitungen, das Transkodierungsskript lautet:

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 planen, das Video mit Ihrem Auftritt zu beginnen, benennen Sie dieses Fragment 000-1.mp4

Wir erstellen Bilder aus statischen Bildern

Es ist Zeit, Videos aus statischen Bildern und Ton zu montieren. Dies geschieht mit folgendem 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 die Dauer der Audiodatei zuerst von dem Tool bestimmt wird soxi, und dann das Video der benötigten Länge zusammengeschnitten wird. Alle Empfehlungen, die ich gefunden habe, sind einfacher: anstelle des Flags -t ${duration} wird das Flag -shortestverwendet. Tatsächlich ffmpeg bestimmt die Länge der MP3 sehr grob, und beim Schneiden kann die Länge der Audiospur von der Länge der Videospur stark (um ein oder zwei Sekunden) abweichen. Das macht nichts, wenn das ganze Video aus einem einzigen Frame besteht, aber beim Zusammenfügen eines solchen Clips an der Grenze treten äußerst unangenehme Sprünge auf.

Ein weiterer Weg, um die Dauer einer MP3-Datei zu bestimmen, besteht darin, mp3infozu verwenden. Auch sie macht Fehler, manchmal ffmpeg gibt sie mehr an als mp3info, manchmal weniger, manchmal lügen beide – ein Muster habe ich nicht bemerkt. Aber soxi funktioniert korrekt.

Um dieses nützliche Tool zu installieren, machen Sie Folgendes:

sudo apt-get install sox libsox-fmt-mp3

Übergänge zwischen Folien erstellen

Ein Übergang ist ein kurzer Clip, in dem eine Folie in eine andere verwandelt wird. Um solche Clips herzustellen, nehmen wir die Folien paarweise und verwandeln eine mit Hilfe von imagemagick in die andere:

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

Ich hatte aus irgendeinem Grund den Wunsch, dass die Folie in Punkte zerfällt und dann aus den Punkten die nächste Folie entsteht. Dafür habe ich ein Skript mit dem Namen fade.pl Wenn man imagemagick, ein echter Linux-Enthusiast kann jede Spezialeffekt kreieren, aber wenn jemand meine Idee mit dem Zerfallen mag, dann ist hier 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 ("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);
}

Den fertigen Clip montieren

Jetzt haben wir alle Fragmente. Gehen wir in das Verzeichnis clips und erstellen 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 Anschauen für Ihre dankbaren Schüler!

Quelle: habr.com

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster