Table of Contents
Se vi siete imbattuti in questo articolo è probabile che già conosciate FFmpeg, una delle più famose software suite per Linux e Windows per registrare, convertire e riprodurre audio e video. In questo post parleremo di come utilizzare questo utilissimo e versatile strumento per inviare un feed video e/o audio a un servizio di streaming online come Periscope e YouTube. Per ottenere questo obiettivo abbiamo preparato alcuni script bash (.sh) che è possibile scaricare direttamente da questo progetto GitHub e che riportiamo per comodità all'interno di questo articolo.
Prima di addentrarci negli script, è utile spendere qualche istante ad approfondire il funzionamento dei servizi di online streaming per cui sono stati creati.
Periscope
Periscope è un'applicazione gratuita di video streaming nata come progetto personale degli sviluppatori Kayvon Beykpour e Joe Bernstein e successivamente acquistata da Twitter nel 2015: inizialmente disponibile soltanto su piattaforma iOS, è stata successivamente rilasciata anche in versione Web e Android, garantendo in questo modo la piena compatibilità con tutti i dispositivi desktop e mobile.
Una volta effettuata la registrazione (con account Twitter, Facebook, Google o numero di telefono) e l'accesso, l'utente avrà la possibilità di accedere allo strumento Producer, che consente di creare uno o più "canali" su cui trasmettere i propri contenuti: ciascun canale avrà una chiave privata univoca (obbligatoria), che potrà essere utilizzata per inviare i contenuti da mandare in streaming, e un nome (opzionale) per aiutare distinguerlo dagli altri.
Una volta alimentato dai propri contenuti - tramite FFmpeg o altro strumento similare - sarà possibile condividere il broadcast sul proprio account Twitter: alternativamente o in aggiunta alla pubblicazione su Twitter sarà possibile impostare il proprio stream come Pubblico o Privato, così da poterlo condividere o meno anche all'interno della community di Periscope.
FFmpeg Periscope - Video
Questo script, pensato per il broadcast di un evento, prevede il broadcast di una sorgente video già completo di audio:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#! /bin/bash VBR="1500k" FPS="30" QUAL="ultrafast" TWITTER_URL="rtmp://de.pscp.tv:80/x" TWITTER_KEY="XXXXXXXXXX" VIDEO_SOURCE="sample.mp4" AUDIO_ENCODER="aac" $ ffmpeg -re \ -f lavfi \ -i "$VIDEO_SOURCE" \ -c:v libx264 -preset $QUAL -r $FPS -g $(($FPS *2)) -b:v $VBR \ -c:a $AUDIO_ENCODER -threads 6 -ar 44100 -b:a 128k -bufsize 512k -pix_fmt yuv420p \ -f $TWITTER_URL/$TWITTER_KEY |
L'ultima versione di questo script la trovate disponibile su GitHub a questo indirizzo.
FFmpeg Periscope - Video e Audio
Questo script è simile al precedente, ma prevede l'invio di una sorgente video e di una sorgente audio separata, che saranno unite in un unico broadcast:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#! /bin/bash VBR="1500k" FPS="30" QUAL="ultrafast" TWITTER_URL="rtmp://de.pscp.tv:80/x" TWITTER_KEY="XXXXXXXXXX" VIDEO_SOURCE="sample.jpg" AUDIO_SOURCE="sample.mp3" AUDIO_ENCODER="aac" ffmpeg \ -loop 1 \ -re \ -framerate $FPS \ -i "$VIDEO_SOURCE" \ -thread_queue_size 512 \ -i "$AUDIO_SOURCE" \ -c:v libx264 -preset $QUAL -r $FPS -g $(($FPS *2)) -b:v $VBR \ -c:a $AUDIO_ENCODER -threads 6 -ar 44100 -b:a 128k -bufsize 512k -pix_fmt yuv420p \ -f flv $TWITTER_URL/$TWITTER_KEY |
L'ultima versione di questo script la trovate disponibile su GitHub a questo indirizzo.
FFmpeg Periscope - Audio only
Questo script, pensato per una web radio, prevede l'invio di un'immagine statica (una sorta di "copertina") accompagnata da una sorgente audio codificata con i seguenti parametri:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#! /bin/bash VBR="1500k" FPS="30" QUAL="ultrafast" TWITTER_URL="rtmp://de.pscp.tv:80/x" TWITTER_KEY="XXXXXXXXXX" VIDEO_SOURCE="sample.jpg" AUDIO_SOURCE="sample.mp3" AUDIO_ENCODER="aac" ffmpeg \ -loop 1 \ -re \ -framerate $FPS \ -i "$VIDEO_SOURCE" \ -thread_queue_size 512 \ -i "$AUDIO_SOURCE" \ -c:v libx264 -tune stillimage -pix_fmt yuv420p -preset $QUAL -r $FPS -g $(($FPS *2)) -b:v $VBR \ -c:a $AUDIO_ENCODER -threads 6 -ar 44100 -b:a 128k -bufsize 512k -pix_fmt yuv420p \ -f flv $TWITTER_URL/$TWITTER_KEY |
L'ultima versione di questo script la trovate disponibile su GitHub a questo indirizzo.
YouTube
Già da molti anni la famosissima piattaforma YouTube ha aggiunto la funzione Live, che consente agli autori di effettuare dei live streaming dei propri contenuti in tempo reale. Per maggiori informazioni su come utilizzare questa funzionalità, consigliamo di dare un'occhiata guida ufficiale di YouTube Creator Academy. In questa breve premessa ci limiteremo a dire che è necessario creare un canale e quindi accedere al pannello Live Streaming (in italiano "Trasmetti dal Vivo") presente nel menu in alto a destra della schermata del canale. Una volta lì si aprirà l'interfaccia di YouTube Studio, dalla quale sarà possibile recuperare la URL e la Private Key da utilizzare all'interno dello script FFmpeg che troverete su GitHub.
Lo streaming, una volta alimentato dai propri contenuti tramite FFmpeg (o altro strumento similare), sarà mostrato all'interno del proprio canale e quindi immediatamente visibile a tutti i subscriber: in aggiunta, se la visualizzazione sarà stata impostata come Pubblica, sarà possibile condividere lo stream tramite la URL dedicata.
FFmpeg YouTube - Video
Questo script, pensato per il broadcast di un evento, prevede il broadcast di una sorgente video già completo di audio:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#! /bin/bash VBR="1500k" FPS="30" QUAL="ultrafast" YOUTUBE_URL=" rtmp://a.rtmp.youtube.com/live2" YOUTUBE_KEY="XXXXXXXXXX" VIDEO_SOURCE="sample.mp4" AUDIO_ENCODER="aac" $ ffmpeg -re \ -f lavfi \ -i "$VIDEO_SOURCE" \ -c:v libx264 -preset $QUAL -r $FPS -g $(($FPS *2)) -b:v $VBR \ -c:a $AUDIO_ENCODER -threads 6 -ar 44100 -b:a 128k -bufsize 512k -pix_fmt yuv420p \ -f $YOUTUBE_URL/$YOUTUBE_KEY |
L'ultima versione di questo script la trovate disponibile su GitHub a questo indirizzo.
FFmpeg YouTube - Video e Audio
Questo script è simile al precedente, ma prevede l'invio di una sorgente video e di una sorgente audio separata, che saranno unite in un unico broadcast:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#! /bin/bash VBR="1500k" FPS="30" QUAL="ultrafast" YOUTUBE_URL=" rtmp://a.rtmp.youtube.com/live2" YOUTUBE_KEY="XXXXXXXXXX" VIDEO_SOURCE="sample.jpg" AUDIO_SOURCE="sample.mp3" AUDIO_ENCODER="aac" ffmpeg \ -loop 1 \ -re \ -framerate $FPS \ -i "$VIDEO_SOURCE" \ -thread_queue_size 512 \ -i "$AUDIO_SOURCE" \ -c:v libx264 -preset $QUAL -r $FPS -g $(($FPS *2)) -b:v $VBR \ -c:a $AUDIO_ENCODER -threads 6 -ar 44100 -b:a 128k -bufsize 512k -pix_fmt yuv420p \ -f flv $YOUTUBE_URL/$YOUTUBE_KEY |
L'ultima versione di questo script la trovate disponibile su GitHub a questo indirizzo.
FFmpeg YouTube - Audio + Immagine
Questo script, pensato per una web radio, prevede l'invio di un'immagine statica (una sorta di "copertina") accompagnata da una sorgente audio codificata con i seguenti parametri:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#! /bin/bash VBR="1500k" FPS="30" QUAL="ultrafast" YOUTUBE_URL=" rtmp://a.rtmp.youtube.com/live2" YOUTUBE_KEY="XXXXXXXXXX" VIDEO_SOURCE="sample.jpg" AUDIO_SOURCE="sample.mp3" AUDIO_ENCODER="aac" ffmpeg \ -loop 1 \ -re \ -framerate $FPS \ -i "$VIDEO_SOURCE" \ -thread_queue_size 512 \ -i "$AUDIO_SOURCE" \ -c:v libx264 -tune stillimage -pix_fmt yuv420p -preset $QUAL -r $FPS -g $(($FPS *2)) -b:v $VBR \ -c:a $AUDIO_ENCODER -threads 6 -ar 44100 -b:a 128k -bufsize 512k -pix_fmt yuv420p \ -f flv $YOUTUBE_URL/$YOUTUBE_KEY |
L'ultima versione di questo script la trovate disponibile su GitHub a questo indirizzo.
Conclusioni
Per il momento è tutto: ci auguriamo che questi script possano aiutare altri appassionati che desiderano effettuare lo streaming dei loro contenuti con FFmpeg. Alla prossima!