Screencast audio-video ad alta qualità con FFmpeg

 

Ed eccomi ancora quà con l'ennesima guida su FFmpeg, sì lo sò, sono fissato, ma come sapete è uno dei tools che amo di più, per questo ho deciso di scrivere il più possibile su ogni esperimento che faccio, sia per quanto riguarda l'utilizzo dello screencast, sia per quanto riguarda le opzioni di conversione in generale. Ho già dedicato diversi post allo screencast con FFmpeg, ma adesso ho voluto farne uno cercando la migliore qualità audio/video possibile. La base di partenza è sempre lo script record.sh del post precedente, ma modificato per migliorare sensibilmente la qualità dello screencast:

 

#!/bin/sh

INFO=$(xwininfo -frame)

WIN_GEO=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+')
WIN_XY=$(echo $INFO | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' | grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/' )

ffmpeg -f alsa -ac 2 -i hw:0,0 -f x11grab -r 30 -s $WIN_GEO -i :0.0+$WIN_XY -acodec pcm_s16le -vcodec libx264 \
-vpre lossless_ultrafast -threads 0 -y screencast.mkv

 

per chi usa PulseAudio, sostituire:

 

-f alsa -ac 2 -i hw:0,0

con:

-f alsa -ac 2 -i pulse

 

c'è da dire che questa soluzione ha il "difetto" di creare screencast di grosse dimensioni, quindi nel caso di upload su youtube bisogna prepararsi all'ottimizzazione, cercando sempre di mantenere lo standard alto. Quindi il comando seguente oltre ad ottimizzare il file per youtube, ne riduce sensibilmente le dimensioni:

 

 

quello sopra anche se lunghino è un solo comando. Credo che il tutto sia ancora migliorabile, dato che ho notato delle piccole imperfezioni.

 

ps: il video sopra è volutamente muto.

 

enjoy 😉

Screencast Perfetto di una singola finestra con FFmpeg

 

Il titolo di questo post inizia con "Screencast Perfetto", e magari ad alcuni potrà sembrare un tantino esagerato, ma secondo me non lo è affatto. In Gnu/Linux esistono diversi programmi per fare uno screencast, ne cito uno per tutti, RecordmyDektop, anche se io ho sempre preferito utilizzare FFmpeg, Quello che ho notato in tutti i programmi è la "difficoltà" di centrare la finestra o il terminale in maniera precisa, certo nulla di grave, basta mettersi lì e perdere un pò di tempo per trovare il rettangolo perfetto. Però finalmente io ho trovato la soluzione che mi soddisfa completamente, e questo grazie a FFmpeg, che io amo molto, tanto è vero che gli ho dedicato una categoria esclusiva 🙂 Comunque andando al sodo la soluzione è la seguente:

$ xwininfo

digitando nel terminale xwininfo e successivamente toccando una finestra, avremo a disposizione molte informazioni:

xwininfo: Please select the window about which you
          would like information by clicking the
          mouse in that window.

xwininfo: Window id: 0x2424585 (has no name)

  Absolute upper-left X:  274
  Absolute upper-left Y:  219
  Relative upper-left X:  274
  Relative upper-left Y:  219
  Width: 654
  Height: 439
  Depth: 0
  Visual: 0x21
  Visual Class: TrueColor
  Border width: 0
  Class: InputOnly
  Colormap: 0x0 (not installed)
  Bit Gravity State: ForgetGravity
  Window Gravity State: NorthWestGravity
  Backing Store State: NotUseful
  Save Under State: no
  Map State: IsViewable
  Override Redirect State: yes
  Corners:  +274+219  -352+219  -352-366  +274-366
  -geometry 654×439+274+219
 

io ho preso queste informazioni toccando la finestra che mi interessava, e come si può vedere ci sono molti dati utili, tra cui il posizionamento-Corners-geometry. Adesso non bisogna fare altro che darle in pasto a FFmpeg. Quindi per prima cosa bisogna creare lo script record.sh, ed incollarci dentro:

 

#!/bin/sh

INFO=$(xwininfo -frame)

WIN_GEO=$(echo $INFO | grep -oEe 'geometry [0-9]+x[0-9]+' | grep -oEe '[0-9]+x[0-9]+')
WIN_XY=$(echo $INFO | grep -oEe 'Corners:\s+\+[0-9]+\+[0-9]+' | grep -oEe '[0-9]+\+[0-9]+' | sed -e 's/\+/,/' )

