Video přednášky: unixovým způsobem

Video přednášky: unixovým způsobem
Karanténa je skvělý čas se něco naučit. Jak však chápete, aby se někdo něco naučil, musí někdo učit. Pokud máte prezentaci, kterou chcete předat milionovému publiku a získat světovou slávu, pak je tento článek určen právě vám. Zde najdete podrobné pokyny, jak z vaší prezentace vytvořit video.

Zamítáme způsob nahrávání „audiokomentářů“ v PowerPointu a export prezentace do videa jako triviální a neposkytující desetinu možností potřebných pro skutečně skvělé video.

Nejprve se rozhodneme, jaké rámy potřebujeme:

  1. Skutečné snímky s komentářem
  2. změna snímku
  3. Citáty z populárních filmů
  4. Několik rámečků s tváří lektora a jeho oblíbenou kočkou (volitelné)

Vytvoření adresářové struktury

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

Účel adresářů v pořadí řazení: filmy, ze kterých budeme vytahovat citáty (klipart), fragmenty našeho budoucího videa (klipy), videa z kamery (rec), diapozitivy ve formě obrázků (slide), zvuk (zvuk).

Tvorba prezentace v obrazech

Pro skutečného uživatele Linuxu s červenýma očima nepředstavuje vytvoření prezentace ve formě obrázků žádný problém. Jen připomenu, že dokument ve formátu pdf lze pomocí příkazu analyzovat na obrázky

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

Pokud takový příkaz neexistuje, nainstalujte balíček sami poppler-utils (návod pro Ubuntu; pokud máte Arch, tak víte naprosto dobře, co si beze mě počít).

Zde a dále se domnívám, že video je připraveno ve formátu HD Ready, tedy 1280x720. Prezentace s horizontální velikostí 10 palců poskytuje přesně tuto velikost, když je nezatížená (viz volba -r 128).

Příprava textu

Chcete-li vytvořit opravdu skvělý materiál, musíte nejprve napsat svůj projev. Také jsem si myslel, že text zvládnu bez přípravy, zvláště když mám dobré zkušenosti s přednášením. Ale jedna věc je hrát živě a druhá věc je natočit video. Nebuďte líní – čas strávený psaním se vám mnohonásobně vyplatí.

Video přednášky: unixovým způsobem

Zde je můj formát záznamu. Číslo v názvu se rovná číslu snímku, přerušení jsou zvýrazněna červeně. Pro přípravu je vhodný jakýkoli editor, ale je lepší vzít si plnohodnotný textový procesor - např. OnlyOffice.

Hlas přes snímky

Co na to říct - zapněte mikrofon a pište :)

Praxe ukazuje, že kvalita záznamu i z nejlevnějšího externího mikrofonu je nesrovnatelně lepší než ze zabudovaného mikrofonu notebooku. Pokud chcete kvalitní vybavení, doporučuji v tomto článku.

Pro nahrávání jsem použil záznamník zvuku – velmi jednoduchá aplikace pro záznam zvuku. Převzít si to můžete například zde:

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

Hlavní věcí v tomto kroku je správně pojmenovat soubory. Název se musí skládat z čísla snímku a čísla fragmentu. Fragmenty jsou číslovány lichými čísly - 1, 3, 5 atd. Pro snímek, jehož text je na obrázku, se tedy vytvoří dva soubory: 002-1.mp3 и 002-3.mp3.

Pokud jste všechna videa nahráli najednou v tiché místnosti, už s nimi nemusíte nic dělat. Pokud jste nahráli v několika krocích, je lepší vyrovnat úroveň hlasitosti:

mp3gain -r *.mp3

Pomůcky mp3gain Z nějakého důvodu to není ve standardních úložištích, ale můžete to získat zde:

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

Po tom všem je třeba nahrát další soubor s tichostí. K tichým videím je nutné přidat zvukovou stopu: pokud jedno video zvukovou stopu má a druhé ne, pak je obtížné tato videa slepit dohromady. Ticho lze nahrávat z mikrofonu, ale je lepší vytvořit soubor v editoru smělost. Délka souboru by měla být alespoň sekunda (je možné i více) a měl by být pojmenován ticho.mp3

Příprava videí o přerušení

Zde je vše omezeno pouze vaší představivostí. K úpravě videí můžete použít editor Avidemux. Kdysi to bylo ve standardních repozitářích, ale pak bylo z nějakého důvodu vyříznuto. Tohle nás nezastaví:

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

