Nozioni di base sulle applicazioni multimediali

Derek Herman
Derek Herman
Joe Medley
Joe Medley

Lavorare con i contenuti multimediali spesso richiede la modifica delle caratteristiche dei file multimediali, come la velocità in bit o la risoluzione. Trovare un modo semplice per iniziare può essere piuttosto scoraggiante. In questa pagina scoprirai gli strumenti utilizzati e come installarli rapidamente.

Innanzitutto, descriviamo l'utilizzo di base di due comuni utilità multimediali a riga di comando: Shaka Packager e FFmpeg, per poi aiutarti a installare rapidamente gli strumenti. Perché coprire due applicazioni? Sebbene entrambi siano efficaci e utili da soli, nessuno dei due offre tutto il necessario per preparare i contenuti multimediali per il web. Abbiamo anche creato le pagine Conversione di contenuti multimediali e Crittografia di contenuti multimediali che mostrano molte altre operazioni 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 sono le applicazioni GUI Miro, HandBrake e VLC. Esistono anche servizi di codifica/transcodifica come Zencoder, Amazon Elastic Encoder e l'API Google Transcoder.

Shaka Packager

Shaka Packager è un SDK di packaging dei contenuti multimediali senza costi. Se utilizzi un media player sul tuo sito, Shaka Packager è lo strumento che ti serve 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 le funzionalità di sicurezza principali: crittografia comune e gestione dei diritti digitali (DRM) Widevine. Può anche gestire live streaming e video on demand.

Nonostante quanto indicato sul pacchetto, questa utility non è destinata solo agli sviluppatori C++. Puoi utilizzarlo sia come libreria per la creazione di software multimediale sia come utility a riga di comando per preparare i file multimediali per la riproduzione sul web. È la seconda capacità che ci serve. Infatti, per i creator di contenuti multimediali web, Shaka Packager è l'unico modo per svolgere alcune attività senza spendere soldi per applicazioni commerciali costose.

Ecco il pattern di base per un comando Shaka Packager:

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

Non è esattamente quello che ottieni se digiti packager -help. Questo esempio è più semplice da comprendere e riflette gli esempi nella documentazione di Shaka Packager. Tieni presente che nel pattern sono presenti più elementi stream_descriptor. Anche se non lo mostriamo, puoi manipolare i flussi video e audio di un file separatamente in un unico comando.

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

packager stream_descriptor [stream_descriptor-n] [flags]

packager input=glocken.mp4                       --dump_stream_info

Il comando genera il seguente output:

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 nella sezione Nozioni di base sui file multimediali e tieni presente alcune cose. L'altezza e la larghezza sono corrette per il Full HD e i codec audio e video sono tra i codec preferiti per i rispettivi tipi di contenitore, AAC per l'audio e H264 per il video. Tieni inoltre presente che gli stream vengono identificati con numeri. Sono utili per operazioni che manipolano l'audio e il video separatamente.

Tieni presente che l'output riportato sopra non mostra la velocità in bit. Nonostante ciò che manca, questo output è più facile da leggere, quindi lo utilizziamo quando possibile. Quando abbiamo bisogno di informazioni che Shaka Packager non può ottenere, ad esempio 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 funzionalità non sono migliori o peggiori di quelle di Shaka Packager. Sono solo diversi.

Il pattern di base di un comando FFmpeg è il seguente:

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

Come Shaka Packager, questa applicazione può gestire più stream. Alcune delle sue opzioni vengono utilizzate in più posizioni e manipolano l'output del file in modo diverso a seconda di dove si trovano nel comando. Tienilo presente quando esamini le domande su FFmpeg su Stack Overflow e su siti simili.

Confronteremo di nuovo il pattern di base con l'esempio per la visualizzazione delle caratteristiche del file.

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

    ffmpeg                                     -i glocken.mp4

Oltre alle informazioni che ti abbiamo richiesto, viene stampato anche un messaggio di errore come mostrato nell'esempio seguente. Questo perché tecnicamente si tratta di un uso scorretto di FFmpeg. La utilizziamo perché mostra le 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 di applicazioni con Docker

Se intendi seguire la procedura e provare i nostri comandi, puoi installare gli strumenti necessari manualmente o scegliere la strada più semplice e utilizzare Docker. Ti consigliamo di utilizzare Docker, perché ti farà risparmiare molto tempo. Inoltre, abbiamo fornito le istruzioni per eseguire la configurazione rapidamente.

  1. Per iniziare, crea una nuova directory sul tuo computer denominata media-tools. Puoi utilizzare il nome che preferisci, ma tieni presente che le istruzioni riportate di seguito 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 di compilazione. Questo è importante perché media è il luogo in cui vengono archiviati i file su cui intendiamo eseguire operazioni e alcuni di questi potrebbero essere piuttosto grandi. Se inserisci Dockerfile direttamente in media-tools, la creazione dell'immagine rallenterebbe se dovessi ricostruirla in futuro, ad esempio per cambiare le versioni installate.

  3. Crea /media-tools/docker/Dockerfile e aggiungi le seguenti istruzioni di compilazione:

    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. Su 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 di FFmpeg e Shaka Packager per verificare che tutto sia andato a buon fine 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 a imparare i concetti di base, passando ai concetti di base dello streaming di contenuti multimediali.