
La quarantena è un ottimo momento per imparare qualcosa di nuovo. Tuttavia, come sapete, affinché qualcuno possa apprendere, è necessario che qualcun altro insegni. Se avete una presentazione che desiderate mostrare a un pubblico di milioni di persone per guadagnare fama mondiale, questo articolo è per voi. Qui troverete una guida passo passo su come trasformare una presentazione in un video.
Escludiamo il percorso di registrazione dei "commenti audio" in PowerPoint e l'esportazione della presentazione in video, poiché è banale e non offre nemmeno un decimo delle possibilità necessarie per un video di grande qualità.
Iniziamo a definire quali clip ci serviranno:
- Le diapositive con voce narrante
- Cambio delle diapositive
- Citazioni da film famosi
- Alcune clip con il volto del relatore e un gatto adorato (opzionale)
Creiamo la struttura delle cartelle
.
├── clipart
├── clips
├── rec
├── slide
└── sound
Scopo delle cartelle nell'ordine elencato: film da cui estrarre le citazioni (clipart), frammenti del nostro futuro video (clips), riprese dalla telecamera (rec), diapositive in forma di immagini (slide), audio (sound).
Creiamo la presentazione in immagini
Per un vero fan di Linux, creare una presentazione in forma di immagini non presenta alcun problema. Ricordo solo che un documento in formato PDF può essere estratto in immagini con il comando
pdftocairo -png -r 128 ../lecture.pdfSe non hai tale comando, installa il pacchetto poppler-utils (istruzioni per Ubuntu; se hai Arch, sai già benissimo cosa fare).
Da qui in poi, considero che il video venga realizzato in formato HD Ready, ossia 1280×720. Una presentazione larga 10 pollici produce esattamente questa dimensione quando esportata (vedi il parametro -r 128).
Prepariamo il testo
Se vuoi creare un materiale davvero impressionante, prima devi scrivere il tuo discorso. Anche io pensavo di poter registrare il testo senza preparazione, soprattutto perché ho una buona esperienza di lettura delle lezioni. Ma è una cosa parlare dal vivo, un’altra registrare un video. Non risparmiare tempo – il tempo speso a scrivere il testo si ripagherà più volte.

