Com fer un screencast utilitzant ffmpeg

Per aquells que no ho saben, un screencast és un enregistrament digital de la sortida per pantalla de l'ordinador, de vegades contenint narració d'àudio.

En Linux, Hi ha diverses eines per fer screencasting. No obstant això, aquells que prefereixin fer-ho consumint mínims recursos no poden deixar de llegir aquest article.


Fent ús de 2 eines (ffmpeg per realitzar la captura de la pantalla i xwininfo per obtenir les coordenades i dimensions de la finestra a gravar) me les vaig enginyar per poder realitzar screencasts utilitzant recursos mínims i obtenint òptims resultats.

L'script per iniciar el screencast

#! / Bin / bash

# Obtenir les coordenades i la mida de la finestra seleccionada
# Això exclou la decoració de la finestra.
  unset xywh
  eval $ (xwininfo -frame |
    set -n -e "s / ^ + Absolute upper-left X: + ([0-9] +). * / x = 1 / p"
           -e "s / ^ + Absolute upper-left I: + ([0-9] +). * / i = 1 / p"
           -e "s / ^ + Width: + ([0-9] +). * / w = 1 / p"
           -e "s / ^ + Height: + ([0-9] +). * / h = 1 / p")
$ W = $ w + $ w% 2 # que l'ample sigui múltiple de 2, sinó ffmpeg es queixa
WIN_XY = $ x "," $ i # donar format a les coordenades XY
WIN_GEO = $ w "x" $ h # donar format a la mida de la finestra
# Notify-send mostrarà un missatge indicant l'inici de l'screencast.
# Córrer ffmpeg amb els paràmetres que s'ajustin a la configuració.
notify-send "Iniciant 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 guardar.mp4

No cal que entenguis a la perfecció tot el que fa aquest script. Simplement amb seguir els comentaris ja n'hi ha prou. No obstant això, és molt possible que hagis de canviar alguns paràmetres en la línia on s'executa ffmpeg per ajustar-los a la configuració de la teva màquina.

Arquitectura d'àudio

1) Si fas servir OSS, reemplaça -f alsa -i hw: 0 per -f oss -i / dev / dsp

2) Si fas servir només ALSA, has de fer servir els paràmetres que vénen en l'script (-f alsa -i hw: 0). Per determinar el nombre que va després de hw: pots executar aplay -ly triar el número de la targeta de so adequada.

3) Si fas servir Premi Audio (Ubuntu i derivats fan servir això), usá els paràmetres -f alsa -ac 1 -i premi.

FPS

-r 25 indica els fps (frames per second o fotogrames per segon) als quals vulguis gravar. 25 és una bona opció.

Còdec d'àudio, vídeo i sincronització

-acodec libmp3lame és el còdec d'àudio. El vaig triar gravar en mp3. Podeu utilitzar qualsevol altre.

-async 1 permet la sincronització de l'àudio amb el vídeo.

-vcodec libx264 -preset ultrafast -crf 0 -threads 0, li indica a ffmpeg que el còdec de vídeo a utilitzar sigui x264 i que el preset sigui ultrafast (hi ha fast, slow, etc), en cas contrari no arriba a gravar correctament a la quantitat de fps desitjats. El paràmetre -crf 0 indica el nivell de compressió (com més baix, menor la compressió). Finalment, threads 0 indica la quantitat de fils a utilitzar, a el passar 0 ffmpeg el calcula automàticament. A l'igual que amb la configuració d'àudio, podeu triar altres opcions.

Totes aquestes configuracions van ser les que a mi em van donar millors resultats: un arxiu relativament petit, una bona qualitat de vídeo, amb àudio sincronitzat i sense lags. No obstant això, et recomano submergir-te en la documentació de ffmpeg per descobrir altres.

L'script per finalitzar el screencast

#! / Bin / bash
notify-send "Finalitzant screencast ..." && killall ffmpeg
Perquè tots dos scripts funcionin has de tenir instal·lat notify-send. Totes les distribucions derivades d'Ubuntu haurien de venir amb aquesta eina instal·lada. En Arch i derivats: sudo pacman -S libnotify.

Ffcast

Buscant informació per escriure els scripts, vaig descobrir que algú va tenir una idea molt similar a la meva. Ffcast és un script que utilitza les mateixes eines (ffmpeg i xwininfo). Ho esmento perquè potser a alguns els resulti més còmode utilitzar aquest script.

En Arch i derivats, vaig obrir un terminal i executa:

yaourt -S ffcast

La resta, pot descarregar des aquí.

Per acabar ...

Una vegada que vas crear i guardar els scripts guardats a la teva carpeta HOME, cal atorgar-permisos d'execució. Suposant que es diguin iniciar_screencast i terminar_screencast, executa les següents comandes en un terminal:

chmod + x iniciar_screencast
chmox + x terminar_screencast

