Come creare uno screencast usando ffmpeg

Per coloro che non lo sanno, a screencast è una registrazione digitale dell'output dello schermo del computer, a volte contenente narrazione audio.

En Linux, ce ne sono diversi strumenti per rendere screencast. Tuttavia, quelli che preferiscono farlo consumando risorse minime non possono smettere di leggere questo articolo.


Utilizzando 2 strumenti (ffmpeg per catturare lo schermo e xwininfo per ottenere le coordinate e le dimensioni della finestra da registrare) sono riuscito a realizzare screencast utilizzando risorse minime e ottenendo risultati ottimali.

Lo script per avviare lo screencast

#! / Bin / bash

# Ottieni le coordinate e le dimensioni della finestra selezionata
# Ciò esclude la decorazione della finestra.
  xywh non impostato
  eval $ (xwininfo -frame |
    sed -n -e "s / ^ + X assoluta in alto a sinistra: + ([0-9] +). * / x = 1 / p"
           -e "s / ^ + Y assoluto in alto a sinistra: + ([0-9] +). * / y = 1 / p"
           -e "s / ^ + Larghezza: + ([0-9] +). * / w = 1 / p"
           -e "s / ^ + Altezza: + ([0-9] +). * / h = 1 / p")
$ w = $ w + $ w% 2 # che la larghezza è un multiplo di 2, altrimenti ffmpeg si lamenta
WIN_XY = $ x "," $ y # formatta le coordinate XY
WIN_GEO = $ w "x" $ h # dimensione della finestra di formato
# notify-send mostrerà un messaggio che indica l'inizio dello screencast.
# esegui ffmpeg con i parametri che si adattano alla tua configurazione.
notifica-invio "Avvio screencast ..." && ffmpeg -f alsa -i hw: 0 -f x11grab -r 25 -s $ WIN_GEO -i: 0.0 + $ WIN_XY -acodec libmp3lame -async 1 -vcodec libx264 -preset ultrafast - crf 0 -threads 0 save.mp4

Non devi comprendere appieno tutto ciò che fa questo script. Basta seguire i commenti. Tuttavia, è molto probabile che tu debba modificare alcuni parametri nella riga in cui viene eseguito ffmpeg per adattarli alla configurazione della tua macchina.

Architettura audio

1) Se usi OSS, sostituisci -f alsa -i hw: 0 con -f oss -i / dev / dsp

2) Se usi solo ALSA, devi usare i parametri presenti nello script (-f alsa -i hw: 0). Per determinare il numero dopo hw: puoi eseguire aplay -l e scegliere il numero della scheda audio appropriata.

3) Se usi Pulse Audio (Ubuntu e derivati ​​lo usano), usa i parametri -f alsa -ac 1 -i pulse.

FPS

-r 25 indica gli fps (fotogrammi al secondo o fotogrammi al secondo) a cui si desidera registrare. 25 è una buona opzione.

Codec audio, video e di sincronizzazione

-acodec libmp3lame è il codec audio. Ho scelto di registrarlo in mp3. Puoi usare qualsiasi altro.

-async 1 consente la sincronizzazione dell'audio con il video.

