Conversão de mídia

Derek herman
Derek Herman
Joe medley
Joe Medley

Neste artigo, aprenderemos alguns comandos comuns para converter e manipular características específicas de arquivos de mídia. Embora tenhamos tentado mostrar operações equivalentes para todos os procedimentos, nem todas são possíveis nos dois aplicativos.

Em muitos casos, os comandos mostrados podem ser combinados em uma única operação de linha de comando e seriam quando realmente usados. Por exemplo, não há nada que impeça você de definir a taxa de bits de um arquivo de saída na mesma operação que uma conversão de arquivo. Neste artigo, geralmente mostramos essas operações como comandos separados para maior clareza.

A conversão é feita com estes aplicativos:

Características da tela

O Shaka Packager e o FFmpeg podem ser usados para inspecionar o conteúdo de um arquivo de mídia e, em seguida, mostrar as características de um stream. No entanto, ambos fornecem saídas diferentes para a mesma mídia.

Características que usam Shaka Packager

packager input=glocken.mp4 --dump_stream_info

A saída é semelhante a esta:

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 que usam o FFmpeg

ffmpeg -i glocken.mp4

A saída é semelhante a esta:

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 (separar) os streams de áudio e vídeo

O Shaka Packager exige o controle de multiplexação ao converter arquivos. Isso também é necessário para usar frameworks de mídia.

Desmuxing do Shaka Packager

MP4

packager input=myvideo.mp4,stream=video,output=myvideo_video.mp4
packager input=myvideo.mp4,stream=audio,output=myvideo_audio.m4a

ou:

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

De multiplexação do 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) os streams de áudio e vídeo

Em algumas situações, será necessário combinar o áudio e o vídeo em um único contêiner. Especialmente quando não estiver usando um framework de mídia. O FFmpeg pode lidar muito bem com isso e é algo que o Shaka Packager não suporta atualmente.

ffmpeg -i myvideo_video.webm -i myvideo_audio.webm -c copy myvideo.webm

Alterar características

Taxa de bits

Para o FFmpeg, podemos fazer isso ao converter para .mp4 ou .webm.

ffmpeg -i myvideo.mov -b:v 350K myvideo.mp4
ffmpeg -i myvideo.mov -vf setsar=1:1 -b:v 350K myvideo.webm

Dimensões (resolução)

ffmpeg -i myvideo.webm -s 1920x1080 myvideo_1920x1080.webm

Tipo de arquivo

Shaka Packager não pode processar arquivos .mov e, portanto, não pode ser usado para converter arquivos desse formato.

.mov a .mp4

ffmpeg -i myvideo.mov myvideo.mp4

.mov a .webm

ffmpeg -i myvideo.mov myvideo.webm

Sincronizar áudio e vídeo

Para garantir a sincronização de áudio e vídeo durante a reprodução, insira frames-chave.

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

Áudio para MP4

ffmpeg -i myvideo.mp4 -c:v copy -c:a aac myvideo.mp4

WebM/VP9 (em inglês)

ffmpeg -i myvideo.webm -v:c libvpx-vp9 -v:a copy myvideo.webm

Áudio para um 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

Vídeo sob demanda e transmissão ao vivo

Dois tipos de protocolos de streaming serão demonstrados neste artigo. O primeiro é o Dynamic Adaptive Streaming over HTTP (DASH), uma técnica de streaming de taxa de bits adaptável e um método baseado em padrões da Web de apresentação de vídeo sob demanda. O segundo é o HTTP Live Streaming (HLS), que é o padrão da Apple para transmissão ao vivo e vídeo sob demanda para a Web.

DASH/MPD

Este exemplo gera o arquivo de saída da descrição de apresentação de mídia (MPD, na sigla em inglês) com base nos streams de áudio e vídeo.

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

Esses exemplos geram um arquivo de saída M3U8 dos streams de áudio e vídeo, que é uma playlist multimídia codificada em 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

OU:

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"

Agora que esperamos ter uma boa compreensão de como converter arquivos, podemos desenvolver o que aprendemos neste artigo e aprender sobre criptografia de mídia a seguir.