Lezioni video: metodo unix

Lezioni video: metodo unix
La quarantena è un momento meraviglioso per imparare qualcosa. Tuttavia, come capisci, affinché qualcuno impari qualcosa, qualcuno deve insegnare. Se hai una presentazione che vuoi fare davanti a un pubblico di milioni di persone e ottenere fama mondiale, allora questo articolo fa per te. Qui troverai le istruzioni passo passo su come realizzare un video dalla tua presentazione.

Riteniamo che il percorso di registrazione di "commenti audio" in PowerPoint e di esportazione della presentazione in video sia banale e non fornisca un decimo delle funzionalità necessarie per un video davvero interessante.

Innanzitutto, decidiamo di quali frame abbiamo bisogno:

  1. Le diapositive reali con voce fuori campo
  2. cambio diapositiva
  3. Citazioni da film famosi
  4. Diverse cornici con il volto del docente e il suo gatto preferito (facoltativo)

Creazione di una struttura di directory

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

Lo scopo delle directory nell'ordine di elencazione: film da cui estrarremo citazioni (clipart), frammenti dei nostri futuri video (clip), video dalla fotocamera (rec), diapositive sotto forma di immagini (slide), suoni (suono).

Realizzare una presentazione in immagini

Per un vero utente Linux con gli occhi rossi, realizzare una presentazione sotto forma di immagini non presenta alcun problema. Permettetemi solo di ricordarvi che un documento in formato pdf può essere analizzato in immagini utilizzando il comando

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

Se non esiste tale comando, installa tu stesso il pacchetto poppler-utils (istruzioni per Ubuntu; se hai Arch, allora sai perfettamente cosa fare senza di me).

Anche qui credo che il video sia preparato in formato HD Ready, cioè 1280x720. Una presentazione con una dimensione orizzontale di 10 pollici dà esattamente questa dimensione quando viene scaricata (vedere l'opzione -r 128).

Preparazione del testo

Se vuoi creare materiale davvero eccezionale, il tuo discorso deve essere scritto prima. Pensavo anche che avrei potuto parlare il testo senza preparazione, soprattutto perché ho una buona esperienza come docente. Ma una cosa è esibirsi dal vivo, un’altra è registrare un video. Non essere pigro: il tempo trascorso a digitare ti ripagherà molte volte.

Lezioni video: metodo unix

Ecco il mio formato di registrazione. Il numero nel titolo è uguale al numero della diapositiva, le interruzioni sono evidenziate in rosso. Qualsiasi editor è adatto alla preparazione, ma è meglio prendere un elaboratore di testi completo, ad esempio onlyoffice.

Voce sulle diapositive

Cosa posso dire: accendi il microfono e scrivi :)

L'esperienza dimostra che la qualità di registrazione anche dal microfono esterno più economico è incomparabilmente migliore rispetto al microfono integrato di un laptop. Se vuoi un'attrezzatura di qualità, la consiglio questo articolo.

Per la registrazione ho usato registratore audio – un'applicazione molto semplice per la registrazione del suono. Puoi prenderlo, ad esempio, qui:

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

La cosa principale in questo passaggio è nominare correttamente i 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 tranquilla, non dovrai fare altro. Se hai registrato in più passaggi, è meglio equalizzare il livello del volume:

mp3gain -r *.mp3

Utilità mp3gain Per qualche motivo non è nei repository standard, ma puoi trovarlo qui:

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

Dopo tutto questo, devi registrare un altro file con silenzio. È necessario aggiungere una colonna sonora ai video muti: se un video ha una colonna sonora e un altro no, allora è difficile incollare insieme questi video. Il silenzio può essere registrato da un microfono, ma è meglio creare un file nell'editor . La lunghezza del file dovrebbe essere almeno un secondo (è possibile anche di più) e dovrebbe avere un nome silenzio.mp3

Preparazione di video di interruzione

Qui tutto è limitato solo dalla tua immaginazione. Puoi utilizzare un editor per modificare i video Avidemux. Una volta era nei repository standard, ma poi per qualche motivo è stato tagliato. Questo non ci fermerà:

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

Ci sono molte istruzioni per lavorare con questo editor su Internet e, in linea di principio, tutto è intuitivo. È importante soddisfare diverse condizioni.