ffmpeg -f x11grab -r 25 -b 2000k -s $WIN_GEO -i :0.0+$WIN_XY /tmp/screencast.avi

 

in caso di problemi di formattazione si può scaricare da quà:

settare i permessi:

$ chmod +x record.sh

e lanciare:

$ ./record.sh

adesso non dobbiamo fare altro che toccare la finestra da registrare e lo script si occuperà in automatico della posizione precisa, salvando lo screencast in /tmp. Attenzione: per registrare il terminale bisogna toccare la barra della finestra, altrimente lo script non riesce a determinare l'esatta posizione, non so il motivo, per quanto riguarda tutto il resto, basta cliccare in un punto qualsiasi delle finestre.

FFmpeg ti amo!!!

enjoy 😉

Copiare con cp e barra di progresso

 

 

 

 

Advanced Copy è una mod per i tools cp e mv, e si occupa di far apparire nel terminale una barra di progresso che rende visibile il tempo e la % di una copia di un file. Per abilitare questa mod, bisogna seguire pochi semplici passi:

 

 

$ wget https://ftp.gnu.org/gnu/coreutils/coreutils-8.4.tar.gz
$ tar xvzf coreutils-8.4.tar.gz
$ cd coreutils-8.4/
$ wget
$ patch -p1 -i advcpmv-0.3-8.4.patch
$ ./configure
$ make
$ sudo cp src/cp /usr/bin/cp
$ sudo cp src/mv /usr/bin/mv

 

per avere la barra di progresso basta usare le opzioni cp -g e mv -g, senza andare a cambiare il comportamento solito di cp e mv. Per rendere definitivo il cambiamento invece aggiungere a .bashrc  gli alias:

 

alias cp='cp -g'
alias mv='mv -g'

 

Il comando dell' immagine sopra è:

 

$ cp -g debian-squeeze-di-beta1-amd64-netinst.iso /home/edmond/

 

 

enjoy 😉

Inserire logo in un video con FFmpeg

 

Un pò di tempo fa c'era la possibilità di inserire un logo in un video con FFmpeg usando vhook, ma ho scoperto che adesso questo non è più possibile, o meglio, non è più possibile con vhook, ma si può fare lo stesso usando Soc e libavfilter, infatti nel mio post precedente, ho parlato di come installare FFmpeg da sorgenti, appunto per poter compilare ed utilizzare queste librerie. Diciamo che la possibilità di inserire un logo in un video può essere molto utile, specialmente per chi vuole marchiare i propri video per renderli unici, non proprio come il mio dove ho inserito tux-sioux gigante 🙂

Ed ecco di seguito un' altro dei comandi magici:

$ ffmpeg -i video.avi  -vf "movie=0:png:immagine.png [logo]; [in][logo] overlay=10:10:1" output.avi

ps: per chi è pigro ed interessato a limite inserirò i pacchetti ffmpeg e x264 nel mio repository.

ps: la "cosa mancante" del post precedente è –enable-filter=movie

enjoy 😉

Building FFmpeg su Debian Squeeze con libavfilter e x264

 

Ho scoperto da poco che nell'installazione di default di ffmpeg, manca qualcosa, e che proprio questa cosa che manca ,mi serve per un "esperimento". Comunque andando per ordine e tralasciando a cosa mi serve la  "cosa mancante" ,ho deciso di compilare ffmpeg ex novo, con il supporto x264 e libavfilter. Quindi come primo procedimento ho disinstallato la versione installata dai repo.

 

# apt-get remove ffmpeg x264 libx264-dev

 

dopo di chè ho installato tutto quello che serve per una corretta compilazione:

 

# apt-get build-dep ffmpeg

 

servono anche:

 

# apt-get install build-essential subversion git-core checkinstall yasm texi2html libfaac-dev libfaad-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libx11-dev libxfixes-dev libxvidcore4-dev zlib1g-dev

 

Scaricare compilare ed installare  soc x264 e ffmpeg:

 

$ svn co svn://svn.ffmpeg.org/soc

$ cd soc/libavfilter

$ ./checkout.sh

$ cd ffmpeg

$ ./configure --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libx264 --enable-libxvid --enable-x11grab --enable-libtheora --enable-libgsm --enable-libvorbis --enable-filter=movie --enable-avfilter --enable-postproc

$ make

 

con ERROR: libx264 not found, oppue senza, bisogna installare x264:

 

$ cd ../../..

