Nozioni di base sulle applicazioni multimediali

Derek Herman
Derek Herman
Mario Medley
Mario Medley

Spesso lavorare con i contenuti multimediali richiede la modifica delle caratteristiche dei file multimediali, come la velocità in bit o la risoluzione. Trovare un modo diretto per iniziare può essere abbastanza difficile. In questa pagina scoprirai gli strumenti utilizzati e come installarli rapidamente.

Innanzitutto, descriviamo l'utilizzo di base di due utilità multimediali a riga di comando comuni: Shaka Packager e FFmpeg. Dopodiché ti aiuteremo a installare rapidamente gli strumenti. Perché coprire due applicazioni? Sebbene siano entrambi potenti e utili di per sé, né è necessario tutto per preparare i media per il web. Inoltre, abbiamo creato le pagine Conversione dei contenuti multimediali e Crittografia dei contenuti multimediali che mostrano molte operazioni più comuni con queste due applicazioni.

Queste applicazioni non sono le uniche opzioni disponibili per le attività di manipolazione dei file, ma sono due delle più comuni e potenti. Altre opzioni includono le applicazioni GUI Miro, HandBrake e VLC. Esistono anche servizi di codifica/transcodifica come Zencoder, Amazon Elastic Encoder e API Google Transcoder.

Strumento per la creazione di pacchetti Shaka

Shaka Packager è un SDK per pacchetti multimediali senza costi. Se utilizzi un lettore multimediale sul tuo sito, Shaka Packager è lo strumento da utilizzare per preparare i file. Supporta la conversione per i due protocolli di streaming video più comuni: Dynamic Adaptive Streaming over HTTP (DASH) o HTTP Live Streaming (HLS). Shaka Packager supporta funzionalità di sicurezza chiave: la crittografia comune e la gestione dei diritti digitali (DRM) di Widevine. Può anche gestire il live streaming e i video on demand.

Nonostante ciò sia indicato sul pacchetto, questa utilità è destinata a molti più sviluppatori di C++. Puoi utilizzarla sia come libreria per la creazione di software multimediali sia come utilità a riga di comando per preparare i file multimediali per la riproduzione sul web. È l'ultima funzionalità che ci risulta utile in questo caso. Infatti, per i creatori di web media, Shaka Packager è l'unico modo per svolgere alcune attività senza spendere denaro in costose applicazioni commerciali.

Ecco il pattern di base per un comando Shaka Packager:

packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]

Non è proprio quello che ottieni digitando packager -help. Questo esempio è più semplice da ragionare e riflette gli esempi contenuti nella documentazione di Shaka Packager. Tieni presente che ci sono più elementi stream_descriptor nel pattern. Anche se non lo mostriamo, puoi manipolare separatamente gli stream video e audio di un file con un unico comando.

Confronta questo pattern di base con un semplice utilizzo che mostra le caratteristiche dei file. Nell'esempio, abbiamo allineato le parti equivalenti.

packager stream_descriptor [stream_descriptor-n] [flags]

packager input=glocken.mp4                       --dump_stream_info

Il comando restituisce quanto segue:

File "glocken.mp4":
Found 2 stream(s).
Stream [0] type: Video
 codec_string: avc1.640028
 time_scale: 30000
 duration: 300300 (10.0 seconds)
 is_encrypted: false
 codec: H264
 width: 1920
 height: 1080
 pixel_aspect_ratio: 1:1
 trick_play_factor: 0
 nalu_length_size: 4

Stream [1] type: Audio
 codec_string: mp4a.40.2
 time_scale: 48000
 duration: 481280 (10.0 seconds)
 is_encrypted: false
 codec: AAC
 sample_bits: 16
 num_channels: 2
 sampling_frequency: 48000
 language: eng
 seek_preroll_ns: 20833

Cerca le caratteristiche descritte nell'articolo Nozioni di base sui file multimediali e nota alcune cose. L'altezza e la larghezza sono corrette per il formato Full HD e i codec audio e video sono tra i codec preferiti per i tipi di container, AAC per l'audio e H264 per video. Nota anche che i flussi sono identificati con numeri. Sono utili per le operazioni che manipolano separatamente audio e video.

Tieni presente che l'output riportato sopra non mostra la velocità in bit. Nonostante ciò che manca, l'output è più facile da leggere, quindi lo usiamo ogni volta che possiamo. Quando abbiamo bisogno di informazioni che Shaka Packager non è in grado di ottenere, come la velocità in bit, utilizziamo FFmpeg.

FFmpeg

FFmpeg è anche un'applicazione senza costi per la registrazione, la conversione e lo streaming di file multimediali. Le sue capacità non sono migliori o peggiori di quelle di Shaka Packager. Sono semplicemente diverse.

Il pattern di base per un comando FFmpeg è simile al seguente:

ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output

