Salta al contenuto principale
Working from scratch, following simplicity

Come stabilizzare un video usando FFmpeg e vid.stab

Recentemente ho ripreso ad usare la mia HTC Re Camera, una vecchia fotocamera istantanea, perché volevo provare a fare alcuni video. I risultati sono stati molto deprimenti, ma soprattutto sono venuti dei filmati molto mossi. Fortunatamente ci sono FFmpeg e vid.stab che mi hanno aiutato a stabilizzarli. In questo post spiego come installare questo plugin e usarlo, mostrando poi i risultati in due video di confronto.

HTC Re Camera è stata un'eccellente fotocamera istantanea (prodotta dal 2014 e ora fuori produzione) con la portabilità come carta vincente. Inoltre ha una stabilizzazione video ma non aiuta più di tanto quando corro o cammino, i video risultano quasi sempre tremolanti.

Come sempre Internet ha già la risposta pronta e mi ha suggerito vidstab, una libreria opzionale per FFmpegFFmpeg è una soluzione completa e multipiattaforma per registrare, convertire e trasmettere audio e video. Sito: https://www.ffmpeg.org/ o Transcodetranscode è lo strumento di elaborazione del flusso video di Linux. Maggiori informazioni qui: https://linux.die.net/man/1/transcode. La libreria può stabilizzare e appianare i video traballanti su Linux. Più sotto è riportato un riepilogo e il mio adattamento di due articoli fantastici che mi hanno aiutato a risolvere il problema:

  1. Video Stabilization Using VidStab and FFmpeg on Linux
  2. Stabilizing GoPro Video with FFmpeg and vid.stab
Come stabilizzare un video usando FFmpeg e vid.stab

Installazione

In Ubuntu 18.04, FFmpeg non ha abilitato vidstab, quindi lo puoi compilare da zero o come nel mio caso usare una build statica di FFmpeg che ha già abilitato vid.stab e la puoi scaricare da qui: FFmpeg Static Builds. Lo scarico secondo il mio sistema, l'ho estratto in una directory e collegato in uno script bash che ha tutte le impostazioni necessarie.

Comandi da linea di comando

Ci sono molte combinazioni possibili, ti riporto quelle che uso di solito, le ho suddivise in  un passo e due passi. Nel primo FFmpeg non analizza il flusso video, è più veloce ma la qualità è migliore nel secondo.

Un passo

ffmpeg -i input.mp4 -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 output.mp4

Due passi

ffmpeg -i input.mp4 -vf vidstabdetect=stepsize=32:shakiness=10:accuracy=10:result=transforms.trf -f null -
ffmpeg -y -i input.mp4 -vf vidstabtransform=input=transforms.trf:zoom=0:smoothing=10,unsharp=5:5:0.8:3:3:0.4 -vcodec libx264 -tune film -acodec copy -preset slow output.mp4

Infine questo è lo script che di solito lancio nella directory dove ho i file videoPer fare ciò puoi impostare permanentemente un percorso dove tiene i tuoi script, devi solo aggiungere al tuo ~/.profile o ~/.bashrc questa riga: export PATH="$PATH:/path/to/dir:

#!/bin/bash
# Sources:
# https://trac.ffmpeg.org/wiki/Create%20a%20mosaic%20out%20of%20several%20input%20videos
# https://stackoverflow.com/questions/11552565/vertically-or-horizontally-stack-several-videos-using-ffmpeg
# https://ffmpeg.org/pipermail/ffmpeg-user/2017-August/037057.html

path="/absolute_path_of_the_downloaded_FFmpeg"

if [ -z "$1" ]
    then
        echo "Usage:" 
        echo  "stabilizator.sh filename.mp4"
        exit 0
fi

# one step
$path/ffmpeg -y -i $1 \
      -vf vidstabtransform,unsharp=5:5:0.8:3:3:0.4 ${1%.*}_oneStep.mp4

# two steps
$path/ffmpeg -y -i $1 \
      -vf vidstabdetect=stepsize=32:shakiness=10:accuracy=10:result=transforms.trf -f null -
$path/ffmpeg -y -i $1 \
      -vf vidstabtransform=input=transforms.trf:zoom=0:smoothing=10,unsharp=5:5:0.8:3:3:0.4 \
      -vcodec libx264 -tune film -acodec copy -preset slow  \
      ${1%.*}_twoSteps.mp4

Esempi

Il primo esempio è una vista panoramica di una rosa:

Il secondo una corsa:

Aggiungi un commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.

Plain text

  • Nessun tag HTML consentito.
  • Indirizzi web ed indirizzi e-mail diventano automaticamente dei link.
  • Linee e paragrafi vanno a capo automaticamente.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.

Aggiungi un commento

Il contenuto di questo campo è privato e non verrà mostrato pubblicamente.

Plain text

  • Nessun tag HTML consentito.
  • Indirizzi web ed indirizzi e-mail diventano automaticamente dei link.
  • Linee e paragrafi vanno a capo automaticamente.
CAPTCHA
This question is for testing whether or not you are a human visitor and to prevent automated spam submissions.
Sponsored Links
Pubblicità

Nicola Rainiero

Ingegnere civile specializzato in geotecnica con l'ambizione di facilitare la propria attività lavorativa usando e creando software libero per un sapere condiviso e collettivo. Mi occupo anche di energie rinnovabili ed in particolare di geotermia a bassa entalpia. Sono da sempre appassionato di web design e modellazione 3D.