$ git clone git://git.videolan.org/x264.git

$ cd x264

$ ./configure

$ make

# checkinstall --fstrans=no --install=yes --pkgname=x264 --pkgversion "1:0.svn`date +%Y%m%d`-squeeze" --backup=no --default

 

tornare nella cartella di ffmpeg:

 

$ cd ../soc/libavfilter/ffmpeg

$ ./configure --enable-gpl --enable-version3 --enable-nonfree --enable-pthreads --enable-libfaac --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libtheora --enable-libx264 --enable-libxvid --enable-x11grab --enable-libtheora --enable-libgsm --enable-libvorbis --enable-filter=movie --enable-avfilter --enable-postproc

$ make

# checkinstall --pkgname=ffmpeg --pkgversion "5:0.7+svn`date +%Y%m%d`" --backup=no --default

 

adesso abbiamo una nuova installazione di ffmpeg con quel qualcosa che mi mancava, ma di cui scriverò la prossima volta 🙂

 

enjoy 😉

Googleearth su Debian Squeeze amd64

 

 

 

Come installare facilmente e senza errori googleearth su Debian Squeeze amd64, in soli tre step.

 

Step 1: installare googleearth-package più dipendenze varie:

 

# apt-get install googleearth-package lsb-core ia32-libs-gtk alien cups-bsd ed ia32-libs-gtk librpmbuild1 lsb-core pax rpm

 

Step 2: build pacchetto deb:

 

$ make-googleearth-package

 

Step 3: installazione pacchetto googleearth.deb:

 

# dpkg -i googleearth_6.0.1.2032+0.6.0-1_amd64.deb

 

enjoy 😉

Abilitare la voce elimina in Nautilus per Debian/Ubuntu

 

Quando si vuole eliminare un file in Debian o Ubuntu, Nautilus di default è settato con la voce " Sposta nel cestino", per poi successivamente dal cestino eliminarlo definitavamente. Per abilitare la voce "elimina" nel menu di Nautilus basta:

$ gconf-editor

e spostarsi in:

apps/nautilus/preferences/

ed abilitare:

enable_delete

 

enjoy 😉

Cambiare browser predefinito in Debian & Co

 

Io come browser uso Iceweasel, ma in una installazione standard di Debian, il browser predefinito è Epiphany, quindi quando si trovano dei link, anche se si sta usando Iceweasel, questi vengono aperti con  l'altro browser. Per cambiare si può usare update-alternatives. Per conoscere i browser installati nel sistema:

$ update-alternatives --list x-www-browser

per cambiare browser:

$ sudo update-alternatives --config x-www-browser

questa la mia lista:

edmond@Debianbox:~$ sudo update-alternatives –config x-www-browser
Sono disponibili 5 scelte per l'alternativa x-www-browser (che fornisce /usr/bin/x-www-browser).

  Selezione    Percorso                   Priorità  Stato
————————————————————
  0            /usr/bin/google-chrome      200       modalità automatica
  1            /usr/bin/chromium-browser   40        modalità manuale
  2            /usr/bin/epiphany-browser   85        modalità manuale
  3            /usr/bin/google-chrome      200       modalità manuale
* 4            /usr/bin/iceweasel          70        modalità manuale
  5            /usr/bin/opera              90        modalità manuale

Premere Invio per mantenere il valore predefinito[*] o digitare il numero della selezione:

 

enjoy 😉

LMDE 64 problemi al boot e fstab

 

 

Scrivo due righe per chi si trovasse ad avere lo stesso problema che ho avuto io in una fresca installazione di LMDE 64 bit. I problemi in /etc/fstab sono sempre più frequenti, anzi credo che siano gravemente proporzionali al numero di partizioni che si hanno su hard disk, ossia più partizioni più errori. Come già ho avuto modo di lamentarmi, non solo scambia /dev/sda1 windows con ext3 /, ma questa volta ha aggiunto una partizione inesistente e cioè /dev/sda2, più un kernel panic.

# / was on /dev/sda1 during installation
UUID=385ecae6-bd34-41c3-a524-974b8cd6d17f /               ext3    errors=remount-ro 0       1
# swap was on /dev/sda2 during installation
UUID=c6876978-438f-4a1e-ae53-dacdf22d1e4a none            swap    sw              0       0
/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto     0       0
proc    /proc    proc    nodev,noexec,nosuid    0    0
/dev/sda12    /    ext4    rw,errors=remount-ro    0    0
 

