En este artículo, aprenderemos algunos comandos comunes para convertir y administrar características específicas de los archivos multimedia. Aunque intentamos mostrar operaciones equivalentes para todos los procedimientos, no todas las operaciones son posibles en ambas aplicaciones.
En muchos casos, los comandos que se muestran pueden combinarse en una sola operación de línea de comandos, lo que sucede cuando se usan realmente. Por ejemplo, no hay nada que te impida configurar la tasa de bits de un archivo de salida en la misma operación que una conversión de archivo. En este artículo, a menudo mostramos estas operaciones como comandos separados para mayor claridad.
La conversión se realiza con estas aplicaciones:
Características de la pantalla
Tanto Shaka Packager como FFmpeg se pueden usar para inspeccionar el contenido de un archivo multimedia y, luego, mostrar las características de una transmisión. Sin embargo, ambos proporcionan una salida diferente para el mismo contenido multimedia.
Características con Shaka Packager
packager input=glocken.mp4 --dump_stream_info
El resultado se ve así:
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
Características con FFmpeg
ffmpeg -i glocken.mp4
El resultado se ve así:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'glocken.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.83.100
Duration: 00:00:10.03, start: 0.000000, bitrate: 8063 kb/s
Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1920x1080, 7939 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, 127 kb/s (default)
Metadata:
handler_name : SoundHandler
At least one output file must be specified
Demux (separado) las transmisiones de audio y video
Shaka Packager requiere demuxing cuando se convierten archivos. Esto también es necesario para usar frameworks de medios.
Demuxing de Shaka Packager
MP4
packager input=myvideo.mp4,stream=video,output=myvideo_video.mp4
packager input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a
o:
packager \
input=myvideo.mp4,stream=video,output=myvideo_video.mp4 \
input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a
WebM
packager \
input=myvideo.webm,stream=video,output=myvideo_video.webm \
input=myvideo.webm,stream=audio,output=myvideo_audio.webm
Demuxing de FFmpeg
MP4
ffmpeg -i myvideo.mp4 -vcodec copy -an myvideo_video.mp4
ffmpeg -i myvideo.mp4 -acodec copy -vn myvideo_audio.m4a
WebM
ffmpeg -i myvideo.webm -vcodec copy -an myvideo_video.webm
ffmpeg -i myvideo.webm -acodec copy -vn myvideo_audio.webm
Remux (combinar) las transmisiones de audio y video
En algunos casos, deberás combinar el audio y el video en un solo contenedor. en especial cuando no se usa un framework de medios. Esto es algo que FFmpeg puede manejar bastante bien y es algo que Shaka Packager no admite actualmente.
ffmpeg -i myvideo_video.webm -i myvideo_audio.webm -c copy myvideo.webm
Cambia las características
Tasa de bits
Para FFmpeg, podemos hacer esto mientras se realiza la conversión a .mp4
o .webm
.
ffmpeg -i myvideo.mov -b:v 350K myvideo.mp4
ffmpeg -i myvideo.mov -vf setsar=1:1 -b:v 350K myvideo.webm
Dimensiones (resolución)
ffmpeg -i myvideo.webm -s 1920x1080 myvideo_1920x1080.webm
File type
Shaka Packager no puede procesar archivos .mov
, por lo que no se puede usar para convertir archivos de ese formato.
.mov
a .mp4
ffmpeg -i myvideo.mov myvideo.mp4
.mov
a .webm
ffmpeg -i myvideo.mov myvideo.webm
Sincroniza audio y video
Para asegurarte de que el audio y el video se sincronicen durante la reproducción, inserta fotogramas clave.
ffmpeg -i myvideo.mp4 -keyint_min 150 -g 150 -f webm -vf setsar=1:1 out.webm
MP4/H.264
ffmpeg -i myvideo.mp4 -c:v libx264 -c:a copy myvideo.mp4
Audio para MP4
ffmpeg -i myvideo.mp4 -c:v copy -c:a aac myvideo.mp4
WebM/VP9
ffmpeg -i myvideo.webm -v:c libvpx-vp9 -v:a copy myvideo.webm
Audio para un WebM
ffmpeg -i myvideo.webm -v:c copy -v:a libvorbis myvideo.webm
ffmpeg -i myvideo.webm -v:c copy -v:a libopus myvideo.webm
Video on demand y transmisión en vivo
Hay dos tipos de protocolos de transmisión que demostraremos en este artículo. La primera es la transmisión adaptable y dinámica a través de HTTP (DASH), que es una técnica de transmisión con tasa de bits adaptable y un método basado en estándares web para presentar video a pedido. El segundo es HTTP Live Streaming (HLS), que es el estándar de Apple para transmisión en vivo y video on demand para la Web.
DASH/MPD
En este ejemplo, se genera el archivo de salida de descripción de presentación multimedia (MPD) a partir de las transmisiones de audio y video.
packager \
input=myvideo.mp4,stream=audio,output=myvideo_audio.mp4 \
input=myvideo.mp4,stream=video,output=myvideo_video.mp4 \
--mpd_output myvideo_vod.mpd
HLS
Estos ejemplos generan un archivo de salida M3U8
a partir de las transmisiones de audio y video, que es una playlist multimedia con codificación UTF-8.
ffmpeg -i myvideo.mp4 -c:a copy -b:v 8M -c:v copy -f hls \
-hls_time 10 -hls_list_size 0 myvideo.m3u8
O BIEN:
packager \
'input=myvideo.mp4,stream=video,segment_template=output$Number$.ts,playlist_name=video_playlist.m3u8' \
'input=myvideo.mp4,stream=audio,segment_template=output_audio$Number$.ts,playlist_name=audio_playlist.m3u8,hls_group_id=audio,hls_name=ENGLISH' \
--hls_master_playlist_output="master_playlist.m3u8"
Ahora que esperamos que comprendamos bien cómo convertir archivos, podemos basarnos en lo que aprendimos en este artículo y, a continuación, aprender sobre la encriptación de medios.