Innanzitutto, la risoluzione video deve corrispondere alla risoluzione video di destinazione. Per fare ciò, è necessario utilizzare due filtri nel "video di output": swsResize per modificare la risoluzione e "aggiunta di campi" per trasformare un film sovietico di "formato stretto" in un formato ampio. Tutti gli altri filtri sono facoltativi. Ad esempio, se qualcuno non capisce perché l'affermazione del signor Sharikov si trova nel frammento in discussione, utilizzando il filtro "aggiungi logo", è possibile sovrapporre il logo PostgreSQL al "Cuore di cane".

In secondo luogo, tutti i frammenti devono utilizzare lo stesso frame rate. Uso 25 fotogrammi al secondo perché la mia macchina fotografica e le vecchie pellicole sovietiche mi danno tanto. Se il film da cui stai tagliando è stato girato a una velocità diversa, utilizza il filtro Ricampiona video.

In terzo luogo, tutti i frammenti devono essere compressi con lo stesso codec e confezionati negli stessi contenitori. Pertanto dentro Avidemux per il formato, seleziona video – “Mpeg4AVC (x264)", Audio - "CAA (FAAC)", formato di output - "mixer MP4'.

In quarto luogo, è importante nominare correttamente i video tagliati. Il nome del file deve essere composto dal numero della diapositiva e dal numero del frammento. I frammenti vengono numerati con numeri pari, a partire da 2. Pertanto, per il fotogramma in questione, il video con l'interruzione dovrebbe essere chiamato 002-2.mp4

Dopo che i video sono pronti, devi trasferirli nella directory con i frammenti. Impostazioni Avidemux differiscono dalle impostazioni ffmpeg per impostazione predefinita con parametri misteriosi tbr, tbn, tbc. Non influiscono sulla riproduzione, ma non consentono di incollare insieme i video. Quindi ricodifichiamo:

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

Salvaschermi di ripresa

Anche qui tutto è semplice: giri sullo sfondo di uno schema intelligente, metti i video risultanti in un catalogo rece da lì trasferiscilo nella directory con i frammenti. Le regole di denominazione sono le stesse delle virgolette di interruzione, 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 hai intenzione di iniziare il video con il tuo discorso, dai un nome a questo frammento 000-1.mp4

Realizzazione di cornici da immagini statiche

È ora di modificare video da immagini e suoni statici. Questo viene fatto 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}
done

Tieni presente che la durata del file audio viene determinata innanzitutto dall'utilità soxi, quindi viene modificato il video della lunghezza richiesta. Tutti i consigli che ho trovato sono più semplici: invece di una bandiera -t ${durata} viene utilizzata la bandiera -più breve. Infatti ffmpeg determina la lunghezza dell'mp3 in modo molto approssimativo e durante la modifica la lunghezza della traccia audio può differire notevolmente (di uno o due secondi) dalla lunghezza della traccia video. Ciò non ha importanza se l'intero video è costituito da un singolo fotogramma, ma quando si incolla un video del genere con interruzioni sul bordo si verificano effetti di balbuzie estremamente spiacevoli.

Un altro modo per determinare la durata di un file mp3 è utilizzare mp3info. Anche lei commette errori, e qualche volta ffmpeg dà più di mp3info, a volte è il contrario, a volte mentono entrambi – non ho notato alcuno schema. E qui soxi funziona correttamente.

Per installare questa utile utility, procedi come segue:

sudo apt-get install sox libsox-fmt-mp3

Effettuare transizioni tra le diapositive

Una transizione è un breve video in cui una diapositiva si trasforma in un'altra. Per realizzare tali video, prendiamo le diapositive in coppia e utilizziamo imagemagick trasforma 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 motivo volevo che la diapositiva fosse disseminata di punti, e poi la diapositiva successiva sarebbe stata assemblata dai punti, e per questo ho scritto uno script chiamato dissolvenza.pl avere imagemagick, un vero utente Linux creerà qualsiasi effetto speciale, ma se a qualcuno piace la mia idea con lo scattering, 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. Vai al catalogo clip e assemblare il film finito utilizzando 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 tuoi studenti riconoscenti!

Fonte: habr.com

Aggiungi un commento