Wykłady wideo: sposób uniksowy

Wykłady wideo: sposób uniksowy
Kwarantanna to wspaniały czas, żeby się czegoś nauczyć. Jednak, jak rozumiesz, aby ktoś się czegoś nauczył, ktoś musi uczyć. Jeśli masz prezentację, którą chcesz wygłosić przed wielomilionową publicznością i zyskać światową sławę, ten artykuł jest dla Ciebie. Tutaj znajdziesz instrukcję krok po kroku jak zrobić film z prezentacji.

Odrzucamy ścieżkę nagrywania „komentarzy audio” w programie PowerPoint i eksportowania prezentacji do wideo jako banalną i nie zapewniającą jednej dziesiątej możliwości potrzebnych do stworzenia naprawdę fajnego filmu.

Najpierw zdecydujmy, jakich ramek potrzebujemy:

  1. Rzeczywiste slajdy z lektorem
  2. zmiana slajdu
  3. Cytaty z popularnych filmów
  4. Kilka kadrów z twarzą lektora i jego ulubionym kotem (opcjonalnie)

Tworzenie struktury katalogów

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

Przeznaczenie katalogów w kolejności zestawienia: filmy, z których będziemy wyciągać cytaty (clipart), fragmenty naszego przyszłego wideo (klipy), filmy z kamery (rec), slajdy w formie zdjęć (slajd), dźwięk (dźwięk).

Wykonanie prezentacji na zdjęciach

Dla prawdziwego czerwonookiego użytkownika Linuksa wykonanie prezentacji w formie obrazkowej nie nastręcza żadnego problemu. Przypomnę tylko, że dokument w formacie pdf można rozbić na obrazy za pomocą polecenia

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

Jeśli nie ma takiego polecenia, zainstaluj pakiet samodzielnie poppler-utils (instrukcja dla Ubuntu; jeśli masz Archa, to doskonale wiesz, co zrobić beze mnie).

Tutaj i dalej uważam, że film jest przygotowany w formacie HD Ready, czyli 1280x720. Prezentacja o rozmiarze poziomym 10 cali daje dokładnie ten rozmiar po wyładowaniu (zobacz opcję -r 128).

Przygotowanie tekstu

Jeśli chcesz stworzyć naprawdę świetny materiał, najpierw musisz napisać swoje przemówienie. Myślałam też, że uda mi się wypowiedzieć tekst bez przygotowania, tym bardziej, że mam duże doświadczenie w prowadzeniu wykładów. Ale co innego występować na żywo, a co innego nagrywać wideo. Nie bądź leniwy – czas spędzony na pisaniu zwróci się wielokrotnie.

Wykłady wideo: sposób uniksowy

Oto mój format nagrywania. Liczba w tytule jest równa numerowi slajdu, przerwy są zaznaczone na czerwono. Do przygotowania nadaje się każdy edytor, ale lepiej jest wziąć pełnoprawny edytor tekstu - na przykład OnlyOffice.

Głos nad slajdami

Cóż mogę powiedzieć - włącz mikrofon i pisz :)

Doświadczenie pokazuje, że jakość nagrania nawet z najtańszego mikrofonu zewnętrznego jest nieporównywalnie lepsza niż z wbudowanego mikrofonu laptopa. Jeśli zależy Ci na dobrym sprzęcie to polecam tutaj jest ten artykuł.

Do nagrywania użyłem rejestrator dźwięku – bardzo prosta aplikacja do nagrywania dźwięku. Możesz to wziąć na przykład tutaj:

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

Najważniejsze na tym etapie jest prawidłowe nazwanie plików. Nazwa musi składać się z numeru slajdu i numeru fragmentu. Fragmenty są ponumerowane liczbami nieparzystymi - 1, 3, 5 itd. Zatem dla slajdu, którego tekst pokazano na obrazku, zostaną utworzone dwa pliki: 002-1.mp3 и 002-3.mp3.

Jeśli nagrałeś wszystkie filmy na raz w cichym pomieszczeniu, nie musisz z nimi robić nic więcej. Jeśli nagrywałeś w kilku krokach, lepiej wyrównać poziom głośności:

mp3gain -r *.mp3

Narzędzia mp3gain Z jakiegoś powodu nie ma go w standardowych repozytoriach, ale możesz go pobrać tutaj:

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

Po tym wszystkim musisz nagrać kolejny plik z ciszą. Do niemych filmów konieczne jest dodanie ścieżki dźwiękowej: jeśli jeden film ma ścieżkę dźwiękową, a drugi nie, wówczas trudno jest skleić te filmy. Ciszę można nagrać z mikrofonu, ale lepiej utworzyć plik w edytorze Śmiałość. Długość pliku powinna wynosić co najmniej sekundę (możliwe jest więcej) i powinien mieć nazwę cisza.mp3

Przygotowywanie filmów przerywających

Tutaj wszystko ogranicza tylko Twoja wyobraźnia. Do edycji filmów możesz używać edytora Avidemux. Dawno, dawno temu znajdował się w standardowych repozytoriach, ale z jakiegoś powodu został usunięty. To nas nie powstrzyma:

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