-vcodec libx264 -preset ultrafast -crf 0 -threads 0, dice a ffmpeg che il codec video da usare è x264 e che il preset è ultraveloce (c'è veloce, lento, ecc.), altrimenti non registrerà correttamente alla quantità desiderata di fps. Il parametro -crf 0 indica il livello di compressione (minore è la compressione, minore è la compressione). Infine, i thread 0 indica il numero di thread da utilizzare, quando si passa 0 ffmpeg lo calcola automaticamente. Come per le impostazioni audio, puoi scegliere altre opzioni.

Tutte queste impostazioni sono state quelle che mi hanno dato i migliori risultati: un file relativamente piccolo, una buona qualità video, con audio sincronizzato e senza ritardi. Tuttavia, ti consiglio di immergerti nella documentazione di ffmpeg per scoprirne altri.

Lo script per terminare lo screencast

#! / Bin / bash
notify-send "Termina screencast ..." && killall ffmpeg
Affinché entrambi gli script funzionino, è necessario che sia installato notify-send. Tutte le distribuzioni derivate da Ubuntu dovrebbero venire con questo strumento installato. In Arch e derivati: sudo pacman -S libnotify.

ffcast

Cercando informazioni per scrivere le sceneggiature, ho scoperto che qualcuno aveva un'idea molto simile alla mia. Ffcast è uno script che utilizza gli stessi strumenti (ffmpeg e xwininfo). Lo menziono perché alcuni potrebbero trovare più conveniente usare questo script.

In Arch e derivati, ho aperto un terminale e ho eseguito:

yaourt -S ffcast

Il resto puoi scaricarlo da qui.

Finire…

Dopo aver creato e salvato gli script salvati nella tua cartella HOME, devi concedergli i permessi di esecuzione. Supponendo che start_screencast e finish_screencast siano chiamati, esegui i seguenti comandi in un terminale:

chmod + x start_screencast
chmox + x terminate_screencast

Infine, resta solo da assegnare ciascuno degli script a 2 scorciatoie (scorciatoie) che sono comode per te. In questo modo, gli script verranno eseguiti quando si preme la combinazione di tasti selezionata.


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.

  1.   Michael sp suddetto

    Da quando ho conosciuto Linux, mi sono chiesto esattamente la stessa cosa che è stata appena descritta in questo commento. sarebbe un progetto ambizioso.

  2.   pmf suddetto

    Il tutorial mi sembra buono, ma come si fa a dire qualcosa di facile per utenti inesperti? Beh, quello che mi sembra il migliore è KAzam, è facile da usare e secondo me non consuma molto !!!!! Saluti

  3.   Usiamo Linux suddetto

    Non tutto. Inoltre, credo sinceramente che non esista una buona interfaccia per lo screencasting (che ha tutto ciò di cui ho bisogno), che funzioni con i formati che desidero e che consuma poche risorse.

    Nel mio caso, il terminale è l'opzione migliore. Non pretendo che sia per tutti, ma è bene condividere ciò che si sta imparando, giusto?

    Saluti! Paolo.

  4.   Jorge Rocco suddetto

    È sbagliato che se vogliamo espandere il sistema operativo sotto GNU / linux consigliamo agli utenti di fare quel genere di cose nel terminale le persone vogliono qualcosa di facile e funzionale

    @ingjorgerocha

  5.   perchésoyjuan? suddetto

    A livello di server uso anche solo console, nessun ambiente grafico ... è il più pratico e da lì faccio tutto (automatizzo i backup ad esempio come dici bene ...), ma, su una macchina che hai come un server ... cosa vuoi fare uno screencast su di esso? hehe .. Ffmpeg è molto molto valido ma penso che il problema della console dovrebbe andare in secondo piano a seconda di quali distribuzioni.
    Dato che abbiamo così tanta varietà di distribuzioni nel mondo Linux, e la console è abbastanza perfezionata per funzionare correttamente in tutte le situazioni (è quasi infallibile piuttosto ..), dovremmo iniziare a migliorare le app per il pubblico, iniziare a lucidare, codificare e l'aspetto grafico ... che è ciò che viene richiesto oggi.
    Abbiamo progetti Linux abbastanza arcaici e abbandonati, sappiamo tutti che ... un buon esempio, per me, è il motivo per cui non esiste più un formato di file eseguibile che ti permetta di prendere un programma su una pendrive e semplicemente fare doppio clic e un semplice installazione a parte la necessità di repository (e quindi di rete) .. niente APTonCD, anche questo è obsoleto .. abbiamo bisogno di uno standard, un ".tux" o qualcosa di simile a un ".exe" di Windows. È per problemi di spazio? .. in Windows, l'eseguibile di Gimp occupa 72mb e lo stesso per Linux (.deb) occupa 4,2mb ... come mai? Bene, perché il programma Gimp stesso, in Windows è accompagnato da tutte le librerie per assicurarsi che il programma funzioni una volta installato ... in Linux potremmo avere qualcosa di uguale, l'eseguibile occuperebbe di più, perderemmo il vantaggio di dimensioni ma guadagniamo in portabilità (e di più con i ricordi così grandi che portiamo oggi in tasca ... che differenza fa trasportare 4 MB rispetto a 72 MB se quasi tutti noi portiamo pendrive da 8 GB?)
    Tutte queste cose devono essere pulite ... il sistema è stabile, ha un ottimo supporto e compatibilità con i driver ... perché non miglioriamo quello che c'è? ... se qualcuno è incoraggiato, iniziamo il progetto eseguibile ehe.!

  6.   nascosto suddetto

    Uhm ... beh, le persone che amano la console non la amano perché, caro amico, la adorano perché con essa si possono automatizzare molte cose, ad esempio a livello di server (anche se non è così).

  7.   perchésoyjuan? suddetto

    Onestamente, la console è molto utile ... ma ci sono programmi con qualche GUI che usano ffmpeg e sono più attraenti e costruttivi per i possibili nuovi utenti Linux ... Consiglio RecordMyDescktop che è nei repository di quasi tutte le distribuzioni. Lo so ci sono molte persone che amano la console, ma questo deve essere finito con il più possibile ... Linux deve essere concentrato sul desktop e un possibile utente finale che fondamentalmente lo desidera, un'interfaccia grafica e, se possibile, bella e pratica ... è così difficile? che non possiamo lasciarci calpestare .. Linux ha un enorme potenziale e dobbiamo spremerlo fuori!
    Nonostante tutto, è un ottimo programma! Buon post ^^

  8.   perchésoyjuan? suddetto

    La verità è che sì, è fantastico condividere ciò che si sta imparando ... Questa non è una critica nel senso svalutante del post, ma una critica al motivo per cui più persone non usano Linux ... qualunque cosa dicano, il console andrebbe ridotta ad un secondo piano per lasciare il posto alle dotazioni grafiche (questo non vuol dire che sia esclusa la possibilità di fare cose da console, ma che chi vuole usarla e chi no, beh, no ..)
    Alla fine della giornata, ciò che vende, ciò che colpisce è la facilità di utilizzo di un sistema operativo ... internamente Linux è inarrestabile, ma se a quella facilità d'uso e interfacce intuitive si aggiungono ... conquistiamo gli utenti e questo vantaggio lo sviluppo della community, i diversi programmi, il supporto di aziende di videogiochi e quindi hardware specifico (diciamo schede grafiche ..), la creazione di software specializzato che attualmente esiste solo su Windows / Mac ... Non lo so, penso questo è in piano 15M ... tutto molto bello ma ora è il momento di cambiare un po 'rotta ... e dico un po'!

    Bene, il progetto eseguibile standard in Linux è ancora valido, se qualcuno lo legge e vuole che iniziamo a collaborare, ecco la mia email, non sto nascondendo hehe (whysoyjuan@gmail.com)

    Saluti e spero di vedere altri commenti qui ... che siano critiche o elogi, il fatto è che dobbiamo parlare.

  9.   Usiamo Linux suddetto

    Buona! Buon contributo.
    Abbraccio! Paolo.

  10.   Gerardo suddetto

    Di cosa tratta questo programma ... attenzione, non sono molto informato su questo!

    1.    usiamo linux suddetto

      Generalmente, viene utilizzato per convertire i video. In questo caso, dimostriamo come utilizzarlo per registrare il desktop e realizzare un video tutorial, ad esempio.
      Abbraccio! Paolo.

  11.   tarribalis suddetto

    Grazie. Nella risoluzione, ad esempio 1280X800, la X deve essere maiuscola affinché il comando ffmpeg funzioni.