Videovorträge: Unix-Weg

Videovorträge: Unix-Weg
Quarantäne ist eine wunderbare Zeit, um etwas zu lernen. Wie Sie jedoch wissen, muss jemand lehren, damit jemand etwas lernen kann. Wenn Sie eine Präsentation haben, die Sie vor einem Millionenpublikum halten und weltweite Berühmtheit erlangen möchten, dann ist dieser Artikel genau das Richtige für Sie. Hier finden Sie eine Schritt-für-Schritt-Anleitung, wie Sie aus Ihrer Präsentation ein Video erstellen.

Wir lehnen den Weg, „Audiokommentare“ in PowerPoint aufzuzeichnen und die Präsentation als Video zu exportieren, als trivial ab und bieten nicht ein Zehntel der Funktionen, die für ein wirklich cooles Video erforderlich sind.

Lassen Sie uns zunächst entscheiden, welche Rahmen wir benötigen:

  1. Die eigentlichen Folien mit Voiceover
  2. Folienwechsel
  3. Zitate aus beliebten Filmen
  4. Mehrere Rahmen mit dem Gesicht des Dozenten und seiner Lieblingskatze (optional)

Erstellen einer Verzeichnisstruktur

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

Der Zweck der Verzeichnisse in der Reihenfolge der Auflistung: Filme, aus denen wir Zitate ziehen (Clipart), Fragmente unseres zukünftigen Videos (Clips), Videos von der Kamera (Rec), Dias in Form von Bildern (Dia), Ton (Klang).

Eine Präsentation in Bildern erstellen

Für einen echten Linux-Benutzer mit roten Augen stellt die Erstellung einer Präsentation in Form von Bildern kein Problem dar. Ich möchte Sie nur daran erinnern, dass ein Dokument im PDF-Format mit dem Befehl in Bilder zerlegt werden kann

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

Wenn kein solcher Befehl vorhanden ist, installieren Sie das Paket selbst poppler-utils (Anleitung für Ubuntu; wenn Sie Arch haben, wissen Sie genau, was Sie ohne mich tun können).

Hier und darüber hinaus gehe ich davon aus, dass das Video im HD Ready-Format, also 1280x720, aufbereitet ist. Eine Präsentation mit einer horizontalen Größe von 10 Zoll ergibt im entladenen Zustand genau diese Größe (siehe Parameter -r 128).

Vorbereitung des Textes

Wenn Sie wirklich großartiges Material erstellen möchten, muss zuerst Ihre Rede geschrieben werden. Ich dachte auch, dass ich den Text ohne Vorbereitung sprechen könnte, zumal ich über gute Vorlesungserfahrungen verfüge. Aber es ist eine Sache, live aufzutreten, und eine andere, ein Video aufzunehmen. Seien Sie nicht faul – die Zeit, die Sie mit dem Tippen verbringen, wird sich um ein Vielfaches auszahlen.

Videovorträge: Unix-Weg

Hier ist mein Aufnahmeformat. Die Zahl im Titel entspricht der Foliennummer, die Unterbrechungen werden rot hervorgehoben. Für die Vorbereitung eignet sich jeder Editor, besser ist es jedoch, ein vollwertiges Textverarbeitungsprogramm zu nehmen – zum Beispiel NurOffice.

Stimme über die Folien

Was soll ich sagen - Mikrofon an und schreiben :)

Die Erfahrung zeigt, dass die Aufnahmequalität selbst mit dem günstigsten externen Mikrofon unvergleichlich besser ist als mit dem eingebauten Mikrofon eines Laptops. Wenn Sie hochwertige Ausrüstung wünschen, empfehle ich diese Dieser Artikel.

Für die Aufnahme habe ich verwendet Audiorecorder – eine sehr einfache Anwendung zur Tonaufnahme. 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

Bei diesem Schritt kommt es vor allem darauf an, die Dateien richtig zu benennen. Der Name muss aus der Foliennummer und der Fragmentnummer bestehen. Fragmente werden mit ungeraden Zahlen nummeriert – 1, 3, 5 usw. Für die Folie, deren Text im Bild angezeigt wird, werden also zwei Dateien erstellt: 002-1.mp3 и 002-3.mp3.

Wenn Sie alle Videos auf einmal in einem ruhigen Raum aufgenommen haben, müssen Sie nichts weiter damit machen. Wenn Sie in mehreren Schritten aufgenommen haben, ist es besser, die Lautstärke anzugleichen:

mp3gain -r *.mp3

Dienstprogramme mp3gain Aus irgendeinem Grund ist es nicht in den Standard-Repositorys enthalten, aber Sie können es 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 aufnehmen. Es ist notwendig, Stummfilmen eine Tonspur hinzuzufügen: Wenn ein Video eine Tonspur hat und das andere nicht, ist es schwierig, diese Videos zusammenzufügen. Stille kann über ein Mikrofon aufgenommen werden, besser ist es jedoch, eine Datei im Editor zu erstellen Audacity. Die Länge der Datei sollte mindestens eine Sekunde betragen (mehr ist möglich) und sie sollte benannt sein Stille.mp3

Vorbereitung von Unterbrechungsvideos

