Trabajar con contenido multimedia a menudo requiere cambiar las características de los archivos multimedia, como la tasa de bits o la resolución. Encontrar una forma sencilla de comenzar puede ser bastante abrumador. En esta página, aprenderás sobre las herramientas que se usan y cómo instalarlas con rapidez.
En primer lugar, describimos el uso básico de dos utilidades multimedia comunes de línea de comandos: Shaka Packager y FFmpeg. Luego, te ayudamos a instalar las herramientas rápidamente. ¿Por qué se cubren dos aplicaciones? Si bien ambos son potentes y útiles por sí solos, ninguno hace todo lo necesario para preparar el contenido multimedia para la Web. También creamos las páginas Conversión de contenido multimedia y Criptografía de contenido multimedia, que muestran muchas más operaciones comunes con estas dos aplicaciones.
Estas aplicaciones no son las únicas opciones disponibles para las tareas de manipulación de archivos, pero son dos de las más comunes y potentes. Otras opciones incluyen las aplicaciones de GUI Miro, HandBrake y VLC. También hay servicios de codificación y transcodificación, como Zencoder, Amazon Elastic Encoder y la API de Google Transcoder.
Empaquetador de Shaka
Shaka Packager es un SDK de empaquetado de contenido multimedia gratuito. Si usaras un reproductor multimedia en tu sitio, usarías Shaka Packager para preparar los archivos. Admite la conversión para los dos protocolos de transmisión de video más comunes: la transmisión adaptable y dinámica a través de HTTP (DASH) o HTTP Live Streaming (HLS). Shaka Packager admite funciones de seguridad clave: encriptación común y administración de derechos digitales (DRM) de Widevine. También puede controlar la transmisión en vivo y el video on demand.
A pesar de lo que se indica en el paquete, esta utilidad es para más desarrolladores que los de C++. Puedes usarla como biblioteca para compilar software multimedia y como una utilidad de línea de comandos para preparar archivos multimedia para la reproducción web. Es la última capacidad la que nos resulta útil aquí. De hecho, para los creadores de contenido multimedia web, Shaka Packager es la única forma de realizar algunas tareas sin gastar dinero en aplicaciones comerciales costosas.
Este es el patrón básico de un comando de Shaka Packager:
packager stream_descriptor [stream_descriptor-2 [stream_descriptor-n]] [flags]
Esto no es exactamente lo que obtienes si escribes packager -help
. Este ejemplo es más fácil de razonar y refleja los ejemplos de la documentación de Shaka Packager. Ten en cuenta que hay varios elementos stream_descriptor
en el patrón. Aunque no lo mostramos, puedes manipular las transmisiones de video y audio de un archivo por separado en un solo comando.
Compara este patrón básico con un uso simple que muestra las características del archivo. En el ejemplo, alineamos las partes equivalentes.
packager stream_descriptor [stream_descriptor-n] [flags]
packager input=glocken.mp4 --dump_stream_info
El comando muestra lo siguiente:
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
Busca las características que se analizan en Conceptos básicos de los archivos multimedia y observa algunos aspectos. La altura y el ancho son correctos para la resolución Full HD, y los códecs de audio y video se encuentran entre los códecs preferidos para sus tipos de contenedores, AAC para audio y H264 para video. También observa que las transmisiones continuas se identifican con números. Estos son útiles para las operaciones que manipulan el audio y el video por separado.
Ten en cuenta que el resultado anterior no muestra la tasa de bits. A pesar de lo que falta, esta salida es más fácil de leer, por lo que la usamos siempre que podemos. Cuando necesitamos información que Shaka Packager no puede obtener, como la tasa de bits, usamos FFmpeg.
FFmpeg
FFmpeg también es una aplicación gratuita para grabar, convertir y transmitir archivos multimedia. Sus capacidades no son mejores ni peores que las de Shaka Packager. Solo son diferentes.
El patrón básico de un comando FFmpeg se ve de la siguiente manera:
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
Al igual que Shaka Packager, esta aplicación puede controlar varias transmisiones. Algunas de sus opciones se usan en varias ubicaciones y manipulan el resultado del archivo de manera diferente según dónde se encuentren en el comando. Ten esto en cuenta cuando veas preguntas sobre FFmpeg en Stack Overflow y sitios similares.
Una vez más, compararemos el patrón básico con el ejemplo para mostrar las características del archivo.
ffmpeg [GeneralOptions] [InputFileOptions] -i input [OutputFileOptions] output
ffmpeg -i glocken.mp4
Además de la información que solicitamos, también se imprime un mensaje de error, como se muestra en el siguiente ejemplo. Esto se debe a que, técnicamente, es un uso incorrecto de FFmpeg. La usamos porque muestra información que nos interesa.
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
Cómo instalar aplicaciones con Docker
Si planeas seguirnos y probar nuestros comandos, puedes instalar las herramientas necesarias de forma manual o tomar la ruta fácil y usar Docker. Te sugerimos que uses Docker, ya que te ahorrará mucho tiempo. Además, te proporcionamos las instrucciones para que te configures rápidamente.
Comienza por crear un directorio nuevo en algún lugar de tu computadora llamado
media-tools
. Puedes usar el nombre que quieras, pero ten en cuenta que, en las siguientes instrucciones, se supone que usasmedia-tools
como nombre del directorio.Crea un directorio
docker
ymedia
dentro demedia-tools
. Esto mantendrá tu directoriomedia
fuera del contexto de compilación. Esto es importante porquemedia
es donde se almacenan los archivos en los que planeamos realizar operaciones, y algunos de ellos podrían ser bastante grandes. Si colocas elDockerfile
directamente enmedia-tools
, se ralentizaría la compilación de la imagen si la vuelves a compilar en el futuro, quizás para cambiar las versiones instaladas.Crea
/media-tools/docker/Dockerfile
y agrega las siguientes instrucciones de compilación: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"]
Compila la imagen:
docker build -t media-tools ./docker
Ejecuta la imagen como un shell interactivo. En Linux:
docker run -w /media -v ${PWD}/media:/media -it --rm media-tools /media #
En Windows:
docker run -w /media -v %cd%/media:/media -it --rm media-tools /media #
Mientras ejecutas la imagen, puedes verificar las versiones de FFmpeg y Shaka Packager para validar que todo se haya realizado correctamente. Para ello, ejecuta ffmpeg -version
y packager --version
. El resultado debería verse así:
/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
Ahora que probaste Shaka Packager y FFmpeg, puedes seguir aprendiendo los conceptos básicos. A continuación, veremos los conceptos básicos de la transmisión de contenido multimedia.