Questo è il mio formato di registrazione. Il numero nel titolo corrisponde al numero della slide, le transizioni sono evidenziate in rosso. Puoi usare qualsiasi editor per la preparazione, ma è meglio optare per un vero elaboratore di testi – ad esempio, OnlyOffice.
Commentiamo le diapositive
Che dire - accendi il microfono e inizia a scrivere 🙂
L'esperienza dimostra che la qualità della registrazione, anche con il microfono esterno più economico, è incomparabilmente migliore rispetto a quella del microfono incorporato nel laptop. Se desideri attrezzature di qualità, ti consiglio .
Per la registrazione ho utilizzato audio-recorder è 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 importante in questo passaggio è la corretta denominazione dei file. Il nome deve consistere nel numero della diapositiva e nel numero del frammento. I frammenti sono numerati con numeri dispari: 1, 3, 5, ecc. Così, per la diapositiva il cui testo è riportato nell'immagine, verranno creati due file: 002-1.mp3 e 002-3.mp3.
Se hai registrato tutti i video in una sola volta in una stanza silenziosa, non c'è niente da fare ulteriormente. Se hai registrato in più sessioni, è meglio livellare il volume:
mp3gain -r *.mp3Utilità mp3gain per qualche motivo non è disponibile nei repository standard, ma puoi trovarla qui:
sudo add-apt-repository ppa:flexiondotorg/audio
sudo apt-get update
sudo apt-get install mp3gainDopo tutto questo, è necessario registrare un ulteriore file di silenzio. Questo è essenziale per aggiungere una traccia audio ai video silenziosi: se in un video c'è una traccia audio e in un altro no, risulta difficile unire questi video. Il silenzio può essere registrato tramite un microfono, ma è preferibile creare un file in un editor. AudacityLa lunghezza del file deve essere di almeno un secondo (può essere più lungo), e dovreste chiamarlo silence.mp3
Prepariamo i video di transizione
Qui tutto è limitato solo dalla vostra fantasia. Per modificare i video, potete utilizzare l'editor Avidemux. Una volta era disponibile nei repository standard, ma poi è stato rimosso per qualche motivo. Questo non ci ferma:
sudo add-apt-repository ppa:ubuntuhandbook1/avidemux
sudo apt-get update
sudo apt-get install avidemux2.7-qt5Ci sono molte istruzioni su come lavorare con questo editor online, e in effetti, tutto è abbastanza intuitivo. È importante rispettare alcune condizioni.
In primo luogo, la risoluzione del video deve corrispondere alla risoluzione target. A tal fine, nel "video di uscita" è necessario utilizzare due filtri: swsResize per cambiare la risoluzione e "aggiunta di bordi" per trasformare un film sovietico 'a formato stretto' in un formato widescreen. Tutti gli altri filtri sono facoltativi. Ad esempio, se qualcuno non comprende cosa intende dire il signor Sharikov nel frammento discusso, usando il filtro "aggiungi logo" è possibile sovrapporre il logo di PostgreSQL su "Cuore di cane".
In secondo luogo, in tutti i frammenti è necessario utilizzare la stessa frequenza dei fotogrammi. Uso 25 fotogrammi al secondo, perché è quella che la mia camera e i vecchi film sovietici forniscono. Se il film da cui si estrae il fotogramma è stato girato a una diversa velocità, utilizzare il filtro "risampling video".
In terzo luogo, tutti i frammenti devono essere compressi con lo stesso codec e imballati in contenitori identici. Pertanto in Avidemux per il formato scegliete video – "Mpeg4 AVC (x264)", audio – "AAC (Faac)", formato di uscita – "MP4 Muxer».
In quarto luogo, è fondamentale nominare correttamente i video tagliati. Il nome del file deve consistere nel numero della diapositiva e nel numero del frammento. I frammenti sono numerati con numeri pari, a partire da 2. Quindi, per il frame discusso, il video con il collegamento dovrebbe chiamarsi 002-2.mp4
Dopo aver preparato i video, bisogna trasferirli nella cartella dei frammenti. Le impostazioni avidemux si differenziano dalle impostazioni ffmpeg di default con parametri misteriosi tbr, tbn, tbc. Non influiscono sulla riproduzione, ma non permettono 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
doneRegistriamo le intro
Qui è tutto semplice: registratevi su uno sfondo di uno schema intelligente, mettete i video ottenuti nella cartella rec, e da lì trasferiteli nella cartella dei frammenti. Le regole di denominazione sono le stesse di quelle per le citazioni collegate, 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 pianificate di iniziare il video con la vostra presentazione, nominate questo frammento 000-1.mp4
Creiamo frame da immagini statiche
È arrivato il momento di montare i video da immagini statiche e audio. Questo si fa con 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 prima determinata dall'utility soxi, e poi si monta un video della lunghezza desiderata. Tutte le raccomandazioni che ho trovato sono più semplici: invece del flag -t ${duration} si utilizza il flag -shortest. In realtà ffmpeg determina la lunghezza mp3 in modo molto approssimativo, e durante il montaggio la lunghezza della traccia audio può differire notevolmente (di uno o due secondi) dalla lunghezza della traccia video. Questo non ha importanza se tutto il video è composto da un'unica inquadratura, ma quando si unisce un tale video con una transizione al confine si verificano effetti molto sgradevoli di interruzione.
Un altro modo per determinare la durata di un file mp3 è utilizzare mp3info. Anche questo commette errori, e a volte ffmpeg dà più di mp3info, altre volte viceversa; a volte entrambi mentono - non ho notato regolarità. Ma soxi funziona correttamente.
Per installare questa utile utility, procedi così:
sudo apt-get install sox libsox-fmt-mp3Facciamo transizioni tra le diapositive
Una transizione è un breve video in cui una diapositiva si trasforma nell'altra. Per realizzare tali video prendiamo le diapositive a coppie e con l'aiuto di imagemagick trasformiamo una nell'altra:
#!/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}A un certo punto, ho pensato che il diapositivo dovesse disperdersi in punti, e poi i punti dovessero ricomporsi nel diapositivo successivo. Per questo ho scritto uno script chiamato fade.pl Avendo imagemagick, un vero appassionato di Linux può creare qualsiasi effetto speciale, ma se a qualcuno piace la mia idea della 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 pronto
Ora abbiamo tutti i frammenti. Passiamo alla cartella clips e assembliamo il film finale 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