Instrukcji pracy z tym edytorem jest wiele w Internecie i w zasadzie wszystko jest tam intuicyjne. Ważne jest, aby spełnić kilka warunków.

Po pierwsze, rozdzielczość wideo musi odpowiadać docelowej rozdzielczości wideo. Aby to zrobić, musisz użyć dwóch filtrów w „wyjściowym wideo”: swsResize, aby zmienić rozdzielczość i „dodając pola”, aby przekształcić radziecki film „wąskiego formatu” w szeroki format. Wszystkie pozostałe filtry są opcjonalne. Przykładowo, jeśli ktoś nie rozumie, dlaczego wypowiedź pana Szarikowa znalazła się w omawianym fragmencie, korzystając z filtra „dodaj logo”, możesz nałożyć logo PostgreSQL na „Psie serce”.

Po drugie, wszystkie fragmenty muszą używać tej samej liczby klatek na sekundę. Używam 25 klatek na sekundę, bo mój aparat i stare radzieckie filmy tyle mi dają. Jeśli film, z którego wycinasz, został nakręcony z inną szybkością, użyj filtra Resample Video.

Po trzecie, wszystkie fragmenty muszą być skompresowane przy użyciu tego samego kodeka i zapakowane w tych samych pojemnikach. Dlatego w Avidemux dla formatu wybierz wideo – „MPEG4 AVC (x264)", dźwięk - "AAC (FAAC)", format wyjściowy - "Muxer MP4".

Po czwarte, ważne jest, aby poprawnie nazwać przycięte filmy. Nazwa pliku musi składać się z numeru slajdu i numeru fragmentu. Fragmenty numerowane są liczbami parzystymi, zaczynając od 2. Zatem dla omawianej klatki film z przerwą należy nazwać 002-2.mp4

Gdy filmy będą gotowe, musisz przenieść je do katalogu z fragmentami. Ustawienia avidemux różnią się od ustawień ffmpeg domyślnie z tajemniczymi parametrami tbr, tbn, tbc. Nie mają one wpływu na odtwarzanie, ale nie pozwalają na sklejanie filmów. Zatem przekodujmy:

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

Strzelanie do wygaszaczy ekranu

Tutaj także wszystko jest proste: kręcisz na tle jakiegoś sprytnego schematu, a powstałe filmy umieszczasz w katalogu rec, a stamtąd przenieś go do katalogu z fragmentami. Zasady nazewnictwa są takie same jak w przypadku cudzysłowów przerwań, polecenie przekodowania wygląda następująco:

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

Jeśli planujesz rozpocząć wideo swoją przemową, nazwij ten fragment 000-1.mp4

Tworzenie ramek ze statycznych zdjęć

Czas edytować filmy ze statycznych obrazów i dźwięku. Odbywa się to za pomocą następującego skryptu:

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

Należy pamiętać, że czas trwania pliku audio jest najpierw określany przez narzędzie soxi, a następnie edytowany jest film o wymaganej długości. Wszystkie zalecenia, które znalazłem, są prostsze: zamiast flagi -t ${czas trwania} używana jest flaga -najkrótszy. W rzeczywistości ffmpeg określa w przybliżeniu długość pliku mp3, a podczas edycji długość ścieżki audio może znacznie różnić się (o jedną lub dwie sekundy) od długości ścieżki wideo. Nie ma to znaczenia, jeśli cały film składa się z jednej klatki, ale gdy skleisz taki film z przerwami na granicy, pojawiają się niezwykle nieprzyjemne efekty zacinania się.

Innym sposobem określenia czasu trwania pliku mp3 jest użycie informacje o mp3. Ona też popełnia błędy i czasami ffmpeg daje więcej niż informacje o mp3, czasem jest na odwrót, czasem jedno i drugie kłamie – nie zauważyłem żadnej prawidłowości. I tu soxi działa poprawnie.

Aby zainstalować to przydatne narzędzie, wykonaj następujące czynności:

sudo apt-get install sox libsox-fmt-mp3

Tworzenie przejść pomiędzy slajdami

Przejście to krótki film, w którym jeden slajd zamienia się w drugi. Aby nakręcić takie filmy, robimy slajdy w parach i korzystamy z nich ImageMagick przekształcić jedno w drugie:

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

Z jakiegoś powodu chciałem, żeby slajd był porozrzucany kropkami, a potem z kropek składał się kolejny slajd i w tym celu napisałem skrypt o nazwie fade.pl Mający ImageMagick, prawdziwy użytkownik Linuksa stworzy dowolny efekt specjalny, ale jeśli komuś podoba się mój pomysł z rozpraszaniem, oto skrypt:

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

Montujemy gotowy film

Teraz mamy wszystkie fragmenty. Przejdź do katalogu Teledyski i zmontuj gotowy film za pomocą dwóch poleceń:

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

Miłego oglądania, wdzięcznym uczniom!

Źródło: www.habr.com

Dodaj komentarz