L'uso di 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 complicato. In questa pagina scoprirai gli strumenti utilizzati e come installarli rapidamente.
Innanzitutto, descriviamo l'utilizzo di base per due utilità multimediali a riga di comando comuni: Shaka Packager e FFmpeg, poi ti aiuteremo a installare rapidamente gli strumenti. Perché coprire due applicazioni? Sebbene entrambi siano potenti e utili da soli, nessuno di questi fa tutto il necessario per preparare i contenuti multimediali per il web. Abbiamo anche creato le pagine Conversione di contenuti multimediali e Crittografia dei contenuti multimediali che mostrano molte operazioni più comuni con queste due applicazioni.
Queste applicazioni non sono le uniche disponibili per le attività di manipolazione dei file, ma sono due delle più comuni e potenti. Sono disponibili anche le applicazioni con GUI Miro, HandBrake e VLC. Esistono anche servizi di codifica/transcodifica come Zencoder, Amazon Elastic Encoder e API Google Transcoder.
Confezionatore Shaka
Shaka Packager è un SDK per il pacchetto multimediale senza costi. Se sul tuo sito usi un media player, Shaka Packager è la soluzione che useresti 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 principali funzionalità di sicurezza: crittografia comune e Gestione dei diritti digitali (DRM) di Widevine. Può gestire anche live streaming e video on demand.
Nonostante ciò che dica sul pacchetto, questa utilità è destinata a più di sviluppatori 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 capacità che ci è utile. Infatti, per i creator di contenuti multimediali sul web, 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 è esattamente quello che ottieni se digiti packager -help
. È più facile ragionare su questo esempio e riflette gli esempi nella documentazione di Shaaka Packager. Tieni presente che il pattern contiene più elementi stream_descriptor
. Anche se non viene visualizzato, puoi manipolare gli stream
video e audio di un file separatamente in un unico comando.
Confronta questo pattern di base con un semplice utilizzo che mostra le caratteristiche del file. Nell'esempio, abbiamo allineato parti equivalenti.
packager stream_descriptor [stream_descriptor-n] [flags]
packager input=glocken.mp4 --dump_stream_info
Il comando restituisce questo risultato:
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 in 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 rispettivi tipi di container, AAC per l'audio e H264 per i video. Tieni inoltre presente che i flussi sono identificati da numeri. Sono utili per operazioni che manipolano audio e video separatamente.
Nota che l'output in alto non mostra la velocità in bit. Nonostante ciò che manca, questo output è più facile da leggere, quindi lo usiamo ogni volta che è possibile. 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 solo diversi.
Il pattern di base di 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 opzioni vengono utilizzate in più posizioni e manipolano l'output del file in modo diverso a seconda della posizione nel comando. Tienine conto quando leggi le domande su FFmpeg su Stack Overflow e su siti simili.
Confronteremo nuovamente il pattern di base con l'esempio per la visualizzazione delle caratteristiche dei file.
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
ffmpeg -i glocken.mp4
Oltre alle informazioni richieste, viene stampato anche un messaggio di errore, come mostrato nell'esempio riportato di seguito. Questo perché tecnicamente si tratta di un uso non corretto 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 gli strumenti necessari manualmente oppure seguire il percorso semplice e utilizzare Docker. Ti consigliamo di utilizzare Docker, perché ti farà risparmiare molto tempo. Inoltre, abbiamo fornito le istruzioni per eseguire rapidamente la configurazione.
Inizia creando una nuova directory sul tuo computer con il nome
media-tools
; puoi utilizzare il nome che preferisci, ma tieni presente che le seguenti istruzioni presuppongono che il nome della directory siamedia-tools
.Crea una directory
docker
emedia
all'interno dimedia-tools
. La directorymedia
non verrà inserita nel contesto della build. Questo è importante perchémedia
è la posizione in cui vengono archiviati i file su cui prevediamo di eseguire operazioni e alcuni potrebbero essere molto grandi. Se posizioni l'elementoDockerfile
direttamente inmedia-tools
, la creazione dell'immagine verrebbe rallentata nel caso in cui dovessi ricrearla lungo la strada, ad esempio per cambiare le versioni installate.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"]
Crea l'immagine:
docker build -t media-tools ./docker
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 per FFmpeg che per Shaka Packager
per convalidare 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 passando alle nozioni di base sullo streaming di contenuti multimediali.