Návodů na práci s tímto editorem je na internetu spousta a v zásadě je tam vše intuitivní. Je důležité splnit několik podmínek.

Za prvé, rozlišení videa musí odpovídat cílovému rozlišení videa. Chcete-li to provést, musíte ve „výstupním videu“ použít dva filtry: swsResize pro změnu rozlišení a „přidání polí“ pro přeměnu sovětského „úzkého formátu“ filmu na široký formát. Všechny ostatní filtry jsou volitelné. Pokud například někdo nerozumí tomu, proč je prohlášení pana Sharikova v diskutovaném fragmentu, pomocí filtru „přidat logo“ můžete logo PostgreSQL překrýt přes „Psí srdce“.

Za druhé, všechny fragmenty musí používat stejnou snímkovou frekvenci. Používám 25 snímků za sekundu, protože můj fotoaparát a staré sovětské filmy mi toho hodně dávají. Pokud byl film, ze kterého stříháte, natočen jinou rychlostí, použijte filtr Převzorkovat video.

Za třetí, všechny fragmenty musí být komprimovány stejným kodekem a zabaleny do stejných kontejnerů. Proto v Avidemux pro formát vyberte video – “MPEG4 AVC (x264)", Zvuk - "AAC (FAAC)", výstupní formát - "MP4 muxer".

Za čtvrté je důležité správně pojmenovat střižená videa. Název souboru se musí skládat z čísla snímku a čísla fragmentu. Fragmenty jsou číslovány sudými čísly, počínaje 2. Pro diskutovaný snímek by se tedy video s přerušením mělo nazývat 002-2.mp4

Poté, co jsou videa připravena, je třeba je přenést do adresáře s fragmenty. Nastavení avidemux se liší od nastavení ffmpeg standardně se záhadnými parametry tbr, tbn, tbc. Neovlivňují přehrávání, ale neumožňují slepení videí. Pojďme tedy překódovat:

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

Střílecí spořiče obrazovky

I zde je vše jednoduché: natáčíte na pozadí nějakého chytrého schématu, výsledná videa vložíte do katalogu reca odtud jej přeneste do adresáře s fragmenty. Pravidla pojmenování jsou stejná jako pro uvozovky přerušení, příkaz překódování je následující:

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

Pokud plánujete začít video svým projevem, pojmenujte tento fragment 000-1.mp4

Vytváření rámů ze statických obrázků

Je čas upravit videa ze statických obrázků a zvuku. To se provádí pomocí následujícího skriptu:

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

Vezměte prosím na vědomí, že délku zvukového souboru nejprve určí nástroj soxia poté se upraví video požadované délky. Všechna doporučení, která jsem našel, jsou jednodušší: místo vlajky -t ${duration} používá se vlajka -nejkratší... Vlastně ffmpeg určuje délku mp3 velmi přibližně a při editaci se délka zvukové stopy může značně lišit (o jednu až dvě sekundy) od délky video stopy. Nezáleží na tom, jestli se celé video skládá z jednoho snímku, ale když takové video slepíte s přerušeními na hranici, dochází k extrémně nepříjemným efektům koktání.

Dalším způsobem, jak určit dobu trvání souboru mp3, je použití mp3 info. I ona dělá chyby a občas ffmpeg dává více než mp3 info, někdy je to naopak, někdy lžou oba – nevšiml jsem si žádného vzoru. A tady soxi funguje správně.

Chcete-li nainstalovat tento užitečný nástroj, postupujte takto:

sudo apt-get install sox libsox-fmt-mp3

Provádění přechodů mezi snímky

Přechod je krátké video, ve kterém se jeden snímek změní na druhý. Abychom vytvořili taková videa, pořizujeme snímky ve dvojicích a pomocí ImageMagick transformovat jeden do druhého:

#!/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 nějakého důvodu jsem chtěl, aby byl snímek posetý tečkami, a další snímek by se pak sestavil z teček, a proto jsem napsal skript nazvaný fade.pl Mít ImageMagick, skutečný uživatel Linuxu vytvoří jakýkoli speciální efekt, ale pokud se někomu líbí můj nápad s rozptylem, zde je 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);
}

Hotové video namontujeme

Nyní máme všechny fragmenty. Přejděte do katalogu klipy a sestavte hotový film pomocí dvou příkazů:

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

Užijte si sledování svých vděčných studentů!

Zdroj: www.habr.com

Přidat komentář