
La quarantena è un ottimo momento per imparare qualcosa. Tuttavia, come ben sapete, affinché qualcuno impari qualcosa, qualcuno deve insegnare. Se avete una presentazione che volete fare a un pubblico di milioni di persone, ottenendo fama mondiale, allora questo articolo fa al caso vostro. Qui troverete istruzioni dettagliate su come realizzare un video da una presentazione.
Rifiutiamo il metodo di registrazione di "commenti audio" in PowerPoint e di esportazione della presentazione in video, perché è banale e non fornisce nemmeno un decimo delle funzionalità necessarie per realizzare un video davvero interessante.
Per prima cosa, decidiamo che tipo di riprese ci servono:
- Diapositive reali con voce fuori campo
- Cambia diapositive
- Citazioni interrotte da film popolari
- Qualche scatto del volto del docente e del suo amato gatto (facoltativo)
Creare una struttura di directory
.
├── clipart
├── clips
├── rec
├── slide
└── sound
Lo scopo delle directory nell'ordine elencato è: filmati da cui estrarremo citazioni (clipart), frammenti del nostro futuro video (clips), video dalla telecamera (rec), diapositive sotto forma di immagini (slide), audio (sound).
Realizzare una presentazione in immagini
Per un vero Linuxide dagli occhi rossi, creare una presentazione sotto forma di immagini non è un problema. Vorrei solo ricordarvi che un documento in formato PDF può essere convertito in immagini utilizzando il comando
pdftocairo -png -r 128 ../lecture.pdfSe non esiste tale comando, installare il pacchetto poppler-utils (istruzioni per Ubuntu(Se hai Arch, sai benissimo cosa fare senza di me).
Da qui in poi credo che il video sia preparato in formato HD Ready, ovvero 1280×720. Una presentazione con una dimensione orizzontale di 10 pollici fornisce esattamente questa dimensione quando scaricata (vedere il parametro -r 128).
Preparazione del testo
Se vuoi creare un materiale davvero interessante, il tuo discorso deve prima essere scritto. Ho anche pensato di poter recitare il testo senza preparazione, soprattutto perché ho una buona esperienza come docente. Ma una cosa è parlare dal vivo, un'altra è registrare un video. Non essere pigro: il tempo dedicato alla digitazione sarà ampiamente ripagato.

Ecco il mio formato per la voce. Il numero nel titolo è uguale al numero della diapositiva, le interruzioni sono evidenziate in rosso. Qualsiasi editor andrà bene per la preparazione, ma è meglio usare un elaboratore di testi completo, ad esempio: onlyoffice.
Diamo voce alle diapositive
Cosa posso dire? Accendete il microfono e scrivete :)
L'esperienza dimostra che la qualità di registrazione anche del microfono esterno più economico è incomparabilmente migliore di quella del microfono integrato di un laptop. Se desiderate un'attrezzatura di qualità, vi consiglio .
Per la registrazione ho usato registratore audio – un'applicazione molto semplice per la registrazione audio. Puoi trovarla, ad esempio, qui:
sudo add-apt-repository ppa:audio-recorder/ppa
sudo apt-get update
sudo apt-get install audio-recorderLa cosa più importante in questa fase è la corretta denominazione dei file. Il nome deve essere composto dal numero della diapositiva e dal numero del frammento. I frammenti sono numerati con numeri dispari: 1, 3, 5, ecc. Quindi, per la diapositiva, il cui testo è mostrato nell'immagine, verranno creati due file: 002-1.mp3 и 002-3.mp3.
Se hai registrato tutti i video contemporaneamente in una stanza silenziosa, non devi fare nulla. Se li hai registrati in più fasi, è meglio equalizzare il volume:
mp3gain -r *.mp3Utilità mp3gain per qualche motivo non è presente nei repository standard, ma puoi scaricarlo qui:
sudo add-apt-repository ppa:flexiondotorg/audio
sudo apt-get update
sudo apt-get install mp3gainDopo tutto questo, è necessario registrare un altro file con il silenzio. È necessario aggiungere una colonna sonora ai video senza audio: se un video ha una colonna sonora e l'altro no, è difficile unire i due video. Il silenzio può essere registrato da un microfono, ma è meglio creare un file nell'editor. La lunghezza del file dovrebbe essere almeno di un secondo (può essere più lunga) e dovrebbe essere denominato silenzio.mp3
Preparazione di video di interruzione
Qui tutto è limitato solo dalla tua immaginazione. Per modificare il video, puoi usare l'editor Avidemux. Era presente nei repository standard, ma poi per qualche motivo è stato eliminato. Questo non ci fermerà:
sudo add-apt-repository ppa:ubuntuhandbook1/avidemux
sudo apt-get update
sudo apt-get install avidemux2.7-qt5Ci sono molte istruzioni su Internet su come usare questo editor e, in linea di principio, tutto è intuitivamente chiaro. È importante rispettare diverse condizioni.
Innanzitutto, la risoluzione del video deve corrispondere alla risoluzione di destinazione. Per fare ciò, è necessario utilizzare due filtri nel campo "video for exit": swsResize per modificare la risoluzione e "add fields" per convertire il filmato sovietico in un formato più ampio. Tutti gli altri filtri sono facoltativi. Ad esempio, se qualcuno non capisce il significato dell'affermazione del signor Sharikov nel frammento in questione, è possibile utilizzare il filtro "add logo" per sovrapporre il logo di PostgreSQL a "Heart of a Dog".
In secondo luogo, è necessario utilizzare lo stesso frame rate in tutti i frammenti. Io uso 25 fps perché è quello che danno la mia macchina fotografica e le vecchie pellicole sovietiche. Se il film da cui si sta tagliando il fotogramma è stato girato a una velocità diversa, utilizzare il filtro "ricampiona video".
In terzo luogo, tutti i frammenti devono essere compressi con lo stesso codec e impacchettati negli stessi contenitori. Pertanto, in Avidemux per il formato scegli video – «Mpeg4 AVC (x264)", audio – "AAC (Faac)", formato di output - "mixer MP4'.
In quarto luogo, è importante nominare correttamente le clip tagliate. Il nome del file deve essere composto dal numero della diapositiva e dal numero del frammento. I frammenti sono numerati con numeri pari, a partire da 2. Quindi, per il fotogramma in questione, la clip con il taglio dovrebbe essere chiamata 002-2.mp4
Una volta che i video sono pronti, è necessario spostarli nella directory dei frammenti. Impostazioni Avidemux differiscono dalle impostazioni ffmpeg di default con parametri misteriosi tbr, tbn, tbc. Non influenzano la riproduzione, ma non consentono di unire i video. Pertanto, ricodifichiamo:
for f in ???-?.mp4;
do
ffmpeg -hide_banner -y -i "${f}" -c copy -r 25 -video_track_timescale 12800 ../clips/$f
doneNoi scattiamo screensaver
Anche qui tutto è semplice: si gira sullo sfondo di un qualche schema intelligente e si inseriscono i video risultanti in un catalogo rece da lì trasferirlo nella directory con i frammenti. Le regole di denominazione sono le stesse di quotes-interruptions, il comando di ricodifica è il seguente:
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
Se intendi iniziare il video con il tuo discorso, dai un nome a questo frammento 000-1.mp4
Creazione di cornici da immagini statiche
È il momento di modificare i video partendo da immagini statiche e audio. Per farlo, seguite il seguente script:
#!/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}
doneSi prega di notare che la durata del file audio viene determinata innanzitutto dall'utilità. soxi, e poi il video della lunghezza richiesta viene modificato. Tutti i consigli che ho trovato sono più semplici: invece della bandiera -t ${durata} la bandiera è usata -più breve. Infatti ffmpeg Determina la lunghezza dell'mp3 in modo molto approssimativo e, durante l'editing, la lunghezza della traccia audio può differire notevolmente (di uno o due secondi) dalla lunghezza della traccia video. Questo non importa se l'intero video è costituito da un singolo fotogramma, ma quando si incolla un video di questo tipo con un'interruzione sul bordo, si verificano effetti di stuttering estremamente spiacevoli.
Un altro modo per determinare la lunghezza di un file mp3 è usare mp3infoAnche lei a volte commette degli errori. ffmpeg dà più di mp3info, a volte il contrario, a volte entrambe le cose mentono - non ho notato alcun modello. Ma soxi funziona correttamente.
Per installare questa utile utility, procedere come segue:
sudo apt-get install sox libsox-fmt-mp3Creare transizioni tra le diapositive
La transizione è un breve video in cui una diapositiva si trasforma in un'altra. Per realizzare questo tipo di video, prendiamo le diapositive a coppie e usiamo imagemagick trasformiamo l'uno nell'altro:
#!/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}Per qualche ragione volevo che la diapositiva si disperdesse in punti e che la diapositiva successiva venisse assemblata dai punti, e per questo ho scritto uno script chiamato fade.pl avere imagemagick, un vero utente Linux creerà qualsiasi effetto speciale, ma se a qualcuno piace la mia idea di dispersione, ecco lo script:
#!/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);
}Montiamo il video finito
Ora abbiamo tutti i frammenti. Andiamo al catalogo clip e assembliamo il film finito con due comandi:
ls -1 ???-?.mp4 | gawk -e '{print "file " $0}' >list.txt
ffmpeg -y -hide_banner -f concat -i list.txt -c copy MOVIE.mp4
Buona visione ai vostri grati studenti!
Fonte: habr.com