Come Shaka Packager, questa applicazione è in grado di gestire più flussi. Alcune delle sue opzioni sono utilizzate in più posizioni e manipolano l'output del file in modo diverso a seconda di dove si trovano nel comando. Tieni presente questo aspetto quando esamini le domande FFmpeg su Stack Overflow e su siti simili.

Confronteremo ancora una volta il pattern di base con l'esempio di visualizzazione delle caratteristiche del file.

    ffmpeg [GeneralOptions] [InputFileOptions] -i input        [OutputFileOptions] output

    ffmpeg                                     -i glocken.mp4

Oltre alle informazioni richieste, viene visualizzato anche un messaggio di errore, come mostrato nell'esempio seguente. Il motivo è che questo è tecnicamente un utilizzo errato di FFmpeg. Li usiamo perché mostra informazioni che ci interessano.

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    encoder         : Lavf58.17.100
  Duration: 00:01:47.53, start: 0.000000, bitrate: 10715 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 10579 kb/s, 29.97 fps, 29.97 tbr, 30k tbn, 59.94 tbc (default)
    Metadata:
      handler_name    : VideoHandler
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 128 kb/s (default)
    Metadata:
      handler_name    : SoundHandler
At least one output file must be specified

Installazione delle applicazioni con Docker

Se prevedi di seguire e provare i nostri comandi, puoi installare manualmente gli strumenti richiesti o seguire il percorso più semplice e utilizzare Docker. Ti consigliamo di usare Docker, perché ti farà risparmiare molto tempo. Inoltre, ti forniamo le istruzioni per iniziare a eseguire rapidamente la configurazione.

  1. Inizia creando una nuova directory sul tuo computer denominata media-tools. Puoi utilizzare il nome che preferisci, tenendo presente che le seguenti istruzioni presuppongono che tu stia utilizzando media-tools come nome della directory.

  2. Crea una directory docker e media all'interno di media-tools. In questo modo la directory media rimarrà fuori dal contesto della build. Questo è importante perché media è la posizione in cui vengono archiviati i file su cui prevediamo di eseguire operazioni e alcuni di questi potrebbero essere molto grandi. L'inserimento di Dockerfile direttamente in media-tools rallenterà la creazione dell'immagine nel caso in cui dovessi ricrearla in futuro, magari per cambiare le versioni installate.

  3. Crea /media-tools/docker/Dockerfile e aggiungi le seguenti istruzioni per la build:

    FROM google/shaka-packager:release-v2.4.3 as packager
    FROM jrottenberg/ffmpeg:4.3.2-alpine38
    COPY --from=packager /usr/bin /usr/bin
    ENTRYPOINT  ["sh"]
    
  4. Crea l'immagine:

    docker build -t media-tools ./docker
    
  5. Esegui l'immagine come shell interattiva. In Linux:

    docker run -w /media -v ${PWD}/media:/media -it --rm media-tools
    /media #
    

    In Windows:

    docker run -w /media -v %cd%/media:/media -it --rm media-tools
    /media #
    

Durante l'esecuzione dell'immagine, puoi controllare le versioni sia di FFmpeg che di Shaka Packager per verificare che tutto sia riuscito eseguendo ffmpeg -version e packager --version. L'output dovrebbe essere simile al seguente:

/media # ffmpeg -version
ffmpeg version 4.3.2 Copyright (c) 2000-2021 the FFmpeg developers
built with gcc 6.4.0 (Alpine 6.4.0)
configuration: --disable-debug --disable-doc --disable-ffplay --enable-shared --enable-avresample --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-gpl --enable-libass --enable-fontconfig --enable-libfreetype --enable-libvidstab --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libxcb --enable-libx265 --enable-libxvid --enable-libx264 --enable-nonfree --enable-openssl --enable-libfdk_aac --enable-postproc --enable-small --enable-version3 --enable-libbluray --enable-libzmq --extra-libs=-ldl --prefix=/opt/ffmpeg --enable-libopenjpeg --enable-libkvazaar --enable-libaom --extra-libs=-lpthread --enable-libsrt --enable-libaribb24 --extra-cflags=-I/opt/ffmpeg/include --extra-ldflags=-L/opt/ffmpeg/lib
libavutil      56. 51.100 / 56. 51.100
libavcodec     58. 91.100 / 58. 91.100
libavformat    58. 45.100 / 58. 45.100
libavdevice    58. 10.100 / 58. 10.100
libavfilter     7. 85.100 /  7. 85.100
libavresample   4.  0.  0 /  4.  0.  0
libswscale      5.  7.100 /  5.  7.100
libswresample   3.  7.100 /  3.  7.100
libpostproc    55.  7.100 / 55.  7.100
/media # packager --version
packager version v2.4.3-dd9870075f-release

Ora che hai provato a utilizzare Shaka Packager e FFmpeg, puoi continuare ad apprendere i concetti di base, consultando la sezione Nozioni di base sullo streaming di contenuti multimediali.