Hier ist alles nur durch Ihre Vorstellungskraft begrenzt. Zum Bearbeiten von Videos können Sie einen Editor verwenden Avidemux. Es war einmal in den Standard-Repositorys, aber dann wurde es aus irgendeinem Grund herausgeschnitten. Das wird uns nicht aufhalten:

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

Im Internet gibt es viele Anleitungen zum Arbeiten mit diesem Editor und im Prinzip ist dort alles intuitiv. Es ist wichtig, mehrere Bedingungen zu erfüllen.

Zunächst muss die Videoauflösung mit der Zielvideoauflösung übereinstimmen. Dazu müssen Sie im „Ausgabevideo“ zwei Filter verwenden: swsResize, um die Auflösung zu ändern, und „Halbbilder hinzufügen“, um einen sowjetischen „Schmalformat“-Film in ein Breitformat umzuwandeln. Alle anderen Filter sind optional. Wenn beispielsweise jemand nicht versteht, warum die Aussage von Herrn Sharikov in dem diskutierten Fragment enthalten ist, können Sie mit dem Filter „Logo hinzufügen“ das PostgreSQL-Logo über das „Hundeherz“ legen.

Zweitens müssen alle Fragmente die gleiche Bildrate verwenden. Ich verwende 25 Bilder pro Sekunde, weil meine Kamera und alte sowjetische Filme mir so viel liefern. Wenn der Film, aus dem Sie schneiden, mit einer anderen Geschwindigkeit aufgenommen wurde, verwenden Sie den Filter „Resample Video“.

Drittens müssen alle Fragmente mit demselben Codec komprimiert und in denselben Containern verpackt werden. Daher in Avidemux Wählen Sie als Format „Video“ aus – „MPEG4 AVC (x264)", Audio - "AAC (FAAC)", Ausgabeformat - "MP4-Muxer".

Viertens ist es wichtig, die geschnittenen Videos richtig zu benennen. Der Dateiname muss aus der Foliennummer und der Fragmentnummer bestehen. Fragmente werden mit geraden Zahlen beginnend bei 2 nummeriert. Daher sollte für den betrachteten Frame das Video mit der Unterbrechung aufgerufen werden 002-2.mp4

Nachdem die Videos fertig sind, müssen Sie sie mit Fragmenten in das Verzeichnis übertragen. Einstellungen Avidemux von den Einstellungen abweichen ffmpeg standardmäßig mit mysteriösen Parametern tbr, tbn, tbc. Sie haben keinen Einfluss auf die Wiedergabe, ermöglichen jedoch kein Zusammenkleben der Videos. Also lasst uns umkodieren:

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

Bildschirmschoner aufnehmen

Auch hier ist alles einfach: Sie drehen vor dem Hintergrund eines cleveren Schemas und stellen die resultierenden Videos in einen Katalog rec, und von dort mit Fragmenten in das Verzeichnis übertragen. Die Benennungsregeln sind die gleichen wie für Interrupt-Anführungszeichen, der Umkodierungsbefehl 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 planen, das Video mit Ihrer Rede zu beginnen, benennen Sie dieses Fragment 000-1.mp4

Rahmen aus statischen Bildern erstellen

Es ist Zeit, Videos aus statischen Bildern und Ton zu bearbeiten. 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 zunächst vom Dienstprogramm bestimmt wird soxi, und dann wird das Video in der gewünschten Länge bearbeitet. Alle Empfehlungen, die ich gefunden habe, sind einfacher: anstelle einer Flagge -t ${Dauer} Flagge verwendet wird -kürzeste. Tatsächlich ffmpeg bestimmt die Länge von MP3 sehr ungefähr und während der Bearbeitung kann die Länge der Audiospur stark (um ein oder zwei Sekunden) von der Länge der Videospur abweichen. Das macht zwar nichts, wenn das gesamte Video aus einem einzigen Frame besteht, aber wenn man ein solches Video mit Unterbrechungen am Rand zusammenklebt, kommt es zu äußerst unangenehmen Ruckler-Effekten.

Eine andere Möglichkeit, die Dauer einer MP3-Datei zu bestimmen, ist die Verwendung von mp3-info. Sie macht auch Fehler, und zwar manchmal ffmpeg gibt mehr als mp3-info, manchmal ist es umgekehrt, manchmal lügen beide – mir ist kein Muster aufgefallen. Und hier soxi Funktioniert korrekt.

Gehen Sie wie folgt vor, um dieses nützliche Dienstprogramm zu installieren:

sudo apt-get install sox libsox-fmt-mp3

Übergänge zwischen Folien erstellen

Ein Übergang ist ein kurzes Video, in dem eine Folie in eine andere übergeht. Um solche Videos zu erstellen, nehmen wir paarweise Folien auf und verwenden sie imagemagick eins in das andere umwandeln:

#!/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 mit Punkten übersät ist und dann die nächste Folie aus den Punkten zusammengesetzt wird, und dafür habe ich ein Skript namens geschrieben fade.pl Haben imagemagick, ein echter Linux-Benutzer wird jeden Spezialeffekt erstellen, aber wenn jemand meine Idee mit der Streuung 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 ("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);
}

Wir montieren das fertige Video

Jetzt haben wir alle Fragmente. Gehen Sie zum Katalog Clips und bauen Sie den fertigen Film mit zwei Befehlen zusammen:

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 Zuschauen, Ihren dankbaren Schülern!

Source: habr.com

Kommentar hinzufügen