Sopra si vede la partizione /dev/sda1 dove c'è Windows, identificata come / ext3, e la partizione /dev/sda2 con swap, errata sia nell'uuid, sia nella partizione. Comunque una volta finita l'installazione al momento di riavviare ho ottenuto una specie di kernel panic, dove in quelle poche righe l'unica cosa che si capiva era: UUID=xxxxxx-xxxx-xxxxx-xxxx inesistente. Quindi il passo successivo è stato avviare da un'altra distro e montare la nuova installazione, e controllare l'uuid, che da un controllo con blkid risultava esatto. Quali le stringhe incriminate?
 

menuentry "Debian GNU/Linux, with Linux 2.6.32-5-amd64 (on /dev/sda12)" {
    insmod part_msdos
    insmod ext2
    set root='(hd0,msdos12)'
    search –no-floppy –fs-uuid –set dc199cb8-c4ee-48e1-9e8c-69b304cd12d9
    linux /boot/vmlinuz-2.6.32-5-amd64 root=UUID=1f084bbd-a556-4e8b-9ab4-c9049cfda7e3 ro quiet
    initrd /boot/initrd.img-2.6.32-5-amd64
}
 

guardando più attentamente si nota che i due uuid sono diversi, il primo esatto il secondo errato, ecco da dove arrivava il kernel panic, infatti una volta modificato il secondo uuid, LMDE riesce a bootare. Successivamente si deve cambiare l'uuid anche in /etc/initramfs-tools/conf.d/resume. Quindi ho l'impressione che piu partizioni si hanno e più si può incorrere in errori, tutto questo in attesa della risoluzione. Una nota positiva dell'installer è che riconosce la partizione zfs 🙂 mentre quello Debian no.

 

enjoy 😉
 

Velocizzare boot e prestazioni su Debian Squeeze parte 2

 

 

Nella guida precedente ho iniziato a sperimentare la possibilità di velocizzare Debian Squeeze ed LMDE, partendo dalla fase di boot, fino ad arrivare in questa seconda parte ad aumentare, ove possibile, la reattività del sistema. Già con l'installazione di preload si cerca di aumentare la reattività dei programmi usati più spesso, ma per ottenere questo bisogna dare a preload alcune ore di utilizzo, affinche memorizzi le abitudini. Le modifiche successive io le ho testate sul mio sistema, senza problemi, ma ciò non toglie che è meglio stare attenti.

 

atime ed /etc/fstab:

la prima modifica riguarda  /etc/fstab e l'inserimento dell'opzione noatime e nodiratime. Linux di default tende a tenere traccia di tutto quello che si fà, non solo delle modifiche dei file, ma anche della solo lettura, e scrive tutto sul disco. Questo sicuramente è d'obbligo su un server, ma su un pc Desktop secondo me non è necessario. C'è da tenere conto che una minore scrittura, significa anche aumento della durata dell' hard disk. Quindi /etc/fstab dovrebbe essere così:

/dev/sdaxx    /    ext4    rw,noatime,nodiratime,errors=remount-ro    0    0

lo stesso discorso vale per la partizione di /home separata.

 

vm.swappiness:

un'altra modifica che si può fare riguarda /etc/sysctl.conf e cioè andare a modificare il file, ed inserire un valore  a vm.swappiness che andrà a dire al kernel se tenere tutto in Ram oppure nella cache su disco.  Oggi ci si ritrova ad avere tanta Ram che nemmeno si utilizza, quindi cerchiamo di sfruttarla. Di default questo valore in Debian è 60, e la modifica si può fare da 0 a 100, io ho optato per 20. Per chi ha un pc portatile, può essere utile diminuire la scrittura su disco, in quanto la durata della batteria ne gioverebbe.

# echo 'vm.swappiness=20' >> /etc/sysctl.conf

 

vm.vfs_cache_pressure:

anche questa opzione da inserire in /etc/sysctl.conf aiuta a velocizzare il sistema, il valore di default in Debian è 100, si può provare a dimezzarlo:

# echo 'vm.vfs_cache_pressure=50' >> /etc/sysctl.conf

 

per le mie esigenze queste opzioni vanno benissimo e mi ritrovo con un pc veloce e reattivo:

 

Boot=25 secondi circa

Halt=5 secondi circa

 

ps: in LMDE consiglio di rimuovere il mintMenu dal pannello, che è pesantissimo, ed aggiungere la classica Barra del menu di Gnome.

 

enjoy 😉