Finalment, només resta assignar cada un dels scripts a 2 shortcuts (accessos directes) que et resultin còmodes. D'aquesta manera, els scripts s'executaran a l'utilitzar la combinació de tecles seleccionada.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.

  1.   Michael Sp va dir

    Des que vaig conèixer Linux m'he preguntat exactament el mateix que s'acaba de detallar en aquest comentari. seria un ambiciós projecte.

  2.   PFME va dir

    em sembla bo el tut però com dieu alguna cosa fàcil per a usuaris novells, puej el q millor em sembla és KAzam, és fàcil d'utilitzar i no consumeix molt al meu parer !!!!!! salutacions

  3.   Fem servir Linux va dir

    No tots. A més, honestament crec que no hi ha cap bona interfície per fer screencasting (que tingui tot el que necessito), que funcioni amb els formats que jo vull i que consumeixi pocs recursos.

    En el meu cas, el terminal és la millor opció. No pretenc que ho sigui per a tots, però és bo compartir el que un va aprenent, no?

    Salutacions! Pau.

  4.   Jorge Rocha va dir

    aquesta mal q si volem expandir els SO sota GNU / Linux aconsellem als usuaris a fer aquest tipus de coses a la terminal la gent vol alguna cosa fàcil i funcional

    @ingjorgerocha

  5.   whysoyjuan va dir

    A nivell servidor jo també ús fins i tot únicament consola, res d'entorn gràfic ... és el més pràctic i ho faig tot des d'aquí (automatitzar backups per exemple com tu bé dius ..), però, en una màquina que tinguis com servidor..para què vols fer un screencast-hi? jeje..Ffmpeg és molt molt vàlid però crec que el tema de la consola hauria d'anar passant a un segon pla en segons quins distribucions.
    Ja que tenim tanta varietat de distros en el món Linux, i la consola està prou perfeccionada com per funcionar adequadament en totes les situacions (és gairebé infal·lible més bé ..), caldria començar a millorar les apps de cara a el públic, començar a polir, codi i aspecte gráfico..que a dia d'avui és el que es demana.
    Tenim projectes en Linux bastant arcaics i abandonats, això ho sabem todos..un exemple bo, per a mi, és el perquè no hi ha ja un format d'arxiu executable que permeti portar un programa en un pendrive i simplement fer doble clic i una instal·lació senzilla fora de requerir repositoris (i per això xarxa) .. res de APTonCD, això està antiquat también..necesitamos un estandar, un ".tux» ​​o alguna cosa així semblant a un «.exe» de Windows.¿Es per tema d'espai ? .. en Windows, l'executable de Gimp ocupa 72mb i el mateix per a Linux (.deb) ocupa 4,2mb ... ¿això per que és? doncs perquè a el programa de Gimp en si, en Windows li acompanyen totes les llibreries per assegurar-se que el programa funciona a l'instalarlo..en Linux podriem tenir alguna cosa igual, l'executable ocuparia més, perdríem l'avantatge de la mida però vam guanyar en portabilitat (i mes amb les memòries tan grans que portem avui en dia en els bolsillos..¿que més dóna portar 4MB que 72mb si portem pendrives de 8 GB gairebé tots?)
    Totes aquestes coses són les que cal anar puliendo..el sistema és estable, té gran suport i compatibilitat de drivers..¿porqué no millorem el que hi ha? .. si algú s'anima, vam iniciar el projecte de executable jeje.Un salutació !

  6.   hidabe va dir

    Uhm ... doncs la gent que estima la consola no l'estima perquè sí estimat amic, l'estima perquè amb ella es poden automatitzar moltes coses, per exemple, a nivell de servidor (encara que aquest no sigui el cas).

  7.   whysoyjuan va dir

    Sincerament, la consola és molt útil ... però hi ha programes amb algun GUI que utilitzen ffmpeg i són més atractius i constructius per a possibles nous usuaris Linux ... recomano RecordMyDescktop que està en els repositoris de gairebé totes les distros.Ya sé que hi ha molta gent que estima la consola, però això cal anar acabant amb això en tot el possible ... cal enfocar Linux a l'escriptori ia un possible usuari final que fonamentalment vull això, una interfície gràfica i si pot ser bonica i pràctica ... ¿tan difícil és? .hombre, que no podem deixar-nos pisar..Linux té un potencial tremend i hem esprémer!
    Malgrat tot, és un genial programa! Bon post ^^

  8.   whysoyjuan va dir

    La veritat que si, és genial compartir el que un va aprenent ... Això no és una crítica en el sentit desvalorizante de el post, sinó una crítica a el perquè no fa servir més gent Linux..digan el que diguin, la consola ha d'anar quedant reduïda a l' un segon pla per donar pas a les facilitats gràfiques (no vol dir això que la possibilitat de realitzar coses per consola quedi descartada, sinó que el que vulgui la faci servir i el que no, doncs no ..)
    A la fi i al el cap, el que ven, el que crida l'atenció és la facilitat en el maneig d'un SO..internamente Linux és imparable, però si a això sumem una facilitat de maneig i unes interfícies intuitivas..ganamos usuaris i això beneficia el desenvolupament de la comunitat, els diferents programes, suport de les companyies de videojocs i per tant de maquinari específic (diguin-targetes gràfiques ..), creacció de programari especialitzat que actualment només hi ha a Windows / Mac ... no, jo crec que això és en pla 15M ... tot molt bonic però ja toca canviar una mica el rumb ... i dic una mica!

    Bé, això de el projecte dels executables estàndard en Linux segueix en peu, si algú ho llegeix i vol que comencem a col·laborar aqui està el meu correu, no m'amago jeje (whysoyjuan@gmail.com)

    Una salutació i espero veure més comentaris per aquí ... siguin crítiques o lloances, el cas és que hi hagi que hablar.Xao

  9.   Fem servir Linux va dir

    Bé! Bona aportació.
    Abraçada! Pau.

  10.   Gerardo va dir

    En què consisteix aquest programa ... ull, no sóc molt entès en això!

    1.    usemoslinux va dir

      Generalment, s'utilitza per convertir vídeos. En aquest cas, vam demostrar com utilitzar-lo per gravar l'escriptori i fer un vídeo tutorial, per exemple.
      Abraçada! pablo.

  11.   Tarribalis va dir

    Gràcies. En la resolució, pi 1280X800, la ics s'ha de posar en majúscula perquè funcioni la comanda ffmpeg.