Documentação de formatos do FFmpeg
1 Descrição
Este documento descreve os formatos compatíveis (muxers e demuxers) fornecidos pela biblioteca libavformat.
2 Opções de formato
A biblioteca libavformat oferece algumas opções globais genéricas, que podem ser definidas em todos os muxers e demuxers. Além disso, cada muxer ou demuxer pode oferecer suporte às chamadas opções privadas, específicas desse componente.
As opções podem ser definidas indicando -option value nas ferramentas do FFmpeg, ou definindo o valor explicitamente nas opções de AVFormatContext, ou ainda usando a API de libavutil/opt.h para uso programático.
A seguir, a lista de opções compatíveis:
avioflags flags (input/output)
Valores possíveis:
‘direct’
Reduz o armazenamento em buffer.
probesize integer (input)
Define o tamanho de sondagem em bytes, ou seja, o volume de dados analisado para obter informações do fluxo. Um valor mais alto permite detectar mais informações quando elas estão dispersas ao longo do fluxo, mas aumenta a latência. Deve ser um número inteiro não menor que 32. O padrão é 5000000.
max_probe_packets integer (input)
Define o número máximo de pacotes armazenados em buffer ao sondar um codec. O padrão é 2500 pacotes.
packetsize integer (output)
Define o tamanho do pacote.
fflags flags
Define as flags de formato. Algumas são implementadas apenas para um número limitado de formatos.
Valores possíveis para arquivos de entrada:
‘discardcorrupt’
Descarta pacotes corrompidos.
‘fastseek’
Ativa buscas rápidas, porém imprecisas, para alguns formatos.
‘genpts’
Gera PTS ausente caso o DTS esteja presente.
‘igndts’
Ignora o DTS se o PTS também estiver definido. Caso o PTS esteja definido, o valor do DTS é definido como NOPTS. Isso é ignorado quando a flag nofillin está definida.
‘ignidx’
Ignora o índice.
‘nobuffer’
Reduz a latência introduzida pelo armazenamento em buffer durante a análise inicial dos fluxos de entrada.
‘nofillin’
Não preenche valores ausentes em campos de pacote que podem ser calculados com exatidão.
‘noparse’
Desativa os AVParsers; isso também requer +nofillin.
‘sortdts’
Tenta intercalar os pacotes de saída por DTS. No momento, disponível apenas para AVIs com índice.
Valores possíveis para arquivos de saída:
‘autobsf’
Aplica automaticamente os filtros de bitstream exigidos pelo formato de saída. Habilitado por padrão.
‘bitexact’
Grava somente dados independentes de plataforma, build e tempo. Isso garante que os checksums de arquivos e dados sejam reproduzíveis e coincidam entre plataformas. Seu uso principal é para testes de regressão.
‘flush_packets’
Grava os pacotes imediatamente.
‘shortest’
Interrompe a multiplexação ao final do fluxo mais curto. Pode ser necessário aumentar max_interleave_delta para evitar esvaziar os fluxos mais longos antes do EOF.
seek2any integer (input)
Permite buscar quadros que não são keyframes no nível do demuxer, quando compatível, se definido como 1. O padrão é 0.
analyzeduration integer (input)
Especifica quantos microssegundos são analisados para sondar a entrada. Um valor mais alto permite detectar informações mais precisas, mas aumenta a latência. O padrão é 5,000,000 microssegundos = 5 segundos.
cryptokey hexadecimal string (input)
Define a chave de descriptografia.
indexmem integer (input)
Define a memória máxima usada para o índice de marcas de tempo (por fluxo).
rtbufsize integer (input)
Define a memória máxima usada para armazenar em buffer quadros em tempo real.
fdebug flags (input/output)
Exibe informações de depuração específicas.
Valores possíveis:
‘ts’
Exibe informações de marca de tempo.
‘id3v2’
Exibe os dados do quadro ID3v2 ao fazer demuxing de arquivos que contêm tags ID3v2.
max_delay integer (input/output)
Define o atraso máximo de multiplexação ou demultiplexação em microssegundos.
fpsprobesize integer (input)
Define o número de quadros usados para sondar o fps.
audio_preload integer (output)
Define, em microssegundos, quanto antes os pacotes de áudio devem ser intercalados.
chunk_duration integer (output)
Define os microssegundos de cada fragmento.
chunk_size integer (output)
Define o tamanho em bytes de cada fragmento.
err_detect, f_err_detect flags (input)
Define as flags de detecção de erros. f_err_detect está obsoleto e deve ser usado apenas por meio da ferramenta ffmpeg.
Valores possíveis:
‘crccheck’
Verifica os CRCs incorporados.
‘bitstream’
Detecta desvios em relação à especificação de bitstream.
‘buffer’
Detecta comprimento de bitstream incorreto.
‘explode’
Aborta a decodificação ao detectar um erro menor.
‘careful’
Considera erros as situações que violam a especificação e que não foram observadas na prática.
‘compliant’
Considera erro qualquer não conformidade com a especificação.
‘aggressive’
Considera erro tudo o que um encoder sensato não deveria fazer.
max_interleave_delta integer (output)
Define a duração máxima de armazenamento em buffer para o intercalamento. A duração é expressa em microssegundos, e o padrão é 10000000 (10 segundos).
Para garantir que todos os fluxos sejam intercalados corretamente, o libavformat aguarda até ter pelo menos um pacote de cada fluxo antes de efetivamente gravar qualquer pacote no arquivo de saída. Quando alguns fluxos são "esparsos" (ou seja, há grandes lacunas entre pacotes sucessivos), isso pode resultar em armazenamento em buffer excessivo.
Este campo especifica a diferença máxima entre as marcas de tempo do primeiro e do último pacote na fila de multiplexação, acima da qual o libavformat gera um pacote independentemente de haver ou não um pacote enfileirado para todos os fluxos.
Se definido como 0, o libavformat continua armazenando pacotes em buffer até ter um pacote de cada fluxo, independentemente da diferença máxima de marca de tempo entre os pacotes em buffer.
use_wallclock_as_timestamps integer (input)
Usa o relógio de parede como marca de tempo se definido como 1. O padrão é 0.
avoid_negative_ts integer (output)
Valores possíveis:
‘make_non_negative’
Desloca as marcas de tempo para que fiquem não negativas. Observe também que isso afeta apenas as marcas de tempo negativas iniciais, e não as marcas de tempo negativas não monotônicas.
‘make_zero’
Desloca as marcas de tempo de forma que a primeira seja 0.
‘auto (default)’
Ativa o deslocamento quando exigido pelo formato de destino.
‘disabled’
Desativa o deslocamento de marca de tempo.
Quando o deslocamento está ativado, todas as marcas de tempo de saída são deslocadas na mesma quantidade. A dessincronização entre áudio, vídeo e legendas, bem como as diferenças relativas de marca de tempo, são preservadas como estariam sem o deslocamento.
skip_initial_bytes integer (input)
Define o número de bytes a serem ignorados antes de ler o cabeçalho e os quadros, se definido como 1. O padrão é 0.
correct_ts_overflow integer (input)
Corrige estouros únicos de marca de tempo se definido como 1. O padrão é 1.
flush_packets integer (output)
Libera o fluxo de E/S subjacente após cada pacote. O padrão é -1 (auto), o que significa que o protocolo subjacente decidirá; 1 ativa a liberação, com o efeito de reduzir a latência, e 0 a desativa, o que pode aumentar a taxa de transferência de E/S em alguns casos.
output_ts_offset offset (output)
Define o deslocamento de tempo de saída.
offset deve ser uma especificação de duração de tempo; consulte (ffmpeg-utils) a seção Time duration do manual ffmpeg-utils(1).
O muxer soma esse deslocamento às marcas de tempo de saída.
Especificar um deslocamento positivo significa que os fluxos correspondentes são atrasados pela duração de tempo especificada em offset. O valor padrão é 0 (ou seja, nenhum deslocamento é aplicado).
format_whitelist list (input)
Lista de demuxers permitidos separada por ",". Por padrão, todos são permitidos.
dump_separator string (input)
Separador usado para separar os campos impressos na linha de comando sobre os parâmetros do fluxo. Por exemplo, para separar os campos com quebras de linha e recuo:
ffprobe -dump_separator "
" -i ~/videos/matrixbench_mpeg2.mpg
max_streams integer (input)
Especifica o número máximo de fluxos. Pode ser usado para rejeitar arquivos que exigiriam recursos excessivos devido a um número elevado de fluxos.
skip_estimate_duration_from_pts bool (input)
Ignora a estimativa da duração de entrada quando ela exige uma sondagem adicional do PTS no final do arquivo. No momento, aplicável a MPEG-PS e MPEG-TS.
duration_probesize integer (input)
Define o tamanho de sondagem, em bytes, para a estimativa da duração de entrada quando ela realmente exige uma sondagem adicional do PTS no final do arquivo (no momento: MPEG-PS e MPEG-TS). Destina-se a usuários interessados em uma sondagem melhor das durações por si mesma, ou indiretamente por usarem, por exemplo, o demuxer concat. O caso de uso típico é um MPEG-TS CBR com taxa de bits alta, buffer de vídeo grande e um final limpo com PTS semelhantes para vídeo e áudio: nesse cenário, a grande distância física entre o último pacote de vídeo e o último pacote de áudio torna necessário ler muitos bytes para obter a duração do fluxo de vídeo. Outro caso de uso é aquele em que o comportamento padrão de sondagem alcança apenas um único quadro de vídeo que não é o último do fluxo devido à reordenação de quadros, de modo que a duração não fica precisa. Definir essa opção afeta o desempenho mesmo em arquivos pequenos, porque o tamanho de sondagem é fixo. O comportamento padrão é uma solução de compromisso de propósito geral, amplamente adaptativa, mas o tamanho de sondagem não será ampliado para obter as durações dos fluxos a qualquer custo. Deve ser um número inteiro não menor que 1, ou 0 para o comportamento padrão.
strict, f_strict integer (input/output)
Especifica com que rigor seguir os padrões. f_strict está obsoleto e deve ser usado apenas por meio da ferramenta ffmpeg.
Valores possíveis:
‘very’
segue estritamente uma versão mais antiga e mais rígida da especificação ou do software de referência
‘strict’
segue estritamente tudo o que consta na especificação, independentemente das consequências
‘normal’ ‘unofficial’
permite extensões não oficiais
‘experimental’
permite itens experimentais não padronizados, além de decoders e encoders experimentais (inacabados/em desenvolvimento/não bem testados). Observação: decoders experimentais podem representar um risco de segurança; não os use para decodificar entradas não confiáveis.
2.1 Especificadores de fluxo de formato
Os especificadores de fluxo de formato permitem selecionar um ou mais fluxos que correspondam a propriedades específicas.
A semântica exata dos especificadores de fluxo é definida pela função avformat_match_stream_specifier(), declarada no cabeçalho libavformat/avformat.h e documentada na (ffmpeg) seção Stream specifiers do manual ffmpeg(1).
3 Demuxers
Demuxers são elementos configurados no FFmpeg capazes de ler os fluxos multimídia de um tipo específico de arquivo.
Ao configurar sua compilação do FFmpeg, todos os demuxers compatíveis são ativados por padrão. Você pode listar todos os disponíveis usando a opção de configure --list-demuxers.
Você pode desativar todos os demuxers com a opção de configure --disable-demuxers, e ativar seletivamente um único demuxer com a opção --enable-demuxer=DEMUXER, ou desativá-lo com a opção --disable-demuxer=DEMUXER.
A opção -demuxers das ferramentas ff* exibirá a lista de demuxers ativados. Use -formats para ver uma lista combinada de demuxers e muxers ativados.
A seguir, a descrição de alguns dos demuxers atualmente disponíveis.
3.1 aa
Demuxer de Audible Format 2, 3 e 4.
Este demuxer é usado para demultiplexar arquivos Audible Format 2, 3 e 4 (.aa).
3.2 aac
Demuxer de Raw Audio Data Transport Stream AAC.
Este demuxer é usado para fazer demuxing de uma entrada ADTS que contém um único fluxo AAC, junto com quaisquer tags ID3v1/2 ou APE nela presentes.
3.3 apng
Demuxer de Animated Portable Network Graphics.
Este demuxer é usado para fazer demuxing de arquivos APNG. Todos os cabeçalhos, exceto a assinatura PNG, até o primeiro chunk fcTL (sem incluí-lo), são transmitidos como extradata. Os quadros são então divididos como todos os chunks entre dois fcTL, ou entre o último fcTL e o chunk IEND.
-ignore_loop bool
Ignora a variável de loop do arquivo, se definida. Habilitado por padrão.
-max_fps int
Taxa de quadros máxima, em quadros por segundo. O padrão 0 não impõe nenhum limite.
-default_fps int
Taxa de quadros padrão, em quadros por segundo, quando nenhuma é especificada no arquivo (0 significa o mais rápido possível). O padrão é 15.
3.4 asf
Demuxer de Advanced Systems Format.
Este demuxer é usado para fazer demuxing de arquivos ASF e fluxos de rede MMS.
-no_resync_search bool
Não tenta ressincronizar procurando um determinado código de início opcional.
3.5 concat
Demuxer de script de concatenação virtual.
Este demuxer lê uma lista de arquivos e outras diretivas de um arquivo de texto, e faz demuxing deles um após o outro, como se todos os seus pacotes tivessem sido multiplexados juntos.
As marcas de tempo nos arquivos são ajustadas de modo que o primeiro arquivo comece em 0 e cada arquivo seguinte comece onde o anterior termina. Observe que isso é feito de forma global e pode causar lacunas se nem todos os fluxos tiverem exatamente a mesma duração.
Todos os arquivos devem ter os mesmos fluxos (mesmos codecs, mesma base de tempo etc.).
A duração de cada arquivo é usada para ajustar as marcas de tempo do arquivo seguinte: se a duração estiver incorreta (por exemplo, porque foi calculada a partir da taxa de bits, ou porque o arquivo está truncado), isso pode causar artefatos. A diretiva duration pode ser usada para sobrepor a duração armazenada em cada arquivo.
3.5.1 Sintaxe
O script é um arquivo de texto em ASCII estendido, com uma diretiva por linha. Linhas vazias, espaços iniciais e linhas que começam com ’#’ são ignoradas. É reconhecida a seguinte diretiva:
file path
Caminho para um arquivo a ser lido; caracteres especiais e espaços devem ser escapados com barra invertida ou aspas simples.
Todas as diretivas subsequentes relacionadas a arquivo se aplicam a esse arquivo.
ffconcat version 1.0
Identifica o tipo e a versão do script.
Para que o FFmpeg reconheça o formato automaticamente, essa diretiva deve aparecer exatamente como está (sem espaço extra nem marca de ordem de bytes) na primeira linha do script.
duration dur
Duração do arquivo. Essa informação pode ser especificada a partir do arquivo; especificá-la aqui pode ser mais eficiente ou útil quando a informação do arquivo não está disponível ou não é precisa.
Se a duração for definida para todos os arquivos, então é possível buscar em todo o vídeo concatenado.
inpoint timestamp
Ponto de entrada do arquivo. Quando o demuxer abre o arquivo, ele salta instantaneamente para a marca de tempo especificada. A busca é feita de modo que todos os fluxos possam ser apresentados com sucesso no ponto de entrada.
Essa diretiva funciona melhor com codecs de quadro intra, porque, com os que não são intra, normalmente são obtidos pacotes extras antes do ponto de entrada real, e o conteúdo decodificado provavelmente também conterá quadros anteriores ao ponto de entrada.
Para cada arquivo, os pacotes anteriores ao ponto de entrada do arquivo terão marcas de tempo menores que a marca de tempo de início calculada do arquivo (negativa no caso do primeiro arquivo), e a duração dos arquivos (se não especificada pela diretiva duration) será reduzida com base no ponto de entrada especificado.
Devido a possíveis pacotes anteriores ao ponto de entrada especificado, as marcas de tempo dos pacotes podem se sobrepor entre dois arquivos concatenados.
outpoint timestamp
Ponto de saída do arquivo. Quando o demuxer atinge a marca de tempo de decodificação especificada em qualquer um dos fluxos, ele trata isso como uma condição de fim de arquivo e ignora o pacote atual e todos os pacotes restantes de todos os fluxos.
O ponto de saída é exclusivo, o que significa que o demuxer não gerará pacotes com marca de tempo de decodificação maior ou igual ao ponto de saída.
Essa diretiva funciona melhor com codecs de quadro intra e formatos em que todos os fluxos estão intimamente intercalados. Para codecs que não são de quadro intra, normalmente serão obtidos pacotes adicionais com marca de tempo de apresentação após o ponto de saída; por isso, o conteúdo decodificado provavelmente também conterá quadros após o ponto de saída. Se seus fluxos não estiverem intimamente intercalados, talvez você não obtenha todos os pacotes de todos os fluxos antes do ponto de saída, podendo decodificar apenas o fluxo mais antigo até o ponto de saída.
A duração dos arquivos (se não especificada pela diretiva duration) será reduzida com base no ponto de saída especificado.
file_packet_metadata key=value
Metadados dos pacotes do arquivo. Os metadados especificados serão definidos para cada pacote do arquivo. Você pode especificar essa diretiva várias vezes para adicionar múltiplas entradas de metadados. Essa diretiva está obsoleta; use file_packet_meta em vez dela.
file_packet_meta key value
Metadados dos pacotes do arquivo. Os metadados especificados serão definidos para cada pacote do arquivo. Você pode especificar essa diretiva várias vezes para adicionar múltiplas entradas de metadados.
option key value
Opção para acessar, abrir e sondar o arquivo. Pode estar presente várias vezes.
stream
Introduz um fluxo no arquivo virtual. Todas as diretivas subsequentes relacionadas a fluxo se aplicam ao último fluxo introduzido. Algumas propriedades do fluxo devem ser definidas para permitir a identificação dos fluxos correspondentes nos subarquivos. Se nenhum fluxo for definido no script, os fluxos do primeiro arquivo são copiados.
exact_stream_id id
Define o id do fluxo. Se essa diretiva for informada, será usada a string com o id correspondente nos subarquivos. Isso é especialmente útil para arquivos MPEG-PS (VOB), nos quais a ordem dos fluxos não é confiável.
stream_meta key value
Metadados do fluxo. Pode estar presente várias vezes.
stream_codec value
Codec do fluxo.
stream_extradata hex_string
Extradata do fluxo, codificada em hexadecimal.
chapter id start end
Adiciona um capítulo. id é um identificador único, de preferência pequeno e consecutivo.
3.5.2 Opções
Este demuxer aceita a seguinte opção:
safe
Se definido como 1, rejeita caminhos de arquivo e diretivas inseguros. Um caminho de arquivo é considerado seguro se não contiver uma especificação de protocolo, for relativo, e todos os seus componentes contiverem apenas caracteres do conjunto de caracteres portável (letras, dígitos, ponto, sublinhado e hífen), sem ponto no início de um componente.
Se definido como 0, qualquer nome de arquivo é aceito.
O padrão é 1.
auto_convert
Se definido como 1, tenta realizar conversões automáticas nos dados dos pacotes para tornar os fluxos concatenáveis. O padrão é 1.
Atualmente, a única conversão é adicionar o filtro de bitstream h264_mp4toannexb aos fluxos H.264 em formato MP4. Isso é necessário especialmente quando há mudanças de resolução.
segment_time_metadata
Se definido como 1, cada pacote conterá os valores de metadados lavf.concat.start_time e lavf.concat.duration, que são o start_time e a duration dos respectivos segmentos de arquivo na saída concatenada, expressos em microssegundos. Os metadados de duration só são definidos se forem conhecidos a partir do arquivo concat. O padrão é 0.
3.5.3 Exemplos
-
Usar nomes de arquivo absolutos e incluir alguns comentários:
# my first filename file /mnt/share/file-1.wav # my second filename including whitespace file '/mnt/share/file 2.wav' # my third filename including whitespace plus single quote file '/mnt/share/file 3'\''.wav' -
Permitir a detecção automática do formato de entrada, usar nomes de arquivo seguros e definir a duração do primeiro arquivo:
ffconcat version 1.0 file file-1.wav duration 20.0 file subdir/file-2.wav
3.6 dash
Demuxer de Dynamic Adaptive Streaming over HTTP.
Este demuxer apresenta todos os AVStreams encontrados no manifesto. Ao definir as flags de descarte nos AVStreams, quem realiza a chamada pode decidir quais fluxos receber de fato. Cada fluxo reflete as propriedades id e bandwidth da <Representation> como chaves de metadados chamadas "id" e "variant_bitrate", respectivamente.
3.6.1 Opções
Este demuxer aceita a seguinte opção:
cenc_decryption_key
Chave padrão de 16 bytes, em hexadecimal, para descriptografar arquivos criptografados usando ISO Common Encryption (CENC/AES-128 CTR; ISO/IEC 23001-7).
cenc_decryption_keys
Dicionário de id de chave de 16 bytes => chave de 16 bytes, ambos em hexadecimal, para descriptografar arquivos criptografados usando ISO Common Encryption (CENC/AES-128 CTR; ISO/IEC 23001-7).
3.7 dvdvideo
Demuxer de DVD-Video, baseado em libdvdnav e libdvdread.
Pode ingerir diretamente títulos de DVD, mais especificamente PGCs sequenciais, em um pipeline de conversão. Recursos de menu, como vídeo ou áudio de fundo, também podem ser demuxados a partir das coordenadas do menu (com o melhor esforço possível).
Dispositivos de bloco (unidades de DVD), arquivos ISO e estruturas de diretórios são aceitos. Ative com -f dvdvideo antes de uma dessas entradas.
Este demuxer NÃO possui nenhum tipo de código de descriptografia. Você está por conta própria ao trabalhar com DVDs criptografados, e não deve esperar suporte quanto a isso.
A reprodução em si é conduzida pela libdvdnav, e a análise da estrutura, pela libdvdread. O FFmpeg deve ser compilado com suporte a biblioteca GPL disponível, além das opções de configure --enable-libdvdnav e --enable-libdvdread.
Você precisará informar o "número de título" desejado ou as coordenadas exatas de PGC/PG. Muitos reprodutores e ferramentas de DVD de código aberto podem ajudar a fornecer essa informação. Se não for especificado, o demuxer usará por padrão o título 1, que funciona para muitos discos. No entanto, devido à flexibilidade do formato, recomenda-se verificar manualmente. Há muitos discos criados de forma estranha ou com cabeçalhos inválidos.
Se a entrada for uma unidade de DVD real, observe que existem unidades que podem falhar silenciosamente ao ler setores defeituosos do disco, retornando bits aleatórios em vez disso, o que equivale a dados corrompidos. Isso é especialmente comum em discos envelhecidos ou deteriorados. Seria necessária uma segunda passada com verificações de integridade para detectar a corrupção. Isso não é um problema do FFmpeg.
3.7.1 Antecedentes
DVD-Video não é um formato container diretamente acessível e linear no sentido tradicional. Em vez disso, ele permite a reprodução complexa e programática de fluxos MPEG-PS cuidadosamente multiplexados, armazenados em arquivos VOB sem cabeçalho. Para o usuário final, esses fluxos são conhecidos simplesmente como "títulos", mas a sequência lógica real de reprodução é definida por um ou mais "PGCs", ou Program Group Chains, dentro do título. O PGC, por sua vez, é composto por vários "PGs", ou "Programs", que são os segmentos de vídeo propriamente ditos (e, em um conteúdo de vídeo típico, ordenados sequencialmente). A estrutura do PGC, junto com o layout de fluxos e os metadados, é armazenada em arquivos IFO que precisam ser analisados. Os PGCs podem ser entendidos, em termos mais simples, como playlists.
Um reprodutor de DVD real depende da interação do usuário via GUI, por meio de menus, e de uma VM interna para conduzir a direção do demuxing. Em geral, o usuário navega (via menus) ou é redirecionado automaticamente para o PGC escolhido. Durante esse processo e na reprodução subsequente, a VM interna do reprodutor de DVD também mantém um estado e executa instruções que podem gerar saltos para diferentes setores durante a reprodução. É por isso que a libdvdnav entra em cena, já que uma leitura linear dos blobs MPEG-PS no disco (VOBs) não é suficiente para produzir a sequência correta em muitos casos.
Existem muitas outras estruturas de DVD (um assunto extenso) que não serão discutidas aqui. Os pacotes NAV, em particular, são tratados por este demuxer para construir uma temporização precisa, mas não são emitidos como fluxo. Para uma boa compreensão de alto nível, consulte: https://code.videolan.org/videolan/libdvdnav/-/blob/master/doc/dvd_structures
3.7.2 Opções
Este demuxer aceita as seguintes opções:
title int
O número do título a ser reproduzido. Deve ser definido se pgc e pg não estiverem definidos. Não se aplica a menus. O padrão é 0 (auto), que atualmente seleciona apenas o primeiro título disponível (título 1) e notifica o usuário sobre as implicações.
chapter_start int
O número do capítulo, ou PTT (part-of-title), em que começar. Não se aplica a menus. O padrão é 1.
chapter_end int
O número do capítulo, ou PTT (part-of-title), em que terminar. Não se aplica a menus. O padrão é 0, um valor especial que indica terminar no último capítulo possível.
angle int
O número do ângulo de vídeo, que se refere ao que é essencialmente um fluxo de vídeo adicional, composto por quadros alternados intercalados nos VOBs. Não se aplica a menus. O padrão é 1.
region int
O código de região a ser usado na reprodução. Alguns discos podem usar isso para definir por padrão a reprodução em um ângulo específico em regiões diferentes. Esta opção não afeta o código de região de uma unidade de DVD real, quando usada como entrada. Não se aplica a menus. O padrão é 0, "world".
menu bool
Demuxa os recursos de menu em vez de navegar por um título. Requer coordenadas exatas do menu (menu_lu, menu_vts, pgc, pg). O padrão é false.
menu_lu int
O idioma do menu a ser demuxado. No DVD, os menus são agrupados por idioma. O padrão é 1, a primeira unidade de idioma.
menu_vts int
O VTS em que o menu está, ou 0 se for um menu VMG (nível raiz). O padrão é 1, o menu do primeiro VTS.
pgc int
O PGC de entrada para iniciar a reprodução, em conjunto com pg. Alternativa a definir title. Marcadores de capítulo não são compatíveis no momento. Deve ser definido explicitamente para menus. O padrão é 0, que resolve automaticamente a partir do valor de title.
pg int
O PG de entrada para iniciar a reprodução, em conjunto com pgc. Alternativa a definir title. Marcadores de capítulo não são compatíveis no momento. O padrão é 1, o primeiro PG do PGC.
preindex bool
Ative esta opção para obter marcadores de capítulo (PTT) precisos e medição de duração, o que exige uma segunda passada de leitura lenta para indexar as marcas de tempo dos marcadores de capítulo a partir dos pacotes NAV. Isso representa um trabalho extra pouco ideal para unidades ópticas reais. Recomenda-se, e é mais rápido, usar esta opção com um backup da estrutura do DVD armazenado em um disco rígido. Não é compatível com pgc e pg. O padrão é 0, false.
trim bool
Ignora as células de preenchimento (ou seja, células com menos de 1 segundo) do início. Existem muitos discos com segmentos de preenchimento no início do PGC, geralmente com dados sem utilidade destinados a controlar a velocidade de armazenamento em buffer de um player de DVD real, sem nenhum outro valor real de dados. Não se aplica a menus. O padrão é 1, true.
3.7.3 Exemplos
-
Abrir o título 3 de uma determinada estrutura de DVD:
ffmpeg -f dvdvideo -title 3 -i <path to DVD> ... -
Abrir os capítulos 3 a 6 do título 1 de uma determinada estrutura de DVD:
ffmpeg -f dvdvideo -chapter_start 3 -chapter_end 6 -title 1 -i <path to DVD> ... -
Abrir apenas o capítulo 5 do título 1 de uma determinada estrutura de DVD:
ffmpeg -f dvdvideo -chapter_start 5 -chapter_end 5 -title 1 -i <path to DVD> ... -
Demuxar o menu com idioma 1 do VTS 1, PGC 1, começando em PG 1:
ffmpeg -f dvdvideo -menu 1 -menu_lu 1 -menu_vts 1 -pgc 1 -pg 1 -i <path to DVD> ...
3.8 ea
Demuxer do formato Electronic Arts Multimedia.
Este formato é usado por vários jogos da Electronic Arts.
3.8.1 Opções
merge_alpha bool
Normalmente o canal alfa VP6 (se existir) é retornado como um fluxo de vídeo secundário; ao definir esta opção, você pode fazer o demuxer retornar um único fluxo de vídeo que contenha o canal alfa além do vídeo comum.
3.9 imf
Demuxer de Interoperable Master Format.
Este demuxer apresenta os fluxos de áudio e vídeo encontrados em uma Composition IMF, conforme especificado em SMPTE ST 2067-2.
ffmpeg [-assetmaps <path of ASSETMAP1>,<path of ASSETMAP2>,...] -i <path of CPL> ...
Se -assetmaps não for especificado, o demuxer procura um arquivo chamado ASSETMAP.xml no mesmo diretório do CPL.
3.10 flv, live_flv, kux
Demuxer do formato Adobe Flash Video.
Este demuxer é usado para fazer demuxing de arquivos FLV e fluxos de rede RTMP. No caso de fluxos de rede ao vivo, se você forçar o formato, pode usar a opção live_flv em vez de flv para sobreviver às descontinuidades de marca de tempo. KUX é uma variante de flv usada na plataforma Youku.
ffmpeg -f flv -i myfile.flv ...
ffmpeg -f live_flv -i rtmp://<any.server>/anything/key ....
-flv_metadata bool
Aloca os fluxos de acordo com o conteúdo do array onMetaData.
-flv_ignore_prevtag bool
Ignora o tamanho do valor da tag anterior.
-flv_full_metadata bool
Exibe todo o conteúdo do onMetadata.
3.11 gif
Demuxer de GIF animado.
Aceita as seguintes opções:
min_delay
Define o atraso mínimo válido entre quadros, em centésimos de segundo. O intervalo é de 0 a 6000. O valor padrão é 2.
max_gif_delay
Define o atraso máximo válido entre quadros, em centésimos de segundo. O intervalo é de 0 a 65535. O valor padrão é 65535 (quase onze minutos), o máximo permitido pela especificação.
default_delay
Define o atraso padrão entre quadros, em centésimos de segundo. O intervalo é de 0 a 6000. O valor padrão é 10.
ignore_loop
Arquivos GIF podem conter informações para repetir um determinado número de vezes (ou infinitamente). Se ignore_loop for definido como 1, a configuração de loop da entrada será ignorada e a repetição não ocorrerá. Se for definido como 0, a repetição ocorrerá e será repetida o número de vezes indicado pelo GIF. O valor padrão é 1.
Por exemplo, com o filtro overlay, para sobrepor um GIF com loop infinito a outro vídeo:
ffmpeg -i input.mp4 -ignore_loop 0 -i input.gif -filter_complex overlay=shortest=1 out.mkv
Observe que, no exemplo acima, a opção shortest do filtro overlay é usada para terminar o vídeo de saída na duração do arquivo de entrada mais curto, que, neste caso, é input.mp4, já que o GIF deste exemplo tem loop infinito.
3.12 hls
Demuxer HLS
Demuxer de Apple HTTP Live Streaming.
Este demuxer apresenta todos os AVStreams de todos os variant streams. O campo id é definido com o número de índice da variante de taxa de bits. Ao definir as flags de descarte nos AVStreams (pressionando ’a’ ou ’v’ no ffplay), quem realiza a chamada pode decidir quais variant streams receber de fato. A taxa de bits total da variante à qual o fluxo pertence está disponível em uma chave de metadados chamada "variant_bitrate".
Aceita as seguintes opções:
live_start_index
índice do segmento em que iniciar os fluxos ao vivo (valores negativos contam a partir do final).
prefer_x_start
prefere usar #EXT-X-START se estiver na playlist, em vez de live_start_index.
allowed_extensions
Lista de extensões de arquivo, separadas por ’,’, às quais o hls tem permissão de acessar.
extension_picky
Isso bloqueia extensões não permitidas durante a sondagem. Também exige que todos os segmentos disponíveis tenham extensões correspondentes ao formato, exceto mpegts, que é sempre permitido. Recomenda-se configurar corretamente as listas de permissão em vez de depender das extensões. Habilitado por padrão.
max_reload
Número máximo de vezes que se tenta recarregar uma lista insuficiente. O valor padrão é 1000.
m3u8_hold_counters
Número máximo de vezes que o m3u8 é carregado quando ele é atualizado sem novos segmentos. O valor padrão é 1000.
http_persistent
Usa conexões HTTP persistentes. Aplicável somente a fluxos HTTP. Habilitado por padrão.
http_multiple
Usa múltiplas conexões HTTP para baixar segmentos HTTP. Habilitado por padrão para servidores HTTP/1.1.
http_seekable
Usa solicitações HTTP parciais para baixar segmentos HTTP. 0 = desativar, 1 = ativar, -1 = auto. O padrão é auto.
seg_format_options
Define opções para o demuxer dos segmentos de mídia usando uma lista de pares chave=valor separados por :.
seg_max_retry
Número máximo de vezes que um segmento é recarregado após um erro; útil quando não se deseja pular o segmento em caso de erro de rede. O valor padrão é 0.
3.13 image2
Demuxer de arquivos de imagem.
Este demuxer lê a partir de uma lista de arquivos de imagem especificada por um padrão. A sintaxe e o significado do padrão são especificados pela opção pattern_type.
O padrão pode conter um sufixo usado para determinar automaticamente o formato das imagens contidas nos arquivos.
O tamanho, o pixel format e o formato de cada imagem devem ser iguais em todos os arquivos da sequência.
Este demuxer aceita as seguintes opções:
framerate
Define a taxa de quadros do fluxo de vídeo. O padrão é 25.
loop
Se definido como 1, reproduz a entrada em loop. O valor padrão é 0.
pattern_type
Seleciona o tipo de padrão usado para interpretar o nome de arquivo informado.
pattern_type aceita um dos seguintes valores.
none
Desativa a correspondência de padrões; assim, o vídeo conterá apenas a imagem especificada. Use esta opção se não quiser criar sequências a partir de várias imagens e seus nomes de arquivo puderem conter caracteres especiais de padrão.
sequence
Seleciona um tipo de padrão de sequência, usado para especificar uma sequência de arquivos indexados por números sequenciais.
Um padrão de sequência pode conter a string "%d" ou "%0Nd", que especifica a posição dos caracteres que representam um número sequencial em cada nome de arquivo correspondente ao padrão. Se for usada a forma "%d0Nd", a string que representa o número em cada nome de arquivo é preenchida com zeros à esquerda, e N é o número total de dígitos preenchidos com zeros que representam o número. O caractere literal ’%’ pode ser especificado no padrão com a string "%%".
Se o padrão de sequência contiver "%d" ou "%0Nd", o primeiro nome de arquivo da lista de arquivos especificada pelo padrão deve conter um número compreendido, de forma inclusiva, entre start_number e start_number+start_number_range-1, e todos os números seguintes devem ser sequenciais.
Por exemplo, o padrão "img-%03d.bmp" corresponderá a uma sequência de nomes de arquivo da forma img-001.bmp, img-002.bmp, ..., img-010.bmp etc.; o padrão "i%%m%%g-%d.jpg" corresponderá a uma sequência de nomes de arquivo da forma i%m%g-1.jpg, i%m%g-2.jpg, ..., i%m%g-10.jpg etc.
Observe que o padrão não precisa necessariamente conter "%d" ou "%0Nd"; por exemplo, para converter um único arquivo de imagem img.jpeg, você pode usar o comando:
ffmpeg -i img.jpeg img.png
glob
Seleciona um tipo de padrão de curinga glob.
O padrão é interpretado como um padrão glob(). Isso só pode ser selecionado se o libavformat tiver sido compilado com suporte a globbing.
O valor padrão é sequence.
pixel_format
Define o pixel format das imagens a serem lidas. Se não for especificado, o pixel format é deduzido a partir do primeiro arquivo de imagem da sequência.
start_number
Define o índice do arquivo, segundo o padrão de nome de arquivo de imagem, a partir do qual começar a ler. O valor padrão é 0.
start_number_range
Define o intervalo de índices a verificar ao procurar o primeiro arquivo de imagem da sequência, começando em start_number. O valor padrão é 5.
ts_from_file
Se definido como 1, define a marca de tempo do quadro conforme a data de modificação do arquivo de imagem. Observe que a monotonicidade das marcas de tempo não é garantida: as imagens seguem a mesma ordem que sem esta opção. O valor padrão é 0. Se definido como 2, define a marca de tempo do quadro conforme a data de modificação do arquivo de imagem, com precisão de nanossegundos.
video_size
Define o tamanho de vídeo das imagens a serem lidas. Se não for especificado, o tamanho de vídeo é deduzido a partir do primeiro arquivo de imagem da sequência.
export_path_metadata
Se definido como 1, adiciona dois campos extras aos metadados encontrados na entrada, disponibilizando-os também para outros filtros (veja exemplos no filtro drawtext). O valor padrão é 0. Os campos extras são descritos a seguir:
lavf.image2dec.source_path
Corresponde ao caminho completo do arquivo de entrada que está sendo lido.
lavf.image2dec.source_basename
Corresponde ao nome do arquivo que está sendo lido.
3.13.1 Exemplos
-
Use o
ffmpegpara criar um vídeo a partir das imagens da sequência de arquivos img-001.jpeg, img-002.jpeg, ..., presumindo uma taxa de quadros de entrada de 10 quadros por segundo:ffmpeg -framerate 10 -i 'img-%03d.jpeg' out.mkv -
Como acima, mas começando a leitura a partir de um arquivo com índice 100 na sequência:
ffmpeg -framerate 10 -start_number 100 -i 'img-%03d.jpeg' out.mkv -
Leia imagens que correspondam ao padrão glob "*.png", ou seja, todos os arquivos terminados com o sufixo ".png":
ffmpeg -framerate 10 -pattern_type glob -i "*.png" out.mkv
3.14 libgme
A biblioteca Game Music Emu é uma coleção de emuladores de arquivos de música de videogame.
Consulte https://bitbucket.org/mpyne/game-music-emu/overview para mais informações.
Aceita as seguintes opções:
track_index
Define o índice da faixa a ser demuxada. O demuxer só pode exportar uma faixa. Os índices de faixa começam em 0. O padrão é escolher a primeira faixa. O número de faixas é exportado como entrada de metadados tracks.
sample_rate
Define a taxa de amostragem da faixa exportada. O intervalo é de 1000 a 999999. O padrão é 44100.
max_size (bytes)
O demuxer armazena o arquivo inteiro em buffer na memória. Ajuste esse valor para definir o tamanho máximo do buffer, que por sua vez atua como um limite superior para o tamanho dos arquivos que podem ser lidos. O padrão é 50 MiB.
3.15 libmodplug
Demuxer de módulos baseado em ModPlug
Consulte https://github.com/Konstanty/libmodplug
Exportará um fluxo de áudio de 2 canais, 16 bits, 44.1 kHz. Opcionalmente, um fluxo de vídeo pal8 de 16 cores pode ser exportado com ou sem metadados impressos.
Aceita as seguintes opções:
noise_reduction
Aplica um filtro passa-baixa simples. Pode ser 1 (ativado) ou 0 (desativado). O padrão é 0.
reverb_depth
Define a quantidade de reverb. Intervalo: 0-100. O padrão é 0.
reverb_delay
Define o atraso em ms, limitado a 40-250 ms. O padrão é 0.
bass_amount
Aplica expansão de graves, também conhecida como XBass ou megabass. O intervalo é de 0 (baixo) a 100 (alto). O padrão é 0.
bass_range
Define o corte, ou seja, o limite superior para as frequências graves. O intervalo é 10-100 Hz. O padrão é 0.
surround_depth
Aplica um efeito surround Dolby Pro-Logic. O intervalo é de 0 (leve) a 100 (intenso). O padrão é 0.
surround_delay
Define o atraso do surround em ms, limitado a 5-40 ms. O padrão é 0.
max_size
O demuxer armazena o arquivo inteiro em buffer na memória. Ajuste esse valor para definir o tamanho máximo do buffer, que por sua vez atua como um limite superior para o tamanho dos arquivos que podem ser lidos. O intervalo é de 0 a 100 MiB. 0 remove o limite de tamanho do buffer (não recomendado). O padrão é 5 MiB.
video_stream_expr
String avaliada usando a API eval para atribuir cores ao fluxo de vídeo gerado. As variáveis que podem ser usadas são x, y, w, h, t, speed, tempo, order, pattern e row.
video_stream
Gera o fluxo de vídeo. Pode ser 1 (ativado) ou 0 (desativado). O padrão é 0.
video_stream_w
Define a largura do quadro de vídeo em ’chars’, em que cada char equivale a 8 pixels. O intervalo é 20-512. O padrão é 30.
video_stream_h
Define a altura do quadro de vídeo em ’chars’, em que cada char equivale a 8 pixels. O intervalo é 20-512. O padrão é 30.
video_stream_ptxt
Imprime metadados no fluxo de vídeo. Inclui speed, tempo, order, pattern, row e ts (tempo em ms). Pode ser 1 (ativado) ou 0 (desativado). O padrão é 1.
3.16 libopenmpt
Demuxer de módulos baseado em libopenmpt
Consulte https://lib.openmpt.org/libopenmpt/ para mais informações.
Alguns arquivos têm várias subsongs (faixas); isso pode ser definido com a opção subsong.
Aceita as seguintes opções:
subsong
Define o índice da subsong. Pode ser ’all’, ’auto’, ou o índice da subsong. Os índices de subsong começam em 0. O padrão é ’auto’.
O valor padrão é deixar que o libopenmpt escolha.
layout
Define o layout de canais. Os valores válidos são layouts de 1, 2 e 4 canais. O valor padrão é STEREO.
sample_rate
Define a taxa de amostragem de saída do libopenmpt. O intervalo vai de 1000 a INT_MAX. O valor padrão é 48000.
3.17 mcc
Demuxer para arquivos MacCaption MCC, com suporte às versões 1.0 e 2.0 do MCC. Os arquivos MCC armazenam dados VANC, que podem incluir legendas ocultas (EIA-608 e CEA-708), código de tempo auxiliar, dados de pan-scan etc. Por padrão, por compatibilidade com versões anteriores, o demuxer MCC extrai somente as legendas ocultas EIA-608 e CEA-708 e retorna um fluxo EIA_608, ignorando todos os demais dados VANC. Você pode alterar isso para retornar todos os dados VANC em um fluxo de dados SMPTE_436M_ANC definindo -eia608_extract 0
3.17.1 Exemplos
- Converta um arquivo MCC para o formato Scenarist (SCC):
ffmpeg -i CC.mcc -c:s copy CC.scc
Observe que o formato SCC só é compatível com EIA-608; portanto, isso descartará todos os outros dados, como as extensões CEA-708.
- Mescle um arquivo MCC em um arquivo MXF:
ffmpeg -i video_and_audio.mxf -eia608_extract 0 -i CC.mcc -c copy -map 0 -map 1 out.mxf
Isso mantém todos os dados VANC e os insere no arquivo MXF de saída como um fluxo de dados SMPTE_436M_ANC.
3.18 mov/mp4/3gp
Demuxer para o Quicktime File Format e o ISO/IEC Base Media File Format (ISO/IEC 14496-12 ou MPEG-4 Parte 12, ISO/IEC 15444-12 ou JPEG 2000 Parte 12).
Extensões registradas: mov, mp4, m4a, 3gp, 3g2, mj2, psp, m4b, ism, ismv, isma, f4v
3.18.1 Opções
Este demuxer aceita as seguintes opções:
enable_drefs
Ativa o carregamento de faixas externas; desativado por padrão. Ativar essa opção pode, em teoria, vazar informações em alguns casos de uso.
use_absolute_path
Permite carregar faixas externas por meio de caminhos absolutos; desativado por padrão. Ativar essa opção representa um risco de segurança. Só deve ser ativada se a origem for conhecida como não maliciosa.
seek_streams_individually
Ao buscar, identifica o ponto mais próximo em cada fluxo individualmente e demuxa os pacotes desse fluxo a partir do ponto identificado. Isso pode levar a uma sequência de pacotes diferente da obtida ao demuxar linearmente desde o início. O padrão é true.
ignore_editlist
Ignora quaisquer átomos de lista de edição. Por padrão, o demuxer modifica o índice do fluxo para refletir a linha do tempo descrita pela lista de edição. O padrão é false.
advanced_editlist
Modifica o índice do fluxo para refletir a linha do tempo descrita pela lista de edição. ignore_editlist deve ser definido como false para que esta opção tenha efeito. Se tanto ignore_editlist quanto esta opção estiverem definidas como false, então somente o início do índice do fluxo é modificado para refletir o tempo de permanência inicial ou a marca de tempo inicial descrita pela lista de edição. O padrão é true.
ignore_chapters
Não analisa capítulos. Isso inclui tags/momentos ’HiLight’ do GoPro. Observe que os capítulos só são analisados quando a entrada permite busca. O padrão é false.
use_mfra_for
Para entradas fragmentadas que permitem busca, define a marca de tempo inicial do fragmento a partir da caixa media fragment random access, se presente.
As seguintes opções estão disponíveis:
‘auto’
Detecta automaticamente se as marcas de tempo mfra devem ser definidas como PTS ou DTS (padrão)
‘dts’
Define as marcas de tempo mfra como DTS
‘pts’
Define as marcas de tempo mfra como PTS
‘0’
Não usa a caixa mfra para definir as marcas de tempo
use_tfdt
Para entradas fragmentadas, define a marca de tempo inicial do fragmento como baseMediaDecodeTime da caixa tfdt. Por padrão, está ativado, o que fará com que a caixa tfdt seja preferida para definir o DTS. Desative para usar o earliest_presentation_time da caixa sidx. Em qualquer caso, a marca de tempo da caixa mfra será usada se estiver disponível e use_mfra_for estiver definido como pts ou dts.
export_all
Exporta caixas não reconhecidas dentro da caixa udta como entradas de metadados. Os primeiros quatro caracteres do tipo de caixa são definidos como a chave. O padrão é false.
export_xmp
Exporta todo o conteúdo da caixa XMP_ e da caixa uuid como uma string com a chave xmp. Observe que, se export_all estiver definida e esta opção não, o conteúdo da caixa XMP_ ainda será exportado, mas com a chave XMP_. O padrão é false.
activation_bytes
Chave de 4 bytes necessária para descriptografar arquivos Audible AAX e AAX+. Consulte a subseção Audible AAX abaixo.
audible_fixed_key
Chave fixa usada para lidar com arquivos Audible AAX/AAX+. Ela já vem predefinida, portanto não deve ser necessário especificá-la.
decryption_key
Chave padrão de 16 bytes, em hexadecimal, para descriptografar arquivos criptografados usando ISO Common Encryption (CENC/AES-128 CTR; ISO/IEC 23001-7).
decryption_keys
Dicionário de ID de chave de 16 bytes => chave de 16 bytes, ambos em hexadecimal, para descriptografar arquivos criptografados usando ISO Common Encryption (CENC/AES-128 CTR; ISO/IEC 23001-7).
max_stts_delta
Deltas de amostra muito altos escritos na caixa stts de um trak podem, ocasionalmente, ser intencionais, mas geralmente são escritos por erro ou usados para armazenar um valor negativo para correção do dts quando tratados como inteiros de 32 bits com sinal. Esta opção permite ao usuário definir um limite superior, além do qual o delta é limitado a 1. Valores acima do limite que, ao serem convertidos para int32, resultam em negativo são usados para ajustar o dts subsequente.
A unidade é a escala de tempo da faixa. O intervalo é de 0 a UINT_MAX. O padrão é UINT_MAX - 48000*10, o que permite até 10 segundos de correção do dts para fluxos de áudio de 48 kHz, cobrindo 99.9% do intervalo de uint32.
interleaved_read
Intercala pacotes de várias faixas no nível do demuxer. Em arquivos com intercalação ruim, isso evita problemas de reprodução causados por grandes lacunas entre pacotes de faixas diferentes, já que MOV/MP4 não impõe requisitos de posicionamento de pacotes. No entanto, isso pode causar buscas excessivas em arquivos com intercalação muito ruim, devido à busca entre faixas, portanto desativar essa opção pode evitar problemas de E/S, à custa da reprodução.
3.18.2 Audible AAX
Os arquivos Audible AAX são arquivos M4B criptografados e podem ser descriptografados especificando-se um segredo de ativação de 4 bytes.
ffmpeg -activation_bytes 1CEB00DA -i test.aax -vn -c:a copy output.mp4
3.19 mpegts
Demuxer de transport stream MPEG-2.
Este demuxer aceita as seguintes opções:
resync_size
Define o limite de tamanho para buscar uma nova sincronização. O valor padrão é 65536.
skip_unknown_pmt
Ignora as PMTs de programas não definidos na PAT. O valor padrão é 0.
fix_teletext_pts
Substitui os valores de PTS e DTS dos pacotes de teletexto pelas marcas de tempo calculadas a partir do PCR do primeiro programa do qual o fluxo de teletexto faz parte e que não é descartado. O valor padrão é 1; defina esta opção como 0 se quiser manter os valores de PTS e DTS dos pacotes de teletexto inalterados.
ts_packetsize
Opção de saída que informa o tamanho do pacote bruto em bytes. Mostra o tamanho do pacote bruto detectado; não pode ser definida pelo usuário.
scan_all_pmts
Varre e combina todas as PMTs. O valor é um inteiro de -1 a 1 (-1 significa configuração automática, 1 significa ativado, 0 significa desativado). O valor padrão é -1.
merge_pmt_versions
Reutiliza fluxos existentes quando a versão de uma PMT é atualizada e os fluxos elementares são movidos para PIDs diferentes. O valor padrão é 0.
max_packet_size
Define o tamanho máximo, em bytes, do pacote emitido pelo demuxer. Payloads acima desse tamanho são divididos em vários pacotes. O intervalo é de 1 a INT_MAX/2. O padrão é 204800 bytes.
3.20 mpjpeg
Demuxer de MJPEG encapsulado em MIME multiparte.
Este demuxer permite a leitura de MJPEG, em que cada quadro é representado como uma parte de um fluxo multipart/x-mixed-replace.
strict_mime_boundary
A implementação padrão aplica um critério flexível para a detecção do limite MIME multiparte, para evitar regressões com numerosos endpoints existentes que não geram um fluxo MIME MJPEG adequado. Ativar esta opção definindo-a como 1 resultará em uma verificação mais rígida do valor do limite.
3.21 rawvideo
Demuxer de vídeo bruto.
Este demuxer permite ler dados de vídeo bruto. Como não há um cabeçalho especificando os parâmetros de vídeo presumidos, o usuário deve especificá-los para poder decodificar os dados corretamente.
Este demuxer aceita as seguintes opções:
framerate
Define a taxa de quadros do vídeo de entrada. O valor padrão é 25.
pixel_format
Define o pixel format do vídeo de entrada. O valor padrão é yuv420p.
stride
Define o tamanho da linha do quadro em bytes; necessário apenas se houver preenchimento extra. Em formatos multiplano, stride é uma lista com o tamanho de linha de cada plano.
video_size
Define o tamanho do vídeo de entrada. Este valor deve ser especificado explicitamente.
Por exemplo, para ler um arquivo rawvideo input.raw com ffplay, presumindo um pixel format rgb24, um tamanho de vídeo 320x240 e uma taxa de quadros de 10 imagens por segundo, use o comando:
ffplay -f rawvideo -pixel_format rgb24 -video_size 320x240 -framerate 10 input.raw
Leia um rawvideo com ffplay, presumindo um pixel format yuv420p, um tamanho de vídeo 1080x1920, com 8 bytes de preenchimento em cada linha do plano Y e 4 bytes de preenchimento no plano UV,
ffplay -f rawvideo -pixel_format yuv420p -video_size 1080x1920 -stride 1088,544,544 input.raw
3.22 rcwt
RCWT (Raw Captions With Time) é um formato nativo do ccextractor, uma ferramenta de código aberto amplamente usada para processar fontes de legendas ocultas (CC) 608/708. Para mais informações sobre o formato, consulte (ffmpeg-formats)rcwtenc.
Este demuxer implementa a especificação vigente em março de 2024, que permanece estável e inalterada desde abril de 2014.
3.22.1 Exemplos
- Renderize CC para ASS usando o decoder integrado:
ffmpeg -i CC.rcwt.bin CC.ass
Observe que, se a saída parecer vazia, talvez seja necessário definir manualmente a opção data_field do decoder para escolher o substream de CC desejado.
- Converta um backup RCWT para o formato Scenarist (SCC):
ffmpeg -i CC.rcwt.bin -c:s copy CC.scc
Observe que o formato SCC não é compatível com todas as extensões de CC possíveis que podem ser armazenadas em RCWT (como EIA-708).
3.23 sbg
Demuxer de scripts SBaGen.
Este demuxer lê a linguagem de script usada pelo SBaGen http://uazu.net/sbagen/ para gerar sessões de batidas binaurais. Um script SBG se parece com isto:
-SE
a: 300-2.5/3 440+4.5/0
b: 300-2.5/0 440+4.5/3
off: -
NOW == a
+0:07:00 == b
+0:14:00 == a
+0:21:00 == b
+0:30:00 off
Um script SBG pode misturar marcas de tempo absolutas e relativas. Se o script usa apenas marcas de tempo absolutas (incluindo o horário de início do script) ou apenas relativas, então seu layout é fixo e a conversão é direta. Por outro lado, se o script mistura os dois tipos de marca de tempo, a referência NOW para as marcas de tempo relativas será tomada a partir da hora atual do dia no momento em que o script é lido, e o layout do script ficará congelado de acordo com essa referência. Isso significa que, se o script for reproduzido diretamente, os horários reais corresponderão às marcas de tempo absolutas dentro da precisão do relógio do controlador de som, mas se o usuário de alguma forma pausar a reprodução ou buscar, todos os horários serão deslocados de acordo.
3.24 tedcaptions
Legendas em JSON usadas para as TED Talks.
TED não fornece links para as legendas, mas eles podem ser deduzidos a partir da página. O arquivo tools/bookmarklets.html da árvore de código-fonte do FFmpeg contém um bookmarklet para expô-los.
Este demuxer aceita a seguinte opção:
start_time
Define o horário de início da palestra TED, em milissegundos. O padrão é 15000 (15s). É usado para sincronizar as legendas com os vídeos disponíveis para download, pois eles incluem uma introdução de 15s.
Exemplo: converta as legendas para um formato que a maioria dos reprodutores entenda:
ffmpeg -i http://www.ted.com/talks/subtitles/id/1/lang/en talk1-en.srt
3.25 vapoursynth
Wrapper do Vapoursynth.
Por motivos de segurança, os scripts do Vapoursynth não são detectados automaticamente, portanto o formato de entrada precisa ser forçado. Nas ferramentas de linha de comando ff*, adicione -f vapoursynth antes da entrada -i yourscript.vpy.
Este demuxer aceita a seguinte opção:
max_script_size
O demuxer armazena o script inteiro em buffer na memória. Ajuste esse valor para definir o tamanho máximo do buffer, que por sua vez atua como um limite superior para o tamanho dos scripts que podem ser lidos. O padrão é 1 MiB.
3.26 w64
Demuxer de áudio Sony Wave64.
Este demuxer aceita as seguintes opções:
max_size
Consulte a mesma opção do demuxer wav.
3.27 wav
Demuxer de áudio RIFF Wave.
Este demuxer aceita as seguintes opções:
ignore_length bool
Se definida, ignora o tamanho do chunk data e continua lendo até o fim do arquivo. Pode ser útil para ler arquivos corrompidos ou parciais cujo cabeçalho não foi atualizado corretamente, mas interpretará incorretamente arquivos com chunks que não são de áudio após o chunk data. Por padrão, está desativada.
max_size
Especifica o tamanho máximo do pacote, em bytes, para os pacotes demuxados. Por padrão, está definido como 0, o que significa que um valor adequado é escolhido com base no formato de entrada.
3.28 webp
Demuxer de WebP animado.
Aceita as seguintes opções:
-min_delay int
Define o atraso mínimo válido entre quadros em milissegundos. O intervalo é de 0 a 60000. O valor padrão é 10.
-max_webp_delay int
Define o atraso máximo válido entre quadros em milissegundos. O intervalo é de 0 a 16777215. O valor padrão é 16777215 (mais de quatro horas), o valor máximo permitido pela especificação.
-default_delay int
Define o atraso padrão entre quadros em milissegundos. O intervalo é de 0 a 60000. O valor padrão é 100.
-ignore_loop bool
Arquivos WebP podem conter informações para repetir em loop um determinado número de vezes (ou infinitamente). Se ignore_loop estiver definida como true, a configuração de loop da entrada será ignorada e o loop não ocorrerá. Se estiver definida como false, o loop ocorrerá e será repetido o número de vezes indicado pelo WebP. O valor padrão é true.
usebgcolor bool
Arquivos WebP contêm uma dica de cor de fundo no chunk ANIM, mas a especificação do WebP diz que os aplicativos visualizadores não são obrigados a usá-la. Se usebgcolor estiver definida como true, a dica de cor de fundo será usada; caso contrário, será usado preto transparente para o fundo. O valor padrão é false.
4 Muxers
Muxers são elementos configurados no FFmpeg que permitem escrever fluxos multimídia em um tipo específico de arquivo.
Ao configurar sua compilação do FFmpeg, todos os muxers compatíveis são ativados por padrão. Você pode listar todos os muxers disponíveis usando a opção de configuração --list-muxers.
Você pode desativar todos os muxers com a opção de configuração --disable-muxers e ativar/desativar muxers individuais seletivamente com as opções --enable-muxer=MUXER / --disable-muxer=MUXER.
A opção -muxers das ferramentas ff* exibirá a lista de muxers ativados. Use -formats para ver uma lista combinada dos demuxers e muxers ativados.
A seguir, uma descrição de alguns dos muxers atualmente disponíveis.
4.1 Muxers brutos
Esta seção aborda os muxers brutos. Eles aceitam um único fluxo correspondente ao codec designado. Eles não armazenam marcas de tempo nem metadados. A extensão reconhecida é a mesma do nome do muxer, salvo indicação em contrário.
Compreende os seguintes muxers. O tipo de mídia e as extensões possíveis usadas para selecionar automaticamente o muxer a partir das extensões de saída também são mostrados.
‘ac3 audio ’
Dolby Digital, também conhecido como AC-3.
‘adx audio ’
Áudio ADX da CRI Middleware.
Este muxer grava a contagem total de amostras perto do início do primeiro pacote quando a saída permite busca e a contagem pode ser armazenada em 32 bits.
‘aptx audio ’
aptX (Audio Processing Technology for Bluetooth)
‘aptx_hd audio (aptxdh)’
Áudio aptX HD (Audio Processing Technology for Bluetooth)
‘avs2 video (avs, avs2)’
Vídeo AVS2-P2 (Audio Video Standard - Second generation - Part 2) / IEEE 1857.4
‘avs3 video (avs3)’
Vídeo AVS3-P2 (Audio Video Standard - Third generation - Part 2) / IEEE 1857.10
‘cavsvideo video (cavs)’
AVS chinês (Audio Video Standard - First generation)
‘codec2raw audio ’
Áudio Codec 2.
Nenhuma extensão é registrada, portanto o nome do formato precisa ser fornecido, por exemplo, com a ferramenta de linha de comando ffmpeg usando -f codec2raw.
‘data any ’
Muxer de dados genérico.
Este muxer aceita um único fluxo com qualquer codec de qualquer tipo. O fluxo de entrada precisa ser selecionado usando a opção -map com a ferramenta de linha de comando ffmpeg.
Nenhuma extensão é registrada, portanto o nome do formato precisa ser fornecido, por exemplo, com a ferramenta de linha de comando ffmpeg usando -f data.
‘dfpwm audio (dfpwm)’
Muxer de áudio DFPWM1a bruto (Dynamic Filter Pulse With Modulation).
‘dirac video (drc, vc2)’
Vídeo BBC Dirac.
O codec Dirac Pro é um subconjunto e é padronizado como SMPTE VC-2.
‘dnxhd video (dnxhd, dnxhr)’
Vídeo Avid DNxHD.
É padronizado como SMPTE VC-3. Aceita fluxos DNxHR.
‘dts audio ’
Áudio DTS Coherent Acoustics (DCA)
‘eac3 audio ’
Dolby Digital Plus, também conhecido como Enhanced AC-3
‘evc video (evc)’
Vídeo MPEG-5 Essential Video Coding (EVC) / EVC / MPEG-5 Parte 1 EVC
‘g722 audio ’
Áudio ITU-T G.722
‘g723_1 audio (tco, rco)’
Áudio ITU-T G.723.1
‘g726 audio ’
Áudio ITU-T G.726 big-endian ("alinhado à esquerda").
Nenhuma extensão é registrada, portanto o nome do formato precisa ser fornecido, por exemplo, com a ferramenta de linha de comando ffmpeg usando -f g726.
‘g726le audio ’
Áudio ITU-T G.726 little-endian ("alinhado à direita").
Nenhuma extensão é registrada, portanto o nome do formato precisa ser fornecido, por exemplo, com a ferramenta de linha de comando ffmpeg usando -f g726le.
‘gsm audio ’
Áudio Global System for Mobile Communications
‘h261 video ’
Vídeo ITU-T H.261
‘h263 video ’
Vídeo ITU-T H.263 / H.263-1996, H.263+ / H.263-1998 / H.263 versão 2
‘h264 video (h264, 264)’
Vídeo ITU-T H.264 / MPEG-4 Parte 10 AVC. O bitstream deve ser convertido para a sintaxe Annex B se estiver no modo com prefixo de comprimento.
‘hevc video (hevc, h265, 265)’
Vídeo ITU-T H.265 / MPEG-H Parte 2 HEVC. O bitstream deve ser convertido para a sintaxe Annex B se estiver no modo com prefixo de comprimento.
‘m4v video ’
Vídeo MPEG-4 Parte 2
‘mjpeg video (mjpg, mjpeg)’
Vídeo Motion JPEG
‘mlp audio ’
Meridian Lossless Packing, também conhecido como Packed PCM
‘mp2 audio (mp2, m2a, mpa)’
Áudio MPEG-1 Audio Layer II
‘mpeg1video video (mpg, mpeg, m1v)’
Vídeo MPEG-1 Parte 2.
‘mpeg2video video (m2v)’
Vídeo ITU-T H.262 / MPEG-2 Parte 2
‘obu video ’
Muxer AV1 de Open Bitstream Units de baixo overhead.
OBUs delimitadoras temporais serão inseridas em todas as unidades temporais do fluxo.
‘rawvideo video (yuv, rgb)’
Vídeo bruto não compactado.
‘sbc audio (sbc, msbc)’
Áudio com codec de subbanda de baixa complexidade Bluetooth SIG
‘truehd audio (thd)’
Áudio Dolby TrueHD
‘vc1 video ’
Vídeo SMPTE 421M / VC-1
4.1.1 Exemplos
- Armazene quadros de vídeo brutos com o muxer ‘rawvideo’ usando
ffmpeg:ffmpeg -f lavfi -i testsrc -t 10 -s hd1080p testsrc.yuv
Como o muxer rawvideo não armazena as informações relacionadas a tamanho e formato, essas informações devem ser fornecidas ao demuxar o arquivo:
ffplay -video_size 1920x1080 -pixel_format rgb24 -f rawvideo testsrc.rgb
4.2 Muxers PCM brutos
Esta seção aborda os muxers de áudio PCM (Pulse-Code Modulation) brutos.
Eles aceitam um único fluxo correspondente ao codec designado. Eles não armazenam marcas de tempo nem metadados. A extensão reconhecida é a mesma do nome do muxer.
Compreende os seguintes muxers. A extensão adicional opcional usada para selecionar automaticamente o muxer a partir da extensão de saída também é mostrada entre parênteses.
‘alaw (al)’
PCM A-law
‘f32be’
PCM de ponto flutuante de 32 bits big-endian
‘f32le’
PCM de ponto flutuante de 32 bits little-endian
‘f64be’
PCM de ponto flutuante de 64 bits big-endian
‘f64le’
PCM de ponto flutuante de 64 bits little-endian
‘mulaw (ul)’
PCM mu-law
‘s16be’
PCM com sinal de 16 bits big-endian
‘s16le’
PCM com sinal de 16 bits little-endian
‘s24be’
PCM com sinal de 24 bits big-endian
‘s24le’
PCM com sinal de 24 bits little-endian
‘s32be’
PCM com sinal de 32 bits big-endian
‘s32le’
PCM com sinal de 32 bits little-endian
‘s8 (sb)’
PCM com sinal de 8 bits
‘u16be’
PCM sem sinal de 16 bits big-endian
‘u16le’
PCM sem sinal de 16 bits little-endian
‘u24be’
PCM sem sinal de 24 bits big-endian
‘u24le’
PCM sem sinal de 24 bits little-endian
‘u32be’
PCM sem sinal de 32 bits big-endian
‘u32le’
PCM sem sinal de 32 bits little-endian
‘u8 (ub)’
PCM sem sinal de 8 bits
‘vidc’
PCM Archimedes VIDC
4.3 Muxers de program stream MPEG-1/MPEG-2
Esta seção aborda os formatos pertencentes à família MPEG-1 e MPEG-2 Systems.
O formato MPEG-1 Systems (também conhecido como ISO/IEEC 11172-1 ou MPEG-1 program stream) foi adotado para o formato das faixas de mídia armazenadas em VCD (Video Compact Disc).
O padrão MPEG-2 Systems (também conhecido como ISO/IEEC 13818-1) abrange dois formatos de container, um conhecido como transport stream e outro como program stream; apenas este último é abordado aqui.
O formato MPEG-2 program stream (também conhecido como VOB devido à extensão de arquivo correspondente) é uma extensão do MPEG-1 program stream: além de ser compatível com diferentes codecs para os fluxos de áudio e vídeo, também armazena legendas e metadados de navegação. O MPEG-2 program stream foi adotado para armazenar fluxos de mídia em dispositivos de armazenamento SVCD e DVD.
Esta seção compreende os seguintes muxers.
‘mpeg (mpg,mpeg)’
Muxer MPEG-1 Systems / MPEG-1 program stream.
‘vcd’
Muxer MPEG-1 Systems / MPEG-1 program stream (VCD).
Este muxer pode ser usado para gerar faixas no formato aceito pelos dispositivos de armazenamento VCD (Video Compact Disc).
É igual ao muxer ‘mpeg’, com algumas diferenças.
‘vob’
Muxer de MPEG-2 program stream (VOB).
‘dvd’
Muxer de MPEG-2 program stream (DVD VOB).
Este muxer pode ser usado para gerar faixas no formato aceito pelos dispositivos de armazenamento DVD (Digital Versatile Disc).
É igual ao muxer ‘vob’, com algumas diferenças.
‘svcd (vob)’
Muxer de MPEG-2 program stream (SVCD VOB).
Este muxer pode ser usado para gerar faixas no formato aceito pelos dispositivos de armazenamento SVCD (Super Video Compact Disc).
É igual ao muxer ‘vob’, com algumas diferenças.
4.3.1 Opções
muxrate rate
Define a taxa de mux definida pelo usuário, expressa em bits/s. Se não for especificada, é usada a taxa de mux calculada automaticamente. O valor padrão é 0.
preload delay
Define o atraso inicial de demux-decode em microssegundos. O valor padrão é 500000.
4.4 Muxers MOV/MPEG-4/ISOMBFF
Esta seção aborda os formatos pertencentes à família QuickTime / MOV, incluindo o formato MPEG-4 Part 14 e o formato de arquivo de mídia base ISO (ISOBMFF). Esses formatos compartilham uma estrutura comum baseada no formato de arquivo de mídia base ISO (ISOBMFF).
O formato MOV foi originalmente desenvolvido para uso com o Apple QuickTime. Mais tarde, foi usado como base para o formato MPEG-4 Part 1 (posteriormente Part 14), também conhecido como ISO/IEC 14496-1. Esse formato foi então generalizado no ISOBMFF, também chamado de formato MPEG-4 Part 12, ISO/IEC 14496-12 ou ISO/IEC 15444-12.
Compreende os seguintes muxers.
‘3gp’
Formato Third Generation Partnership Project (3GPP) para serviços multimídia 3G UMTS
‘3g2’
Formato Third Generation Partnership Project 2 (3GP2 ou 3GPP2) para serviços multimídia 3G CDMA2000, semelhante a ‘3gp’ com extensões e limitações
‘f4v’
Formato Adobe Flash Video
‘ipod’
Formato de arquivo de áudio MPEG-4, semelhante a MOV/MP4 mas limitado a conter apenas fluxos de áudio, normalmente reproduzido no dispositivo Apple ipod
‘ismv’
Formato Microsoft IIS (Internet Information Services) Smooth Streaming Audio/Video (ISMV ou ISMA). Baseia-se no formato MPEG-4 Part 14 com algumas variantes incompatíveis, usado para transmitir arquivos de mídia com o servidor Microsoft IIS.
‘mov’
Formato do reprodutor QuickTime identificado pela extensão .mov
‘mp4’
Formato MP4 ou MPEG-4 Part 14
‘psp’
Variante do formato MP4/MPEG-4 Part 14 para PlayStation Portable. Baseia-se no formato MPEG-4 Part 14 com algumas variantes incompatíveis, usado para reproduzir arquivos em dispositivos PlayStation.
4.4.1 Fragmentação
Os muxers ‘mov’, ‘mp4’ e ‘ismv’ oferecem suporte a fragmentação. Normalmente, um arquivo MOV/MP4 armazena em um único local todos os metadados relativos a todos os pacotes.
Esses dados costumam ser gravados no final do arquivo, mas podem ser movidos para o início para melhorar a reprodução adicionando +faststart a -movflags, ou usando a ferramenta qt-faststart).
Um arquivo fragmentado consiste em vários fragmentos, nos quais os pacotes e os metadados referentes a esses pacotes são armazenados juntos. Gravar um arquivo fragmentado tem a vantagem de que o arquivo pode ser decodificado mesmo que a gravação seja interrompida (enquanto um MOV/MP4 normal não pode ser decodificado se não for finalizado corretamente), e exige menos memória ao gravar arquivos muito longos (já que gravar arquivos MOV/MP4 normais armazena em memória as informações de cada pacote até o arquivo ser fechado). A desvantagem é que ele é menos compatível com outros aplicativos.
A fragmentação é habilitada definindo uma das opções que definem como dividir o arquivo em fragmentos:
frag_duration frag_size min_frag_duration movflags +frag_keyframe movflags +frag_custom
Se mais de uma condição for especificada, os fragmentos são cortados quando uma das condições especificadas é satisfeita. A exceção é a opção min_frag_duration, que precisa ser satisfeita para que qualquer uma das outras condições se aplique.
4.4.2 Opções
brand brand_string
Sobrescreve a marca principal.
empty_hdlr_name bool
Ative para pular a gravação do nome dentro de uma caixa hdlr. O padrão é false.
encryption_key key
define a chave de criptografia da mídia em formato hexadecimal
encryption_kid kid
define o identificador da chave de criptografia da mídia em formato hexadecimal
encryption_scheme scheme
configura o esquema de criptografia; os valores permitidos são ‘none’ e ‘cenc-aes-ctr’
frag_duration duration
Cria fragmentos com duração de duration microssegundos.
frag_interleave number
Intercala as amostras dentro dos fragmentos (número máximo de amostras consecutivas; quanto menor, mais compacto é o intercalamento, porém com mais sobrecarga. O valor padrão é 0.
frag_size size
cria fragmentos que contêm até size bytes de dados úteis
iods_audio_profile profile
especifica o número iods do átomo de perfil de áudio (de -1 a 255); o padrão é -1
iods_video_profile profile
especifica o número iods do átomo de perfil de vídeo (de -1 a 255); o padrão é -1
ism_lookahead num_entries
especifica o número de entradas de antecipação para arquivos ISM (de 0 a 255); o padrão é 0
min_frag_duration duration
não cria fragmentos com duração menor que duration microssegundos
moov_size bytes
Reserva espaço para o átomo moov no início do arquivo em vez de colocá-lo no final. Se o espaço reservado for insuficiente, a multiplexação falhará.
mov_gamma gamma
especifica o valor de gama para o átomo gama (como número decimal de 0 a 10); o padrão é 0.0 e deve ser definido junto com + movflags
movflags flags
Define diversos comutadores de muxing. As seguintes flags podem ser usadas:
‘cmaf’
grava saída MP4 fragmentada compatível com CMAF (Common Media Application Format)
‘dash’
grava saída MP4 fragmentada compatível com DASH (Dynamic Adaptive Streaming over HTTP)
‘default_base_moof’
Assim como a flag ‘omit_tfhd_offset’, esta flag evita gravar o campo absoluto base_data_offset nos átomos tfhd, mas faz isso usando a nova flag default-base-is-moof. Essa flag é nova a partir de 14496-12:2012. Isso pode facilitar a análise dos fragmentos em certas circunstâncias (evitando basear o cálculo da posição dos fragmentos de faixa no fim implícito do fragmento de faixa anterior).
‘delay_moov’
adia a gravação do moov inicial até que o primeiro fragmento seja cortado, ou até o primeiro flush de fragmento
‘disable_chpl’
Desativa os marcadores de capítulo Nero (átomo chpl). Normalmente, tanto os capítulos Nero quanto uma faixa de capítulos do QuickTime são gravados no arquivo. Com esta opção ativada, somente a faixa de capítulos do QuickTime será gravada. Os capítulos Nero podem causar falhas quando o arquivo é reprocessado com certos programas de marcação, como o mp3Tag 2.61a e o iTunes 11.3; é provável que outras versões também sejam afetadas.
‘faststart’
Executa uma segunda passada movendo o índice (átomo moov) para o início do arquivo. Essa operação pode levar algum tempo e não funciona em diversas situações, como na saída fragmentada; por isso não fica habilitada por padrão.
‘frag_custom’
Permite que quem chama a função escolha manualmente quando cortar os fragmentos, chamando av_write_frame(ctx, NULL) para gravar um fragmento com os pacotes escritos até então. (Isso só é útil em outros aplicativos que integram o libavformat, não a partir do ffmpeg.)
‘frag_discont’
sinaliza que o próximo fragmento é descontínuo em relação aos anteriores
‘frag_every_frame’
fragmenta a cada quadro
‘frag_keyframe’
inicia um novo fragmento a cada keyframe de vídeo
‘global_sidx’
grava um índice sidx global no início do arquivo
‘isml’
cria um feed de Smooth Streaming ao vivo (para envio a um ponto de publicação)
‘negative_cts_offsets’
Habilita o uso da versão 1 da caixa CTTS, na qual os deslocamentos CTS podem ser negativos. Isso permite que a amostra inicial tenha DTS/CTS igual a zero e reduz a necessidade de listas de edição em alguns casos, como faixas de vídeo com B-frames. Além disso, facilita a conformidade com as diretrizes de interoperabilidade do DASH-IF.
Esta opção é definida implicitamente ao gravar arquivos ‘ismv’ (Smooth Streaming).
‘omit_tfhd_offset’
Não grava nenhum base_data_offset absoluto nos átomos tfhd. Isso evita vincular os fragmentos a posições de byte absolutas no arquivo/fluxos.
‘prefer_icc’
Ao gravar o átomo colr, prioriza o uso do perfil ICC caso exista nos dados laterais do pacote de fluxo.
‘rtphint’
adiciona faixas de sugestão RTP ao arquivo de saída
‘separate_moof’
Grava um átomo moof (fragmento de filme) separado para cada faixa. Normalmente, os pacotes de todas as faixas são gravados em um único átomo moof (o que é um pouco mais eficiente), mas com esta opção ativada, o muxer grava um par moof/mdat para cada faixa, facilitando a separação das faixas.
‘skip_sidx’
Pula a gravação do átomo sidx. Quando a sobrecarga de taxa de bits causada pelo átomo sidx é alta, esta opção pode ser usada nos casos em que o átomo sidx não é obrigatório. Quando a flag ‘global_sidx’ está habilitada, esta opção é ignorada.
‘skip_trailer’
pula a gravação do trailer mfra/tfra/mfro em arquivos fragmentados
‘use_metadata_tags’
usa o átomo mdta para metadados
‘write_colr’
grava o átomo colr mesmo que a informação de cor não esteja especificada. Esta flag é experimental, pode ser renomeada ou alterada; não a use em scripts.
‘write_gama’
grava o átomo gama obsoleto
‘hybrid_fragmented’
Para fins de recuperação, grava o arquivo de saída como um arquivo fragmentado. Isso permite ler o arquivo intermediário enquanto ele está sendo gravado (em especial, se o processo de gravação for interrompido de forma abrupta). Quando a gravação termina, o arquivo é convertido em um arquivo regular, não fragmentado, o que é mais compatível e permite uma busca (seek) mais fácil e rápida.
Se a gravação for interrompida, o arquivo intermediário pode ser remultiplexado manualmente para obter um arquivo regular, não fragmentado, com o que havia sido gravado no arquivo inacabado.
movie_timescale scale
Define a escala de tempo gravada na caixa de cabeçalho do filme (mvhd). O intervalo é de 1 a INT_MAX. O padrão é 1000.
rtpflags flags
Adiciona faixas de sugestão RTP ao arquivo de saída.
As seguintes flags podem ser usadas:
‘h264_mode0’
usa o modo 0 para H.264 em RTP
‘latm’
usa empacotamento MP4A-LATM em vez de MPEG4-GENERIC para AAC
‘rfc2190’
usa empacotamento RFC 2190 em vez de RFC 4629 para H.263
‘send_bye’
envia pacotes RTCP BYE ao finalizar
‘skip_rtcp’
não envia relatórios de remetente RTCP
skip_iods bool
pula a gravação do átomo iods (o padrão é true)
use_editlist bool
usa lista de edição (o padrão é auto)
use_stream_ids_as_track_ids bool
usa os IDs de fluxo como IDs de faixa (o padrão é false)
video_track_timescale scale
Define a escala de tempo usada para as faixas de vídeo. O intervalo é de 0 a INT_MAX. Se definido como 0, a escala de tempo é definida automaticamente com base na base de tempo nativa do fluxo. O padrão é 0.
write_btrt bool
Força ou desativa a gravação da caixa bitrate dentro da caixa stsd de uma faixa. A caixa contém o tamanho do buffer de decodificação (em bytes), a taxa de bits máxima e a taxa de bits média da faixa. A caixa será omitida se nenhum desses valores puder ser calculado. O padrão é -1 ou auto, o que grava a caixa apenas no modo MP4.
write_prft option
Grava a caixa de referência de tempo do produtor (PRFT) com a fonte de tempo especificada para o campo NTP da caixa PRFT. Defina o valor como ‘wallclock’ para indicar a fonte de tempo como o relógio de parede, e ‘pts’ para indicar a fonte de tempo como os valores PTS dos pacotes de entrada.
write_tmcd bool
Especifique on para forçar a gravação de uma faixa de timecode, off para desativá-la e auto para gravar uma faixa de timecode somente para saída mov e mp4 (padrão).
Definir o valor como ‘pts’ só é aplicável a um caso de uso de codificação ao vivo, no qual os valores PTS são definidos como o horário do relógio de parede na origem. Por exemplo, um caso de uso de codificação com fonte de captura decklink em que video_pts e audio_pts são definidos como ‘abs_wallclock’.
4.4.3 Exemplos
- Envia conteúdo de Smooth Streaming em tempo real para um ponto de publicação no IIS usando o muxer ‘ismv’ com o
ffmpeg:ffmpeg -re <normal input/transcoding options> -movflags isml+frag_keyframe -f ismv http://server/publishingpoint.isml/Streams(Encoder1)
4.5 a64
Muxer de vídeo A64 Commodore 64.
Este muxer aceita um único fluxo de vídeo com codec a64_multi ou a64_multi5.
4.6 ac4
Muxer de áudio AC-4 bruto.
Este muxer aceita um único fluxo de áudio ac4.
4.6.1 Opções
write_crc bool
quando habilitado, grava uma soma de verificação CRC para cada pacote na saída; o padrão é false
4.7 adts
Muxer Audio Data Transport Stream.
Aceita um único fluxo AAC.
4.7.1 Opções
write_id3v2 bool
Ative para gravar tags ID3v2.4 no início do fluxo. Desativado por padrão.
write_apetag bool
Ative para gravar tags APE no final do fluxo. Desativado por padrão.
write_mpeg2 bool
Ative para definir o bit de versão MPEG no cabeçalho do quadro ADTS como 1, o que indica MPEG-2. O padrão é 0, que indica MPEG-4.
4.8 aea
Muxer de áudio MD STUDIO.
Este muxer aceita um único fluxo de áudio ATRAC1 com um ou dois canais e taxa de amostragem de 44100Hz.
Como o AEA permite armazenar o título da faixa, este muxer também grava no container o título proveniente dos metadados do fluxo.
4.9 aiff
Muxer Audio Interchange File Format.
4.9.1 Opções
write_id3v2 bool
Ative a gravação de tags ID3v2 definindo o valor como 1. O padrão é 0 (desativado).
id3v2_version bool
Seleciona a versão do ID3v2 a gravar. Atualmente só são compatíveis as versões 3 e 4 (também chamadas ID3v2.3 e ID3v2.4). O padrão é a versão 4.
4.10 alp
Muxer de áudio do jogo Lego Racers, da High Voltage Software.
Aceita um único fluxo ADPCM_IMA_ALP com no máximo 2 canais e taxa de amostragem não superior a 44100 Hz.
Extensões: tun, pcm
4.10.1 Opções
type type
Define o tipo de arquivo.
type aceita os seguintes valores:
‘tun’
Define o tipo de arquivo como music. Deve ter taxa de amostragem de 22050 Hz.
‘pcm’
Define o tipo de arquivo como sfx.
‘auto’
Define o tipo de arquivo conforme a extensão do arquivo de saída. .pcm resulta no tipo pcm; caso contrário, é definido o tipo tun. (padrão)
4.11 amr
Muxer de áudio 3GPP AMR (Adaptive Multi-Rate).
Aceita um único fluxo de áudio contendo um fluxo AMR NB.
4.12 amv
Muxer de formato AMV (Actions Media Video).
4.13 apm
Muxer de áudio Ubisoft Rayman 2 APM.
Aceita um único fluxo de áudio ADPCM IMA APM.
4.14 apng
Muxer Animated Portable Network Graphics.
Aceita um único fluxo de vídeo APNG.
4.14.1 Opções
final_delay delay
Força um atraso expresso em segundos após o último quadro de cada repetição. O valor padrão é 0.0.
plays repetitions
especifica quantas vezes reproduzir o conteúdo; 0 provoca um loop infinito, com 1 não há loop
4.14.2 Exemplos
- Use o
ffmpegpara gerar uma saída APNG com 2 repetições, com um atraso de meio segundo após a primeira repetição:ffmpeg -i INPUT -final_delay 0.5 -plays 2 out.apng
4.15 argo_asf
Muxer de áudio Argonaut Games ASF.
Aceita um único fluxo de áudio ADPCM.
4.15.1 Opções
version_major version
sobrescreve a versão principal do arquivo, especificada como número inteiro; o valor padrão é 2
version_minor version
sobrescreve a versão secundária do arquivo, especificada como número inteiro; o valor padrão é 1
name name
Incorpora o nome do arquivo ao arquivo; se não for especificado, usa o nome do arquivo de saída. O nome é truncado para 8 caracteres.
4.16 argo_cvg
Muxer de áudio Argonaut Games CVG.
Aceita um único fluxo de áudio ADPCM de um canal a 22050Hz.
As opções loop e reverb definem as flags correspondentes no cabeçalho, que podem ser recuperadas posteriormente para processar o fluxo de áudio de acordo.
4.16.1 Opções
skip_rate_check bool
pula a verificação da taxa de amostragem (o padrão é false)
loop bool
define a flag de loop (o padrão é false)
reverb boolean
define a flag de reverb (o padrão é true)
4.17 asf, asf_stream
Muxer de áudio Advanced / Active Systems (ou Streaming) Format.
A variante ‘asf_stream’ deve ser selecionada para streaming.
Observe que Windows Media Audio (wma) e Windows Media Video (wmv) também usam este muxer.
4.17.1 Opções
packet_size size
Define o tamanho do pacote do muxer em número de bytes. Ajustar essa configuração pode reduzir a fragmentação de dados ou a sobrecarga do muxer, dependendo da origem. O valor padrão é 3200, o mínimo é 100 e o máximo é 64Ki.
4.18 ass
Muxer de legendas ASS/SSA (SubStation Alpha).
Aceita um único fluxo de legendas ASS.
4.18.1 Opções
ignore_readorder bool
Grava os eventos de diálogo imediatamente, mesmo que estejam fora de ordem; o padrão é false, caso em que ficam em cache até que o evento do horário esperado seja encontrado.
4.19 ast
Muxer AST (Audio Stream).
Este formato é usado para reproduzir áudio em alguns jogos do Nintendo Wii.
Aceita um único fluxo de áudio.
As opções loopstart e loopend podem ser usadas para definir uma seção do arquivo a ser repetida em loop pelos reprodutores que respeitam essas opções.
4.19.1 Opções
loopstart start
Especifica a posição de início do loop, expressa em milissegundos, de -1 a INT_MAX; se -1 for definido, nenhum loop é especificado (padrão -1) e o valor de loopend é ignorado.
loopend end
Especifica a posição de fim do loop, expressa em milissegundos, de 0 a INT_MAX; o padrão é 0; se 0 for definido, assume-se a duração total do fluxo.
4.20 au
Muxer de áudio SUN AU.
Aceita um único fluxo de áudio.
4.21 avi
Muxer Audio Video Interleaved.
AVI é um formato proprietário desenvolvido pela Microsoft, especificado formalmente mais tarde por meio da especificação Open DML.
Devido a diferenças entre implementações de reprodutores, pode ser necessário definir algumas opções para garantir que a saída gerada seja reproduzida corretamente no reprodutor de destino.
4.21.1 Opções
flipped_raw_rgb bool
Se definido como true, armazena altura positiva para bitmaps RGB brutos, o que indica que o bitmap é armazenado de baixo para cima (bottom-up). Observe que esta opção não inverte o bitmap, o que precisa ser feito manualmente antes, por exemplo usando o filtro ‘vflip’. O padrão é false e indica que o bitmap é armazenado de cima para baixo (top down).
reserve_index_space size
Reserva a quantidade especificada de bytes para o índice mestre OpenDML de cada fluxo dentro do cabeçalho do arquivo. Por padrão, índices mestres adicionais são incorporados nos pacotes de dados quando não há espaço no primeiro índice mestre, e são encadeados formando uma sequência de índices. Essa estrutura de índice pode causar problemas em alguns casos de uso, por exemplo software de terceiros que dependa estritamente da especificação de índice OpenDML, ou quando a busca (seek) no arquivo é lenta. Reservar espaço de índice suficiente no cabeçalho do arquivo evita esses problemas.
O espaço de índice necessário depende do tamanho do arquivo de saída e deve ser de cerca de 16 bytes por gigabyte. Quando esta opção é omitida ou definida como zero, o espaço de índice necessário é estimado.
O valor padrão é 0.
write_channel_mask bool
Grava a máscara de layout de canais no cabeçalho do fluxo de áudio.
Esta opção fica habilitada por padrão. Desativar a máscara de canais pode ser útil em cenários específicos, por exemplo ao mesclar vários fluxos de áudio em um só para compatibilidade com softwares que aceitam apenas um único fluxo de áudio em AVI (veja (ffmpeg-filters)a seção "amerge" no manual do ffmpeg-filters).
4.22 avif
Muxer de formato de imagem AV1 (Alliance for Open Media Video codec 1).
Este muxer armazena imagens codificadas com o codec AV1.
Aceita um ou dois fluxos de vídeo. Caso sejam fornecidos dois fluxos de vídeo, o segundo deve conter um único plano armazenando a máscara alfa.
Caso mais de uma imagem seja fornecida, a saída gerada é considerada um AVIF animado, e o número de loops pode ser especificado com a opção loop.
Isso se baseia na especificação da Alliance for Open Media disponível na URL https://aomediacodec.github.io/av1-avif.
4.22.1 Opções
loop count
número de vezes que um AVIF animado é repetido em loop; 0 especifica um loop infinito, o padrão é 0
movie_timescale timescale
Define a escala de tempo gravada na caixa de cabeçalho do filme (mvhd). O intervalo é de 1 a INT_MAX. O padrão é 1000.
4.23 avm2
Muxer de formato ShockWave Flash (SWF) / ActionScript Virtual Machine 2 (AVM2).
Aceita um fluxo de áudio, um fluxo de vídeo, ou ambos.
4.24 bit
Muxer de formato de arquivo G.729 (.bit).
Aceita um único fluxo de áudio G.729.
4.25 caf
Muxer Apple CAF (Core Audio Format).
Aceita um único fluxo de áudio.
4.26 codec2
Muxer de áudio Codec2.
Aceita um único fluxo de áudio codec2.
4.27 chromaprint
Muxer de fingerprint Chromaprint.
Para habilitar a compilação deste filtro, é necessário configurar o FFmpeg com --enable-chromaprint.
Este muxer envia os dados de áudio para a biblioteca Chromaprint, que gera um fingerprint para os dados de áudio fornecidos. Veja: https://acoustid.org/chromaprint
Recebe um único fluxo de áudio bruto de 16 bits com sinal, em endianness nativa, com no máximo 2 canais.
4.27.1 Opções
algorithm version
Seleciona a versão do algoritmo a ser usada para gerar o fingerprint. O intervalo é de 0 a 4. A versão 3 habilita a detecção de silêncio. O padrão é 1.
fp_format format
Formato em que gerar o fingerprint. Aceita as seguintes opções:
‘base64’
Fingerprint comprimido em Base64 (padrão)
‘compressed’
Fingerprint binário comprimido
‘raw’
Fingerprint binário bruto
silence_threshold threshold
Limiar para detectar silêncio. O intervalo é de -1 a 32767, onde -1 desativa a detecção de silêncio. A detecção de silêncio só pode ser usada com a versão 3 do algoritmo.
A detecção de silêncio precisa estar desativada para uso com o serviço AcoustID. O padrão é -1.
4.28 crc
Muxer CRC (Cyclic Redundancy Check).
Este muxer calcula e imprime o CRC Adler-32 de todos os quadros de áudio e vídeo de entrada. Por padrão, os quadros de áudio são convertidos para áudio bruto de 16 bits com sinal e os quadros de vídeo para vídeo bruto antes de calcular o CRC.
A saída do muxer consiste em uma única linha no formato: CRC=0xCRC, em que CRC é um número hexadecimal preenchido com zeros até 8 dígitos, contendo o CRC de todos os quadros de entrada decodificados.
Veja também o muxer framecrc.
4.28.1 Exemplos
-
Use o
ffmpegpara calcular o CRC da entrada e armazená-lo no arquivo out.crc:ffmpeg -i INPUT -f crc out.crc -
Use o
ffmpegpara imprimir o CRC na saída padrão (stdout) com o comando:ffmpeg -i INPUT -f crc - -
Você pode selecionar o formato de saída de cada quadro com o
ffmpegespecificando o codec e o formato de áudio e vídeo. Por exemplo, para calcular o CRC do áudio de entrada convertido para PCM sem sinal de 8 bits e do vídeo de entrada convertido para vídeo MPEG-2, use o comando:ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f crc -
4.29 dash
Muxer Dynamic Adaptive Streaming over HTTP (DASH).
Este muxer cria segmentos e arquivos de manifesto de acordo com o padrão MPEG-DASH ISO/IEC 23009-1:2014 e atualizações posteriores do padrão.
Para mais informações, veja:
- Especificação ISO DASH: http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip
- Especificação WebM DASH: https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification
Este muxer cria um arquivo de manifesto MPD (Media Presentation Description) e arquivos de segmento para cada fluxo. Os arquivos de segmento são colocados no mesmo diretório do arquivo de manifesto MPD.
O nome de arquivo do segmento pode conter identificadores predefinidos usados na seção SegmentTemplate do manifesto, conforme definido na seção 5.3.9.4.4 do padrão.
Os identificadores disponíveis são $RepresentationID$, $Number$, $Bandwidth$ e $Time$. Além dos identificadores padrão, também é aceito um identificador específico do ffmpeg, $ext$. Quando especificado, o ffmpeg substitui $ext$ no nome do arquivo pela extensão do formato de muxing, como mp4, webm etc.
4.29.1 Opções
adaptation_sets adaptation_sets
Atribui fluxos a conjuntos de adaptação, especificados na seção AdaptationSets do manifesto MPD.
Um conjunto de adaptação contém um conjunto de um ou mais fluxos acessados como um único subconjunto, por exemplo fluxos correspondentes codificados em tamanhos diferentes que o usuário pode selecionar conforme a largura de banda disponível, ou fluxos de áudio diferentes em outro idioma.
Cada conjunto de adaptação é especificado com a sintaxe:
id=index,streams=streams
em que index deve ser um índice numérico, e streams é uma sequência de índices de fluxo separados por ,. Vários conjuntos de adaptação podem ser especificados, separados por espaços.
Para mapear todos os fluxos de vídeo (ou de áudio) para um conjunto de adaptação, pode-se usar v (ou a) como identificador de fluxo em vez dos IDs.
Quando nenhuma atribuição é definida, o padrão passa a ser um conjunto de adaptação para cada fluxo.
Os seguintes campos opcionais também podem ser especificados:
descriptor
Define o descritor conforme definido pela ISO/IEC 23009-1:2014/Amd.2:2015.
Por exemplo:
<SupplementalProperty schemeIdUri=\"urn:mpeg:dash:srd:2014\" value=\"0,0,0,1,1,2,2\"/>
A string do descritor deve ser uma tag XML autofechada (self-closing).
frag_duration
Sobrescreve a duração de fragmento global especificada com a opção frag_duration.
frag_type
Sobrescreve o tipo de fragmento global especificado com a opção frag_type.
seg_duration
Sobrescreve a duração de segmento global especificada com a opção seg_duration.
trick_id
Marca um conjunto de adaptação como contendo fluxos destinados a ser usados no modo Trick para o conjunto de adaptação referenciado.
Seguem alguns exemplos de valores possíveis para a opção adaptation_sets:
id=0,seg_duration=2,frag_duration=1,frag_type=duration,streams=v id=1,seg_duration=2,frag_type=none,streams=a
id=0,seg_duration=2,frag_type=none,streams=0 id=1,seg_duration=10,frag_type=none,trick_id=0,streams=1
dash_segment_type type
Define o tipo de arquivos de segmento DASH.
Valores possíveis:
‘auto’
O formato dos arquivos de segmento dash será selecionado com base no codec do fluxo. Este é o modo padrão.
‘mp4’
os arquivos de segmento dash estarão no formato ISOBMFF/MP4
‘webm’
os arquivos de segmento dash estarão no formato WebM
extra_window_size size
Define o número máximo de segmentos mantidos fora do manifesto antes de serem removidos do disco.
format_options options_list
Define opções do formato de container (mp4/webm) usando uma lista de parâmetros key=value separados por :. Valores que contenham o caractere especial : devem ser escapados.
frag_duration duration
Define a duração em segundos dos fragmentos dentro dos segmentos; também pode ser definido um valor fracionário.
frag_type type
Define o tipo de intervalo para a fragmentação.
Valores possíveis:
‘auto’
define um fragmento por segmento
‘every_frame’
fragmenta a cada quadro
‘duration’
fragmenta em intervalos de tempo específicos
‘pframes’
fragmenta nos keyframes e conforme a reordenação de P-frames (somente vídeo, experimental)
global_sidx bool
Grava o átomo SIDX global. Aplicável somente para arquivo único, saída mp4, modo sem streaming.
hls_master_name file_name
Nome da playlist mestra HLS. O padrão é master.m3u8.
hls_playlist bool
Gera arquivos de playlist HLS. A playlist mestra é gerada com o nome de arquivo especificado pela opção hls_master_name. É gerado um arquivo de playlist de mídia para cada fluxo, com nomes de arquivo media_0.m3u8, media_1.m3u8 etc.
http_opts http_opts
Especifica uma lista de opções key=value separadas por : a passar para o protocolo HTTP subjacente. Aplicável somente para saída HTTP.
http_persistent bool
Usa conexões HTTP persistentes. Aplicável somente para saída HTTP.
http_user_agent user_agent
Sobrescreve o campo User-Agent no cabeçalho HTTP. Aplicável somente para saída HTTP.
ignore_io_errors bool
Ignora erros de E/S durante a abertura e a gravação. Útil para execuções de longa duração com saída de rede. Desativado por padrão.
index_correction bool
Habilita ou desativa a lógica de correção do índice de segmento. Aplicável somente quando use_template está habilitado e use_timeline está desativado. Desativado por padrão.
Quando habilitada, a lógica monitora o fluxo dos índices de segmento. Se o valor do índice de segmento de um fluxo não estiver na posição em tempo real esperada, a lógica corrige esse valor de índice.
Normalmente essa lógica é necessária em casos de uso de streaming ao vivo. As flutuações de largura de banda de rede são comuns durante transmissões de longa duração. Cada flutuação pode fazer com que os índices de segmento fiquem atrasados em relação à posição em tempo real esperada.
init_seg_name init_name
Nome com modelo DASH a ser usado para o segmento de inicialização. O padrão é init-stream$RepresentationID$.$ext$. $ext$ é substituído pela extensão de nome de arquivo específica do formato de segmento.
ldash bool
Habilita o Low-latency Dash restringindo a presença e os valores de alguns elementos. Desativado por padrão.
lhls bool
Habilita o Low-latency HLS (LHLS). Adiciona a tag #EXT-X-PREFETCH com o URI do segmento atual. O pessoal do reprodutor hls.js está tentando padronizar uma especificação LHLS aberta. O rascunho da especificação está disponível em https://github.com/video-dev/hlsjs-rfcs/blob/lhls-spec/proposals/0001-lhls.md.
Esta opção tenta cumprir a especificação aberta acima. Ela habilita automaticamente as opções streaming e hls_playlist. É um recurso experimental.
Observação: esta não é a versão LHLS da Apple. Veja https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis
master_m3u8_publish_rate segment_intervals_count
Publica a master playlist repetidamente após o número especificado de intervalos de segmento.
max_playback_rate rate
Define a taxa de reprodução máxima indicada como apropriada para fins de ajuste automático da latência de reprodução e da ocupação de buffer pelos clientes durante a reprodução normal.
media_seg_name segment_name
Nome com modelo DASH a ser usado para os segmentos de mídia. O padrão é chunk-stream$RepresentationID$-$Number%05d$.$ext$. $ext$ é substituído pela extensão de nome de arquivo específica do formato de segmento.
method method
Usa o método HTTP indicado para criar os arquivos de saída. Geralmente definido como PUT ou POST.
min_playback_rate rate
Define a taxa de reprodução mínima indicada como apropriada para fins de ajuste automático da latência de reprodução e da ocupação de buffer pelos clientes durante a reprodução normal.
mpd_profile flags
Define um ou mais perfis de manifesto MPD.
Valores possíveis:
‘dash’
Perfil ao vivo MPEG-DASH ISO Base media file format
‘dvb_dash’
Perfil DVB-DASH
O valor padrão é dash.
remove_at_exit bool
Habilita ou desativa a remoção de todos os segmentos ao finalizar. Desativado por padrão.
seg_duration duration
Define a duração do segmento em segundos (pode ser definido um valor fracionário). O valor é tratado como duração média do segmento quando a opção use_template está habilitada e a opção use_timeline está desativada, e como duração mínima do segmento em todos os outros casos.
O valor padrão é 5.
single_file bool
Habilita ou desativa o armazenamento de todos os segmentos em um único arquivo, acessado por intervalos de bytes. Desativado por padrão.
O nome do arquivo único pode ser especificado com a opção single_file_name; se não for especificado, assume-se o nome base do arquivo de manifesto com a extensão do formato de saída.
single_file_name file_name
Nome com modelo DASH a ser usado para o elemento baseURL do manifesto. Implica que a opção single_file é definida como true. No modelo, $ext$ é substituído pela extensão de nome de arquivo específica do formato de segmento.
availability_start_time_ms milliseconds
Define o atributo availabilityStartTime do MPD como tempo Unix epoch em milissegundos. Se definido como 0, é usado o relógio de parede no momento em que o primeiro pacote é gravado. Isso é útil para saídas ao vivo que precisam de um horário de início de disponibilidade estável entre reinicializações.
streaming bool
Habilita ou desativa o modo de streaming por chunks da saída. No modo de streaming por chunks, cada quadro será um fragmento moof que forma um chunk. Desativado por padrão.
suggested_presentation_delay duration
Define o atributo suggestedPresentationDelay do MPD. Se definido como 0, é usada a duração do último segmento.
target_latency target_latency
Define uma latência-alvo pretendida em segundos para o fornecimento (pode ser definido um valor fracionário). Aplicável somente quando as opções streaming e write_prft estão habilitadas. É um campo informativo que os clientes podem usar para medir a latência do serviço.
timeout timeout
Define o tempo limite para operações de E/S de socket, expresso em segundos (pode ser definido um valor fracionário). Aplicável somente para saída HTTP.
update_period period
Define o período de atualização do MPD, para conteúdo dinâmico. A unidade é o segundo. Se definido como 0, o período é calculado automaticamente.
O valor padrão é 0.
use_template bool
Habilita ou desativa o uso de SegmentTemplate em vez de SegmentList no manifesto. Habilitado por padrão.
use_timeline bool
Habilita ou desativa o uso de SegmentTimeline dentro da seção SegmentTemplate do manifesto. Habilitado por padrão.
utc_timing_url url
URL da página que retornará a marca de tempo UTC em formato ISO, por exemplo https://time.akamai.com/?iso
window_size size
Define o número máximo de segmentos mantidos no manifesto, descartando o mais antigo. Isso é útil para streaming ao vivo.
Se o valor for 0, todos os segmentos são mantidos no manifesto. O valor padrão é 0.
write_prft write_prft
Grava elementos Producer Reference Time nos fluxos compatíveis. Isso também habilita a gravação de caixas prft no muxer subjacente. Aplicável somente quando a opção utc_url está habilitada. Por padrão é definido como auto, caso em que o muxer tentará habilitá-lo somente nos modos que o exigem.
4.29.2 Exemplo
Gere uma saída DASH lendo de uma fonte de entrada em tempo real usando ffmpeg.
Dois fluxos multimídia são gerados a partir do arquivo de entrada, ambos contendo um fluxo de vídeo codificado com ‘libx264’ e um fluxo de áudio codificado com ‘libfdk_aac’. O primeiro fluxo multimídia contém vídeo com taxa de bits de 800k e áudio na taxa padrão; o segundo, com vídeo escalado para 320x170 pixels a 300k e áudio reamostrado a 22005 Hz.
A opção window_size mantém apenas os 5 segmentos mais recentes, com a duração padrão de 5 segundos.
ffmpeg -re -i <input> -map 0 -map 0 -c:a libfdk_aac -c:v libx264 \
-b:v:0 800k -profile:v:0 main \
-b:v:1 300k -s:v:1 320x170 -profile:v:1 baseline -ar:a:1 22050 \
-bf 1 -keyint_min 120 -g 120 -sc_threshold 0 -b_strategy 0 \
-use_timeline 1 -use_template 1 -window_size 5 \
-adaptation_sets "id=0,streams=v id=1,streams=a" \
-f dash /path/to/out.mpd
4.30 daud
Muxer de áudio D-Cinema.
Aceita um único fluxo de áudio de 6 canais, reamostrado a 96000 Hz e codificado com o codec ‘pcm_24daud’.
4.30.1 Exemplo
Use o ffmpeg para multiplexar o áudio de entrada em um layout de canais ‘5.1’ reamostrado a 96000Hz:
ffmpeg -i INPUT -af aresample=96000,pan=5.1 slow.302
Em versões do ffmpeg anteriores à 7.0, pode ser necessário usar o filtro ‘asetnsamples’ para limitar o tamanho do pacote multiplexado, pois este formato não aceita multiplexar pacotes maiores que 65535 bytes (3640 amostras). Em versões mais recentes do ffmpeg, o áudio é automaticamente empacotado em pacotes de 36000 bytes (2000 amostras).
4.31 dv
Muxer DV (Digital Video).
Aceita exatamente um fluxo de vídeo ‘dvvideo’ e no máximo dois fluxos de áudio ‘pcm_s16’. Outras restrições são definidas pelas propriedades do vídeo, que deve corresponder a um perfil de vídeo DV compatível, e pela taxa de quadros.
4.31.1 Exemplo
Use o ffmpeg para converter a entrada:
ffmpeg -i INPUT -s:v 720x480 -pix_fmt yuv411p -r 29.97 -ac 2 -ar 48000 -y out.dv
4.32 ffmetadata
Muxer de metadados do FFmpeg.
Este muxer grava os metadados dos fluxos no formato ‘ffmetadata’.
Consulte (ffmpeg-formats)o capítulo de metadados para mais informações sobre o formato.
4.32.1 Exemplo
Use o ffmpeg para extrair metadados de um arquivo de entrada para um arquivo metadata.ffmeta no formato ‘ffmetadata’:
ffmpeg -i INPUT -f ffmetadata metadata.ffmeta
4.33 fifo
Muxer FIFO (First-In First-Out).
O pseudo-muxer ‘fifo’ permite separar a codificação da multiplexação usando uma fila FIFO (primeiro a entrar, primeiro a sair) e executando o muxer real em uma thread separada.
Isso é especialmente útil combinado com o muxer tee e pode ser usado para enviar dados a vários destinos com diferentes níveis de confiabilidade, velocidade de escrita e latência.
O muxer de destino é selecionado a partir do nome de saída ou especificado por meio da opção fifo_format.
O comportamento do muxer ‘fifo’ quando a fila enche ou quando a saída falha (por exemplo, se um pacote não puder ser gravado na saída) é configurável:
- A saída pode ser reiniciada de forma transparente, com um atraso configurável entre as tentativas, baseado no tempo real ou no tempo do fluxo processado.
- A codificação pode ser bloqueada durante uma falha temporária, ou continuar de forma transparente descartando pacotes caso a fila FIFO encha.
Os usuários da API devem estar cientes de que as funções de callback (interrupt_callback, io_open e io_close) usadas dentro do seu AVFormatContext devem ser thread-safe.
4.33.1 Opções
attempt_recovery bool
Se ocorrer uma falha, tenta recuperar a saída. Isso é especialmente útil quando usado com saída de rede, já que possibilita reiniciar a transmissão de forma transparente. Por padrão, esta opção é definida como false.
drop_pkts_on_overflow bool
Se definida como true, quando a fila fifo encher, os pacotes serão descartados em vez de bloquear o encoder. Isso possibilita continuar a transmissão sem atrasar a entrada, ao custo de perder parte do fluxo. Por padrão, esta opção é definida como false, de modo que nesses casos o encoder ficará bloqueado até que o muxer processe parte dos pacotes, sem que nenhum deles seja perdido.
fifo_format format_name
Especifica o nome do formato. Útil quando não é possível deduzi-lo a partir do sufixo do nome de saída.
format_opts options
Especifica opções de formato para o muxer subjacente. As opções do muxer podem ser especificadas como uma lista de pares chave=valor separados por ’:’.
max_recovery_attempts count
Define o número máximo de tentativas de recuperação malsucedidas consecutivas após o qual a saída falha permanentemente. Por padrão, esta opção é definida como 0 (ilimitado).
queue_size size
Especifica o tamanho da fila como número de pacotes. O valor padrão é 60.
recover_any_error bool
Se definida como true, a recuperação será tentada independentemente do tipo de erro que causou a falha. Por padrão, esta opção é definida como false e, em caso de determinados erros (geralmente permanentes), a recuperação não é tentada mesmo quando a opção attempt_recovery está definida como true.
recovery_wait_streamtime bool
Se definida como false, o tempo real é usado ao aguardar a tentativa de recuperação (ou seja, a recuperação será tentada após o tempo especificado pela opção recovery_wait_time).
Se definida como true, é considerado em vez disso o tempo do fluxo processado (ou seja, a recuperação será tentada após descartar os pacotes correspondentes à opção recovery_wait_time).
Por padrão, esta opção é definida como false.
recovery_wait_time duration
Especifica o tempo de espera em segundos antes da próxima tentativa de recuperação, após uma tentativa de recuperação malsucedida anterior. O valor padrão é 5.
restart_with_keyframe bool
Especifica se deve aguardar o keyframe após recuperar-se de um estouro de fila ou de uma falha. Esta opção é definida como false por padrão.
timeshift duration
Armazena em buffer a quantidade especificada de pacotes e atrasa a gravação da saída. Observe que o valor da opção queue_size deve ser grande o suficiente para armazenar os pacotes do timeshift. Ao final da entrada, o buffer fifo é esvaziado na velocidade do tempo real.
4.33.2 Exemplo
Use o ffmpeg para transmitir a um servidor RTMP, continuar processando o fluxo na taxa de tempo real mesmo em caso de falha temporária (interrupção de rede) e tentar recuperar a transmissão a cada segundo indefinidamente:
ffmpeg -re -i ... -c:v libx264 -c:a aac -f fifo -fifo_format flv \
-drop_pkts_on_overflow 1 -attempt_recovery 1 -recovery_wait_time 1 \
-map 0:v -map 0:a rtmp://example.com/live/stream_name
4.34 film_cpk
Muxer Sega film (.cpk).
Este formato era usado como formato interno em vários jogos da Sega.
Para mais informações sobre o formato de arquivo Sega film, visite http://wiki.multimedia.cx/index.php?title=Sega_FILM.
Aceita no máximo um fluxo de vídeo ‘cinepak’ ou raw, e no máximo um fluxo de áudio.
4.35 filmstrip
Muxer Adobe Filmstrip.
Este formato é usado por várias ferramentas da Adobe para armazenar uma exportação de filmstrip gerada. Aceita um único fluxo de vídeo raw.
4.36 fits
Muxer Flexible Image Transport System (FITS).
Este formato de imagem é usado para armazenar dados astronômicos.
Para mais informações sobre o formato, visite https://fits.gsfc.nasa.gov.
4.37 flac
Muxer de áudio FLAC raw.
Este muxer aceita exatamente um fluxo de áudio FLAC. Além disso, é possível adicionar imagens com disposition ‘attached_pic’.
4.37.1 Opções
write_header bool
grava o cabeçalho do arquivo se definida como true; o padrão é true
4.37.2 Exemplo
Use o ffmpeg para armazenar o fluxo de áudio de um arquivo de entrada, junto com várias imagens usadas com disposition ‘attached_pic’:
ffmpeg -i INPUT -i pic1.png -i pic2.jpg -map 0:a -map 1 -map 2 -disposition:v attached_pic OUTPUT
4.38 flv
Muxer Adobe Flash Video Format.
4.38.1 Opções
flvflags flags
Valores possíveis:
‘aac_seq_header_detect’
Posiciona o cabeçalho de sequência AAC com base nos dados do fluxo de áudio.
‘no_sequence_end’
Desativa a tag de fim de sequência.
‘no_metadata’
Desativa a tag de metadados.
‘no_duration_filesize’
Desativa duration e filesize nos metadados quando forem iguais a zero no final do fluxo. (Usado para fluxos ao vivo sem suporte a busca).
‘add_keyframe_index’
Usado para facilitar a busca; especialmente para pseudo streaming HTTP.
4.39 framecrc
Formato de teste de CRC (Cyclic Redundancy Check) por pacote.
Este muxer calcula e imprime o CRC Adler-32 para cada pacote de áudio e vídeo. Por padrão, os quadros de áudio são convertidos para áudio raw de 16 bits com sinal, e os quadros de vídeo para vídeo raw, antes de calcular o CRC.
A saída do muxer consiste em uma linha para cada pacote de áudio e vídeo no seguinte formato:
stream_index, packet_dts, packet_pts, packet_duration, packet_size, 0xCRC
CRC é um número hexadecimal preenchido com zeros à esquerda até 8 dígitos, contendo o CRC do pacote.
4.39.1 Exemplos
Por exemplo, para calcular o CRC dos quadros de áudio e vídeo em INPUT, convertidos em pacotes de áudio e vídeo raw, e armazená-lo no arquivo out.crc:
ffmpeg -i INPUT -f framecrc out.crc
Para imprimir as informações no stdout, use o comando:
ffmpeg -i INPUT -f framecrc -
Com o ffmpeg, é possível selecionar o formato de saída para o qual os quadros de áudio e vídeo são codificados antes de calcular o CRC de cada pacote, especificando o codec de áudio e vídeo. Por exemplo, para calcular o CRC de cada quadro de áudio de entrada decodificado e convertido para PCM sem sinal de 8 bits, e de cada quadro de vídeo de entrada decodificado e convertido para vídeo MPEG-2, use o comando:
ffmpeg -i INPUT -c:a pcm_u8 -c:v mpeg2video -f framecrc -
Consulte também o muxer crc.
4.40 framehash
Formato de teste de hash por pacote.
Este muxer calcula e imprime um hash criptográfico para cada pacote de áudio e vídeo. Isso pode ser usado para verificações de igualdade pacote a pacote, sem a necessidade de fazer uma comparação binária individual em cada um.
Por padrão, os quadros de áudio são convertidos para áudio raw de 16 bits com sinal, e os quadros de vídeo para vídeo raw, antes de calcular o hash, mas a saída de conversões explícitas para outros codecs também pode ser usada. Por padrão, usa a função de hash criptográfico SHA-256, mas aceita vários outros algoritmos.
A saída do muxer consiste em uma linha para cada pacote de áudio e vídeo no seguinte formato:
stream_index, packet_dts, packet_pts, packet_duration, packet_size, hash
hash é um número hexadecimal que representa o hash calculado para o pacote.
hash algorithm
Usa a função de hash criptográfico especificada pela string algorithm. Os valores aceitos incluem MD5, murmur3, RIPEMD128, RIPEMD160, RIPEMD256, RIPEMD320, SHA160, SHA224, SHA256 (padrão), SHA512/224, SHA512/256, SHA384, SHA512, CRC32 e adler32.
4.40.1 Exemplos
Para calcular o hash SHA-256 dos quadros de áudio e vídeo em INPUT, convertidos em pacotes de áudio e vídeo raw, e armazená-lo no arquivo out.sha256:
ffmpeg -i INPUT -f framehash out.sha256
Para imprimir as informações no stdout usando a função de hash MD5, use o comando:
ffmpeg -i INPUT -f framehash -hash md5 -
Consulte também o muxer hash.
4.41 framemd5
Formato de teste de MD5 por pacote.
Esta é uma variante do muxer framehash. Diferentemente daquele muxer, usa por padrão a função de hash MD5.
4.41.1 Exemplos
Para calcular o hash MD5 dos quadros de áudio e vídeo em INPUT, convertidos em pacotes de áudio e vídeo raw, e armazená-lo no arquivo out.md5:
ffmpeg -i INPUT -f framemd5 out.md5
Para imprimir as informações no stdout, use o comando:
ffmpeg -i INPUT -f framemd5 -
Consulte também os muxers framehash e md5.
4.42 gif
Muxer de GIF animado.
Observe que o formato GIF tem uma base de tempo muito grande: por isso, o atraso entre dois quadros não pode ser menor que um centissegundo.
4.42.1 Opções
loop bool
Define o número de vezes que a saída será repetida em loop. Use -1 para nenhum loop, 0 para loop indefinido (padrão).
final_delay delay
Força o atraso (expresso em centissegundos) após o último quadro. Cada quadro termina com um atraso até o próximo quadro. O padrão é -1, um valor especial que indica ao muxer que reutilize o atraso anterior. No caso de um loop, você pode querer personalizar esse valor para marcar uma pausa, por exemplo.
4.42.2 Exemplo
Codifique um gif que repete em loop 10 vezes, com um atraso de 5 segundos entre os loops:
ffmpeg -i INPUT -loop 10 -final_delay 500 out.gif
Nota 1: se quiser extrair os quadros em arquivos GIF separados, é necessário forçar o muxer image2:
ffmpeg -i INPUT -c:v gif -f image2 "out%d.gif"
4.43 gxf
Muxer General eXchange Format (GXF).
O GXF foi desenvolvido pela Grass Valley Group, depois padronizado pela SMPTE como SMPTE 360M, e foi estendido na SMPTE RDD 14-2007 para incluir resoluções de vídeo de alta definição.
Aceita no máximo um fluxo de vídeo com codec ‘mjpeg’, ‘mpeg1video’, ‘mpeg2video’, ou ‘dvvideo’ com resolução ‘512x480’ ou ‘608x576’, e vários fluxos de áudio com taxa de 48000Hz e codec ‘pcm16_le’.
4.44 hash
Formato de teste de hash.
Este muxer calcula e imprime um hash criptográfico de todos os quadros de áudio e vídeo de entrada. Isso pode ser usado para verificações de igualdade sem a necessidade de fazer uma comparação binária completa.
Por padrão, os quadros de áudio são convertidos para áudio raw de 16 bits com sinal, e os quadros de vídeo para vídeo raw, antes de calcular o hash, mas a saída de conversões explícitas para outros codecs também pode ser usada. As marcas de tempo são ignoradas. Por padrão, usa a função de hash criptográfico SHA-256, mas aceita vários outros algoritmos.
A saída do muxer consiste em uma única linha no formato: algo=hash, em que algo é uma string curta que representa a função de hash usada, e hash é um número hexadecimal que representa o hash calculado.
hash algorithm
Usa a função de hash criptográfico especificada pela string algorithm. Os valores aceitos incluem MD5, murmur3, RIPEMD128, RIPEMD160, RIPEMD256, RIPEMD320, SHA160, SHA224, SHA256 (padrão), SHA512/224, SHA512/256, SHA384, SHA512, CRC32 e adler32.
4.44.1 Exemplos
Para calcular o hash SHA-256 da entrada convertida em áudio e vídeo raw, e armazená-lo no arquivo out.sha256:
ffmpeg -i INPUT -f hash out.sha256
Para imprimir um hash MD5 no stdout, use o comando:
ffmpeg -i INPUT -f hash -hash md5 -
Consulte também o muxer framehash.
4.45 hds
Muxer HTTP Dynamic Streaming (HDS).
HTTP dynamic streaming, ou HDS, é um método de streaming de taxa de bits adaptável desenvolvido pela Adobe. O HDS entrega conteúdo de vídeo MP4 por meio de conexões HTTP. O HDS pode ser usado tanto para streaming sob demanda quanto para streaming ao vivo.
Este muxer cria um manifesto .f4m (Adobe Flash Media Manifest File), um arquivo .abst (Adobe Bootstrap File) para cada fluxo, e arquivos de segmento em um diretório especificado como saída.
Um player HDS precisa acessá-los via HTTPS para conseguir reproduzir o fluxo gerado.
4.45.1 Opções
extra_window_size int
número de fragmentos mantidos fora do manifesto antes de serem removidos do disco
min_frag_duration microseconds
duração mínima do fragmento (em microssegundos); o valor padrão é 1 segundo (10000000)
remove_at_exit bool
remove todos os fragmentos ao finalizar, quando definida como true
window_size int
número de fragmentos mantidos no manifesto, se definida com um valor diferente de 0. Por padrão, todos os segmentos são mantidos no diretório de saída.
4.45.2 Exemplo
Use o ffmpeg para gerar arquivos HDS no diretório output.hds na taxa de tempo real:
ffmpeg -re -i INPUT -f hds -b:v 200k output.hds
4.46 hls
Muxer Apple HTTP Live Streaming que segmenta MPEG-TS de acordo com a especificação HTTP Live Streaming (HLS).
Cria um arquivo de playlist e um ou mais arquivos de segmento. O nome do arquivo de saída especifica o nome do arquivo de playlist.
Por padrão, o muxer cria um arquivo para cada segmento produzido. Esses arquivos têm o mesmo nome da playlist, seguido de um número sequencial e da extensão .ts.
Certifique-se de exigir um GOP fechado ao codificar e de definir o tamanho do GOP de acordo com a restrição de tempo do segmento.
Por exemplo, para converter um arquivo de entrada com o ffmpeg:
ffmpeg -i in.mkv -c:v h264 -flags +cgop -g 30 -hls_time 1 out.m3u8
Este exemplo produzirá a playlist out.m3u8 e os arquivos de segmento out0.ts, out1.ts, out2.ts, etc.
Consulte também o muxer segment, que oferece uma implementação de segmentador mais genérica e flexível, e pode ser usado para realizar a segmentação HLS.
4.46.1 Opções
hls_init_time duration
Define o comprimento inicial desejado do segmento. O valor padrão é 0.
duration deve ser uma especificação de duração de tempo; consulte (ffmpeg-utils)a seção Time duration do manual ffmpeg-utils(1).
O segmento será cortado no próximo keyframe após decorrido esse tempo, na primeira lista m3u8. Depois que a playlist inicial for preenchida, o ffmpeg cortará os segmentos com duração igual a hls_time.
hls_time duration
Define o comprimento desejado do segmento. O valor padrão é 2.
duration deve ser uma especificação de duração de tempo; consulte (ffmpeg-utils)a seção Time duration do manual ffmpeg-utils(1). O segmento será cortado no próximo keyframe após decorrido esse tempo.
hls_list_size size
Define o número máximo de entradas da playlist. Se definida como 0, o arquivo de lista conterá todos os segmentos. O valor padrão é 5.
hls_delete_threshold size
Define o número de segmentos não referenciados a manter no disco antes que hls_flags delete_segments os exclua. Aumente esse valor para permitir que clientes ainda conectados baixem segmentos referenciados recentemente na playlist. O valor padrão é 1, o que significa que segmentos mais antigos que hls_list_size+1 serão excluídos.
hls_start_number_source source
Inicia o número de sequência da playlist (#EXT-X-MEDIA-SEQUENCE) de acordo com a source especificada. A menos que hls_flags single_file esteja definida, também especifica a origem dos números de sequência iniciais dos nomes de arquivo de segmento e de legenda. Em qualquer caso, se hls_flags append_list estiver definida e o número de sequência lido da playlist for maior que o número de sequência inicial especificado, esse valor será usado como valor inicial.
Aceita os seguintes valores:
generic (default)
Define os números iniciais de acordo com o valor da opção start_number.
epoch
Define o número inicial como os segundos desde o epoch (1970-01-01 00:00:00).
epoch_us
Define o número inicial como os microssegundos desde o epoch (1970-01-01 00:00:00).
datetime
Define o número inicial com base na data/hora atual no formato YYYYmmddHHMMSS. Por exemplo, 20161231235759.
start_number number
Inicia o número de sequência da playlist (#EXT-X-MEDIA-SEQUENCE) a partir do número especificado quando o valor de hls_start_number_source é generic (este é o caso padrão). A menos que hls_flags single_file esteja definida, também especifica os números de sequência iniciais dos nomes de arquivo de segmento e de legenda. O valor padrão é 0.
hls_allow_cache bool
Define explicitamente se o cliente PODE (1) ou NÃO DEVE (0) armazenar em cache os segmentos de mídia.
hls_base_url baseurl
Anexa baseurl a cada entrada da playlist. Útil para gerar playlists com caminhos absolutos.
Observe que o número de sequência da playlist deve ser único para cada segmento, e não deve ser confundido com o número de sequência do nome de arquivo do segmento, que pode ser cíclico, por exemplo se a opção wrap for especificada.
hls_segment_filename filename
Define o nome de arquivo do segmento. A menos que a opção hls_flags esteja definida com ‘single_file’, filename é usado como uma string de formato à qual o número do segmento é anexado.
Por exemplo:
ffmpeg -i in.nut -hls_segment_filename 'file%03d.ts' out.m3u8
produzirá a playlist out.m3u8 e os arquivos de segmento file000.ts, file001.ts, file002.ts, etc.
filename pode conter um caminho completo ou relativo, mas apenas a parte do nome do arquivo, sem qualquer caminho, será incluída na lista de segmentos m3u8. Caso seja especificado um caminho relativo, o caminho dos arquivos de segmento criados será relativo ao diretório de trabalho atual. Quando strftime_mkdir estiver definida, o valor expandido completo de filename será gravado na lista de segmentos m3u8.
Quando var_stream_map estiver definida com dois ou mais variant streams, o padrão de filename deve conter a string "%v", que será expandida para a posição do índice do variant stream nos nomes de arquivo de segmento gerados.
Por exemplo:
ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
-map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \
-hls_segment_filename 'file_%v_%03d.ts' out_%v.m3u8
produzirá os conjuntos de arquivos de segmento das playlists: file_0_000.ts, file_0_001.ts, file_0_002.ts, etc. e file_1_000.ts, file_1_001.ts, file_1_002.ts, etc.
A string "%v" pode estar presente no filename ou no nome do último diretório que contém o arquivo, mas apenas em um dos dois. (Além disso, %v pode aparecer várias vezes no último subdiretório ou filename.) Se a string %v estiver presente no nome do diretório, subdiretórios serão criados após a expansão do padrão do nome do diretório. Isso permite criar, em subdiretórios, segmentos correspondentes a diferentes variant streams.
Por exemplo:
ffmpeg -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
-map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \
-hls_segment_filename 'vs%v/file_%03d.ts' vs%v/out.m3u8
produzirá os conjuntos de arquivos de segmento das playlists: vs0/file_000.ts, vs0/file_001.ts, vs0/file_002.ts, etc. e vs1/file_000.ts, vs1/file_001.ts, vs1/file_002.ts, etc.
strftime bool
Usa strftime() em filename para expandir o nome de arquivo do segmento com localtime. O número do segmento também está disponível nesse modo, mas para usá-lo é necessário definir ‘second_level_segment_index’ em hls_flags, e %%d será o especificador.
Por exemplo:
ffmpeg -i in.nut -strftime 1 -hls_segment_filename 'file-%Y%m%d-%s.ts' out.m3u8
produzirá a playlist out.m3u8 e os arquivos de segmento file-20160215-1455569023.ts, file-20160215-1455569024.ts, etc. Nota: em alguns sistemas/ambientes o especificador %s não está disponível. Consulte a documentação de strftime().
Por exemplo:
ffmpeg -i in.nut -strftime 1 -hls_flags second_level_segment_index -hls_segment_filename 'file-%Y%m%d-%%04d.ts' out.m3u8
produzirá a playlist out.m3u8 e os arquivos de segmento file-20160215-0001.ts, file-20160215-0002.ts, etc.
strftime_mkdir bool
Usada em conjunto com strftime, cria todos os subdiretórios presentes nos valores expandidos da opção hls_segment_filename.
Por exemplo:
ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y%m%d/file-%Y%m%d-%s.ts' out.m3u8
criará um diretório 201560215 (se não existir) e, em seguida, produzirá a playlist out.m3u8 e os arquivos de segmento 20160215/file-20160215-1455569023.ts, 20160215/file-20160215-1455569024.ts, etc.
Por exemplo:
ffmpeg -i in.nut -strftime 1 -strftime_mkdir 1 -hls_segment_filename '%Y/%m/%d/file-%Y%m%d-%s.ts' out.m3u8
criará uma hierarquia de diretórios 2016/02/15 (se algum deles não existir) e, em seguida, produzirá a playlist out.m3u8 e os arquivos de segmento 2016/02/15/file-20160215-1455569023.ts, 2016/02/15/file-20160215-1455569024.ts, etc.
hls_segment_options options_list
Define opções de formato de saída usando uma lista de parâmetros key=value separados por :. Valores contendo o caractere especial : devem ser escapados.
hls_key_info_file key_info_file
Usa as informações em key_info_file para a criptografia do segmento. A primeira linha de key_info_file especifica o URI da chave gravado na playlist. A URL da chave é usada para acessar a chave de criptografia durante a reprodução. A segunda linha especifica o caminho para o arquivo de chave usado para obter a chave durante o processo de criptografia. O arquivo de chave é lido como um único array compactado de 16 octetos em formato binário. A terceira linha, opcional, especifica o vetor de inicialização (IV) como uma string hexadecimal a ser usada em vez do número de sequência do segmento (padrão) para a criptografia. Alterações em key_info_file resultarão na criptografia do segmento com a nova chave/IV e em uma entrada na playlist para o novo URI de chave/IV, se hls_flags periodic_rekey estiver ativada.
Formato do arquivo de informações de chave:
key URI
key file path
IV (optional)
Exemplos de URI de chave:
http://server/file.key
/path/to/file.key
file.key
Exemplos de caminhos de arquivo de chave:
file.key
/path/to/file.key
Exemplo de IV:
0123456789ABCDEF0123456789ABCDEF
Exemplo de arquivo de informações de chave:
http://server/file.key
/path/to/file.key
0123456789ABCDEF0123456789ABCDEF
Exemplo de script shell:
#!/bin/sh
BASE_URL=${1:-'.'}
openssl rand 16 > file.key
echo $BASE_URL/file.key > file.keyinfo
echo file.key >> file.keyinfo
echo $(openssl rand -hex 16) >> file.keyinfo
ffmpeg -f lavfi -re -i testsrc -c:v h264 -hls_flags delete_segments \
-hls_key_info_file file.keyinfo out.m3u8
hls_enc bool
Ativa (1) ou desativa (0) a criptografia AES128. Quando ativada, cada segmento gerado é criptografado, e a chave de criptografia é salva como playlist name.key.
hls_enc_key key
Especifica uma chave de 16 octetos para criptografar os segmentos; por padrão, ela é gerada aleatoriamente.
hls_enc_key_url keyurl
Se definida, keyurl é anteposta, em vez de baseurl, ao nome do arquivo de chave na playlist.
hls_enc_iv iv
Especifica o vetor de inicialização de 16 octetos para cada segmento, em vez dos gerados automaticamente.
hls_segment_type flags
Valores possíveis:
‘mpegts’
Gera os arquivos de segmento no formato MPEG-2 Transport Stream. É compatível com todas as versões do HLS.
‘fmp4’
Gera os arquivos de segmento no formato MP4 fragmentado, semelhante ao MPEG-DASH. Arquivos fmp4 podem ser usados no HLS versão 7 e superior.
hls_fmp4_init_filename filename
Define o filename do arquivo de cabeçalho dos arquivos de fragmento; o filename padrão é init.mp4.
Quando strftime estiver ativada, filename é expandido para o nome de arquivo do segmento com localtime.
Por exemplo:
ffmpeg -i in.nut -hls_segment_type fmp4 -strftime 1 -hls_fmp4_init_filename "%s_init.mp4" out.m3u8
produzirá um init como este: 1602678741_init.mp4.
hls_fmp4_init_resend bool
Reenvia o arquivo init a cada atualização do arquivo m3u8; o padrão é 0.
Quando var_stream_map estiver definida com dois ou mais variant streams, o padrão de filename deve conter a string "%v", que especifica a posição do índice do variant stream nos nomes de arquivo init gerados. A string "%v" pode estar presente no filename ou no nome do último diretório que contém o arquivo. Se a string estiver presente no nome do diretório, subdiretórios serão criados após a expansão do padrão do nome do diretório. Isso permite criar, em subdiretórios, arquivos init correspondentes a diferentes variant streams.
hls_flags flags
Valores possíveis:
‘single_file’
Se esta flag estiver definida, o muxer armazenará todos os segmentos em um único arquivo MPEG-TS e usará intervalos de bytes na playlist. As playlists HLS geradas dessa forma terão o número de versão 4.
Por exemplo:
ffmpeg -i in.nut -hls_flags single_file out.m3u8
produzirá a playlist out.m3u8 e um único arquivo de segmento, out.ts.
‘delete_segments’
Os arquivos de segmento removidos da playlist são excluídos após um período de tempo igual à duração do segmento mais a duração da playlist.
‘append_list’
Anexa novos segmentos ao final da lista de segmentos antiga e remove #EXT-X-ENDLIST da lista de segmentos antiga.
‘round_durations’
Arredonda as informações de duração nos dados de segmento do arquivo de playlist para valores inteiros, em vez de usar ponto flutuante. Se não houver outros recursos exigindo o uso de versões superiores do HLS, isso permitirá que o ffmpeg gere um m3u8 na versão 2 do HLS.
‘discont_start’
Adiciona a tag #EXT-X-DISCONTINUITY à playlist, antes das informações do primeiro segmento.
‘omit_endlist’
Não anexa a tag EXT-X-ENDLIST ao final da playlist.
‘periodic_rekey’
O arquivo especificado por hls_key_info_file será verificado periodicamente para detectar atualizações nas informações de criptografia. Certifique-se de substituir este arquivo de forma atômica, incluindo o arquivo que contém a chave de criptografia AES.
‘independent_segments’
Adiciona a tag #EXT-X-INDEPENDENT-SEGMENTS a playlists que possuem segmentos de vídeo, quando há garantia de que todos os segmentos dessa playlist começam com um keyframe.
‘iframes_only’
Adiciona a tag #EXT-X-I-FRAMES-ONLY a playlists que possuem segmentos de vídeo e que só conseguem reproduzir quadros I no modo #EXT-X-BYTERANGE.
‘split_by_time’
Permite que os segmentos comecem em quadros diferentes dos keyframes. Isso melhora o comportamento em alguns players quando o tempo entre keyframes é inconsistente, mas pode piorá-lo em outros, e pode causar algumas estranhezas durante a busca. Esta flag deve ser usada com a opção hls_time.
‘program_date_time’
Gera tags EXT-X-PROGRAM-DATE-TIME.
‘second_level_segment_index’
Permite usar índices de segmento como %%d na expressão da opção hls_segment_filename, além dos valores de data/hora, quando a opção strftime está ativada. Para obter números de largura fixa com zeros à direita, o formato %%0xd está disponível, em que x é a largura desejada.
‘second_level_segment_size’
Permite usar tamanhos de segmento (contados em bytes) como %%s na expressão da opção hls_segment_filename, além dos valores de data/hora, quando strftime está ativada. Para obter números de largura fixa com zeros à direita, o formato %%0xs está disponível, em que x é a largura desejada.
‘second_level_segment_duration’
Permite usar a duração do segmento (calculada em microssegundos) como %%t na expressão da opção hls_segment_filename, além dos valores de data/hora, quando strftime está ativada. Para obter números de largura fixa com zeros à direita, o formato %%0xt está disponível, em que x é a largura desejada.
Por exemplo:
ffmpeg -i sample.mpeg \
-f hls -hls_time 3 -hls_list_size 5 \
-hls_flags second_level_segment_index+second_level_segment_size+second_level_segment_duration \
-strftime 1 -strftime_mkdir 1 -hls_segment_filename "segment_%Y%m%d%H%M%S_%%04d_%%08s_%%013t.ts" stream.m3u8
produzirá segmentos como estes: segment_20170102194334_0003_00122200_0000003000000.ts, segment_20170102194334_0004_00120072_0000003000000.ts etc.
‘temp_file’
Grava os dados do segmento em filename.tmp e renomeia para filename somente quando o segmento estiver completo.
Um servidor web que disponibiliza os segmentos pode ser configurado para rejeitar solicitações a *.tmp, evitando o acesso a segmentos em andamento antes de serem adicionados à playlist m3u8.
Esta flag também afeta como os arquivos de playlist m3u8 são criados. Se estiver definida, todos os arquivos de playlist serão gravados em um arquivo temporário e renomeados quando estiverem completos, de forma semelhante ao tratamento dado aos segmentos. Mas playlists com protocolo file e com hls_playlist_type diferente de ‘vod’ são sempre gravadas em um arquivo temporário, independentemente desta flag.
Os arquivos de master playlist especificados com master_pl_name, se houver, com protocolo file, são sempre gravados em um arquivo temporário independentemente desta flag, caso o valor de master_pl_publish_rate seja diferente de zero.
hls_playlist_type type
Se type for ‘event’, emite #EXT-X-PLAYLIST-TYPE:EVENT no cabeçalho do m3u8. Isso força hls_list_size para 0; só é possível anexar itens à playlist.
Se type for ‘vod’, emite #EXT-X-PLAYLIST-TYPE:VOD no cabeçalho do m3u8. Isso força hls_list_size para 0; a playlist não deve mudar.
method method
Usa o método HTTP indicado para criar os arquivos hls.
Por exemplo:
ffmpeg -re -i in.ts -f hls -method PUT http://example.com/live/out.m3u8
enviará todos os arquivos de segmento mpegts para o servidor HTTP usando o método HTTP PUT, e atualizará os arquivos m3u8 a cada refresh vezes usando o mesmo método. Observe que o servidor HTTP deve ter suporte ao método indicado para o envio de arquivos.
http_user_agent agent
Sobrescreve o campo User-Agent no cabeçalho HTTP. Aplicável somente à saída HTTP.
var_stream_map stream_map
Especifica uma map string que define como agrupar os fluxos de áudio, vídeo e legenda em diferentes variant streams. Os grupos de variant stream são separados por espaço.
O formato de string esperado é assim: "a:0,v:0 a:1,v:1 ....". Aqui, a:, v:, s: são as chaves para especificar, respectivamente, os fluxos de áudio, vídeo e legenda. Os valores permitidos vão de 0 a 9 (limitação apenas por motivos práticos de uso).
Quando há dois ou mais variant streams, o padrão do filename de saída deve conter a string "%v": esta string especifica a posição do índice do variant stream nos nomes de arquivo da media playlist de saída. A string "%v" pode estar presente no filename ou no nome do último diretório que contém o arquivo. Se a string estiver presente no nome do diretório, subdiretórios serão criados após a expansão do padrão do nome do diretório. Isso permite criar variant streams em subdiretórios.
A seguir, alguns exemplos.
-
Cria dois variant streams hls. O primeiro variant stream conterá um fluxo de vídeo com taxa de bits de 1000k e um fluxo de áudio com taxa de bits de 64k, e o segundo variant stream conterá um fluxo de vídeo com taxa de bits de 256k e um fluxo de áudio com taxa de bits de 32k. Aqui, serão criadas duas media playlists com os nomes de arquivo out_0.m3u8 e out_1.m3u8.
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ http://example.com/live/out_%v.m3u8 -
Se preferir um texto significativo em vez de índices nos nomes resultantes, você pode especificar nomes para cada variant ou para alguns deles. O exemplo a seguir cria dois variant streams hls como no exemplo anterior, mas aqui serão criadas as duas media playlists com os nomes de arquivo out_my_hd.m3u8 e out_my_sd.m3u8.
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0,name:my_hd v:1,a:1,name:my_sd" \ http://example.com/live/out_%v.m3u8 -
Cria três variant streams hls. O primeiro variant stream será um fluxo somente de vídeo com taxa de bits de vídeo de 1000k, o segundo variant stream será um fluxo somente de áudio com taxa de bits de 64k, e o terceiro variant stream será um fluxo somente de vídeo com taxa de bits de 256k. Aqui, serão criadas três media playlists com os nomes de arquivo out_0.m3u8, out_1.m3u8 e out_2.m3u8.
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k \ -map 0:v -map 0:a -map 0:v -f hls -var_stream_map "v:0 a:0 v:1" \ http://example.com/live/out_%v.m3u8 -
Cria os variant streams em subdiretórios. Aqui, a primeira media playlist é criada em http://example.com/live/vs_0/out.m3u8, e a segunda em http://example.com/live/vs_1/out.m3u8.
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \ -map 0:v -map 0:a -map 0:v -map 0:a -f hls -var_stream_map "v:0,a:0 v:1,a:1" \ http://example.com/live/vs_%v/out.m3u8 -
Cria dois variant streams somente de áudio e dois somente de vídeo. Além da tag
#EXT-X-STREAM-INFpara cada variant stream na master playlist, a tag#EXT-X-MEDIAtambém é adicionada para os dois variant streams somente de áudio, que são mapeados para os dois variant streams somente de vídeo com os nomes de grupo de áudio ’aud_low’ e ’aud_high’. Por padrão, é criado um único hls variant contendo todos os fluxos codificados.ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k -b:v:1 3000k \ -map 0:a -map 0:a -map 0:v -map 0:v -f hls \ -var_stream_map "a:0,agroup:aud_low a:1,agroup:aud_high v:0,agroup:aud_low v:1,agroup:aud_high" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8 -
Cria dois variant streams somente de áudio e um somente de vídeo. Além da tag
#EXT-X-STREAM-INFpara cada variant stream na master playlist, a tag#EXT-X-MEDIAtambém é adicionada para os dois variant streams somente de áudio, que são mapeados para o variant stream somente de vídeo com o nome de grupo de áudio ’aud_low’, cujo estado default é NO ou YES. Por padrão, é criado um único hls variant contendo todos os fluxos codificados.ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \ -map 0:a -map 0:a -map 0:v -f hls \ -var_stream_map "a:0,agroup:aud_low,default:yes a:1,agroup:aud_low v:0,agroup:aud_low" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8 -
Cria dois variant streams somente de áudio e um somente de vídeo. Além da tag
#EXT-X-STREAM-INFpara cada variant stream na master playlist, a tag#EXT-X-MEDIAtambém é adicionada para os dois variant streams somente de áudio, que são mapeados para o variant stream somente de vídeo com o nome de grupo de áudio ’aud_low’, cujo estado default é NO ou YES; além disso, um dos áudios tem o idioma nomeado como ENG, e o outro como CHN. Por padrão, é criado um único hls variant contendo todos os fluxos codificados.ffmpeg -re -i in.ts -b:a:0 32k -b:a:1 64k -b:v:0 1000k \ -map 0:a -map 0:a -map 0:v -f hls \ -var_stream_map "a:0,agroup:aud_low,default:yes,language:ENG a:1,agroup:aud_low,language:CHN v:0,agroup:aud_low" \ -master_pl_name master.m3u8 \ http://example.com/live/out_%v.m3u8 -
Cria um único variant stream. Adiciona a tag
#EXT-X-MEDIAcomTYPE=SUBTITLESna master playlist, com o nome de grupo de legenda webvtt ’subtitle’ e um nome de legenda opcional, por exemplo ’English’. Certifique-se de que o arquivo de entrada tenha ao menos um fluxo de legenda de texto.ffmpeg -y -i input_with_subtitle.mkv \ -b:v:0 5250k -c:v h264 -pix_fmt yuv420p -profile:v main -level 4.1 \ -b:a:0 256k \ -c:s webvtt -c:a mp2 -ar 48000 -ac 2 -map 0:v -map 0:a:0 -map 0:s:0 \ -f hls -var_stream_map "v:0,a:0,s:0,sgroup:subtitle,sname:English" \ -master_pl_name master.m3u8 -t 300 -hls_time 10 -hls_init_time 4 -hls_list_size \ 10 -master_pl_publish_rate 10 -hls_flags \ delete_segments+discont_start+split_by_time ./tmp/video.m3u8
cc_stream_map cc_stream_map
Map string que especifica diferentes grupos de closed captions e seus atributos. Os grupos de fluxo de closed captions são separados por espaço.
O formato de string esperado é assim: "ccgroup:
Os grupos de closed captions configurados por essa opção são mapeados para diferentes variant streams informando o mesmo nome ’ccgroup’ na string var_stream_map.
Por exemplo:
ffmpeg -re -i in.ts -b:v:0 1000k -b:v:1 256k -b:a:0 64k -b:a:1 32k \
-a53cc:0 1 -a53cc:1 1 \
-map 0:v -map 0:a -map 0:v -map 0:a -f hls \
-cc_stream_map "ccgroup:cc,instreamid:CC1,language:en ccgroup:cc,instreamid:CC2,language:sp" \
-var_stream_map "v:0,a:0,ccgroup:cc v:1,a:1,ccgroup:cc" \
-master_pl_name master.m3u8 \
http://example.com/live/out_%v.m3u8
adicionará duas tags #EXT-X-MEDIA com TYPE=CLOSED-CAPTIONS na master playlist para os INSTREAM-ID ’CC1’ e ’CC2’. Além disso, adicionará o atributo CLOSED-CAPTIONS com o nome de grupo ’cc’ para os dois variant streams de saída.
Se var_stream_map não estiver definida, o primeiro ccgroup disponível em cc_stream_map é mapeado para o variant stream de saída.
Por exemplo:
ffmpeg -re -i in.ts -b:v 1000k -b:a 64k -a53cc 1 -f hls \
-cc_stream_map "ccgroup:cc,instreamid:CC1,language:en" \
-master_pl_name master.m3u8 \
http://example.com/live/out.m3u8
isso adicionará a tag #EXT-X-MEDIA com TYPE=CLOSED-CAPTIONS na master playlist com o nome de grupo ’cc’, idioma ’en’ (inglês) e INSTREAM-ID ’CC1’. Além disso, adicionará o atributo CLOSED-CAPTIONS com o nome de grupo ’cc’ para o variant stream de saída.
master_pl_name name
Cria uma master playlist HLS com o nome indicado.
Por exemplo:
ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 http://example.com/live/out.m3u8
cria uma master playlist HLS com o nome master.m3u8, publicada em http://example.com/live/.
master_pl_publish_rate count
Publica a master playlist repetidamente a cada número especificado de intervalos de segmento.
Por exemplo:
ffmpeg -re -i in.ts -f hls -master_pl_name master.m3u8 \
-hls_time 2 -master_pl_publish_rate 30 http://example.com/live/out.m3u8
cria uma master playlist HLS com o nome master.m3u8 e continua publicando-a repetidamente a cada 30 segmentos, ou seja, a cada 60s.
http_persistent bool
Usa conexões HTTP persistentes. Aplicável somente à saída HTTP.
timeout timeout
Define o tempo limite para as operações de E/S de socket. Aplicável somente à saída HTTP.
ignore_io_errors bool
Ignora erros de E/S durante a abertura, gravação e exclusão. Útil para execuções de longa duração com saída de rede.
headers headers
Define cabeçalhos HTTP personalizados; pode sobrescrever os cabeçalhos padrão integrados. Aplicável somente à saída HTTP.
4.47 iamf
Muxer de Immersive Audio Model and Formats (IAMF).
O IAMF é usado para fornecer conteúdo de áudio imersivo destinado à apresentação em uma ampla variedade de dispositivos, tanto em aplicativos de streaming quanto offline. Esses aplicativos incluem streaming de áudio pela internet, serviços de multicast/broadcast, download de arquivos, jogos, comunicação, realidade virtual e aumentada, entre outros. Nesses aplicativos, o áudio pode ser reproduzido em uma ampla variedade de dispositivos, por exemplo, fones de ouvido, celulares, tablets, TVs, soundbars, sistemas de home theater e telas grandes.
Este formato foi promovido e projetado pela Alliance for Open Media.
Para mais informações sobre este formato, consulte https://aomedia.org/iamf/.
4.48 ico
Muxer de arquivos ICO.
O formato de arquivo de ícones da Microsoft (ICO) tem algumas limitações rígidas que devem ser observadas:
- O tamanho não pode exceder 256 pixels em nenhuma dimensão
- Somente imagens BMP e PNG podem ser armazenadas
-
Se uma imagem BMP for usada, ela deve estar em um dos seguintes pixel formats:
BMP Bit Depth FFmpeg Pixel Format 1bit pal8 4bit pal8 8bit pal8 16bit rgb555le 24bit bgr24 32bit bgra -
Se uma imagem BMP for usada, ela deve utilizar o cabeçalho DIB BITMAPINFOHEADER
- Se uma imagem PNG for usada, ela deve utilizar o pixel format rgba
4.49 ilbc
Muxer raw de Internet Low Bitrate Codec (iLBC).
Aceita um único fluxo de áudio ‘ilbc’.
4.50 image2, image2pipe
Muxer de arquivos de imagem.
O muxer ‘image2’ grava quadros de vídeo em arquivos de imagem.
Os nomes dos arquivos de saída são especificados por um padrão, que pode ser usado para gerar uma série de arquivos numerados sequencialmente. O padrão pode conter a string "%d" ou "%0Nd"; essa string especifica a posição dos caracteres que representam a numeração nos nomes dos arquivos. Se a forma "%0Nd" for usada, a string que representa o número em cada nome de arquivo é preenchida com zeros à esquerda até N dígitos. O caractere literal ’%’ pode ser especificado no padrão com a string "%%".
Se o padrão contiver "%d" ou "%0Nd", o primeiro nome de arquivo da lista de arquivos especificada conterá o número 1, e todos os números seguintes serão sequenciais.
O padrão pode conter um sufixo usado para determinar automaticamente o formato dos arquivos de imagem a serem gravados.
Por exemplo, o padrão "img-%03d.bmp" especificará uma sequência de nomes de arquivo da forma img-001.bmp, img-002.bmp, ..., img-010.bmp etc. O padrão "img%%-%d.jpg" especificará uma sequência de nomes de arquivo da forma img%-1.jpg, img%-2.jpg, ..., img%-10.jpg etc.
O muxer de imagem admite o formato de arquivo de imagem .Y.U.V. Esse formato é especial porque cada quadro de imagem consiste em três arquivos, um para cada componente YUV420P. Para ler ou gravar esse formato de arquivo de imagem, especifique o nome do arquivo ’.Y’. O muxer abrirá automaticamente os arquivos ’.U’ e ’.V’ conforme necessário.
O muxer ‘image2pipe’ aceita as mesmas opções que o muxer ‘image2’, mas ignora a verificação e a expansão do padrão, pois deve gravar na saída do comando, e não em um arquivo armazenado real.
4.50.1 Opções
frame_pts bool
Se definido como 1, expande o nome do arquivo com o PTS (presentation time stamp) do pacote. O valor padrão é 0.
start_number count
Inicia a sequência a partir do número especificado. O valor padrão é 1.
update bool
Se definido como 1, o nome do arquivo sempre será interpretado apenas como um nome de arquivo, não como um padrão, e o arquivo correspondente será continuamente sobrescrito com novas imagens. O valor padrão é 0.
strftime bool
Se definido como 1, expande o nome do arquivo com informações de data e hora obtidas de strftime(). O valor padrão é 0.
atomic_writing bool
Grava a saída em um arquivo temporário, que é renomeado para o nome de arquivo de destino assim que a gravação é concluída. Desativado por padrão.
protocol_opts options_list
Define opções de protocolo como uma lista de parâmetros key=value separados por :. Valores que contenham o caractere especial : devem ser escapados.
4.50.2 Exemplos
- Use o
ffmpegpara criar uma sequência de arquivos img-001.jpeg, img-002.jpeg, ..., capturando uma imagem por segundo do vídeo de entrada:ffmpeg -i in.avi -fps_mode cfr -r 1 -f image2 'img-%03d.jpeg'
Observe que, com o ffmpeg, se o formato não for especificado com a opção -f e o nome do arquivo de saída indicar um formato de arquivo de imagem, o muxer image2 é selecionado automaticamente; assim, o comando anterior pode ser escrito como:
ffmpeg -i in.avi -fps_mode cfr -r 1 'img-%03d.jpeg'
Observe também que o padrão não precisa necessariamente conter "%d" ou "%0Nd"; por exemplo, para criar um único arquivo de imagem img.jpeg a partir do início do vídeo de entrada, você pode usar o comando:
ffmpeg -i in.avi -f image2 -frames:v 1 img.jpeg
- A opção strftime permite expandir o nome do arquivo com informações de data e hora. Consulte a documentação da função
strftime()para conhecer a sintaxe.
Para gerar arquivos de imagem a partir do padrão strftime() "%Y-%m-%d_%H-%M-%S", pode-se usar o seguinte comando ffmpeg:
ffmpeg -f v4l2 -r 1 -i /dev/video0 -f image2 -strftime 1 "%Y-%m-%d_%H-%M-%S.jpg"
-
Defina o nome do arquivo com o PTS do quadro atual:
ffmpeg -f v4l2 -r 1 -i /dev/video0 -copyts -f image2 -frame_pts true %d.jpg -
Publique o conteúdo da sua área de trabalho diretamente em um servidor WebDAV a cada segundo:
ffmpeg -f x11grab -framerate 1 -i :0.0 -q:v 6 -update 1 -protocol_opts method=PUT http://example.com/desktop.jpg
4.51 ircam
Muxer do formato Berkeley / IRCAM / CARL Sound Filesystem (BICSF).
O Berkeley/IRCAM/CARL Sound Format, desenvolvido na década de 1980, resulta da fusão de vários formatos e sistemas de arquivo de som anteriores, incluindo o sistema csound desenvolvido pelo Dr. Gareth Loy no Computer Audio Research Lab (CARL) da UC San Diego, o sistema de arquivos de som IRCAM desenvolvido por Rob Gross e Dan Timis no Institut de Recherche et Coordination Acoustique / Musique em Paris, e o Berkeley Fast Filesystem.
Foi desenvolvido inicialmente como parte do Berkeley/IRCAM/CARL Sound Filesystem, um conjunto de programas projetado para implementar um sistema de arquivos para aplicativos de áudio executados sob o Berkeley UNIX. Foi especialmente popular em centros acadêmicos de pesquisa musical e foi usado diversas vezes na criação das primeiras composições geradas por computador.
Este muxer aceita um único fluxo de áudio contendo dados PCM.
4.52 ivf
Muxer On2 IVF.
O IVF foi desenvolvido pela On2 Technologies (anteriormente conhecida como Duck Corporation) para armazenar codecs desenvolvidos internamente.
Este muxer aceita um único fluxo de vídeo ‘vp8’, ‘vp9’ ou ‘av1’.
4.53 jacosub
Muxer do formato de legendas JACOsub.
Este muxer aceita um único fluxo de legendas ‘jacosub’.
Para mais informações sobre o formato, consulte http://unicorn.us.com/jacosub/jscripts.html.
4.54 kvag
Muxer VAG da Simon & Schuster Interactive.
Este container VAG personalizado é usado por alguns jogos da Simon & Schuster Interactive, como "Real War" e "Real War: Rogue States".
Este muxer aceita um único fluxo de áudio ‘adpcm_ima_ssi’.
4.55 lc3
Bluetooth SIG Low Complexity Communication Codec audio (LC3), ou ETSI TS 103 634 Low Complexity Communication Codec plus (LC3plus).
Este muxer aceita um único fluxo de áudio ‘lc3’.
4.56 lrc
Muxer do formato de arquivo de letras LRC.
LRC (abreviação de LyRiCs) é um formato de arquivo de computador que sincroniza a letra de uma música com um arquivo de áudio, como MP3, Vorbis ou MIDI.
Este muxer aceita um único fluxo de legendas ‘subrip’ ou ‘text’.
4.56.1 Opções
precision number
Define o número de dígitos decimais usados para a parte fracionária (subsegundo) das marcas de tempo. O intervalo vai de 1 a 6. O padrão é 2, ou seja, centissegundos.
4.56.2 Metadados
As seguintes tags de metadados são convertidas para os metadados correspondentes do formato:
title album artist author creator encoder encoder_version
Se ‘encoder_version’ não for definido explicitamente, ele é definido automaticamente para a versão do libavformat.
4.57 matroska
Muxer de container Matroska.
Este muxer implementa as especificações dos containers matroska e webm.
4.57.1 Metadados
As configurações de metadados reconhecidas por este muxer são:
title
Define o nome do título atribuído a uma única faixa. Isso é mapeado para o elemento FileDescription de um fluxo gravado como anexo.
language
Especifica o idioma da faixa no formato de idiomas do Matroska.
O idioma pode ser especificado no formato bibliográfico de 3 letras ISO-639-2 (ISO 639-2/B) (como "fre" para o francês) ou por um código de idioma combinado com um código de país para variantes regionais de idiomas (como "fre-ca" para o francês canadense).
stereo_mode
Define o layout de vídeo estéreo 3D de duas visões em uma única faixa de vídeo.
Os seguintes valores são reconhecidos:
‘mono’
o vídeo não é estéreo
‘left_right’
Ambas as visões são dispostas lado a lado; a visão do olho esquerdo fica à esquerda
‘bottom_top’
Ambas as visões são dispostas na orientação de cima para baixo; a visão do olho esquerdo fica embaixo
‘top_bottom’
Ambas as visões são dispostas na orientação de cima para baixo; a visão do olho esquerdo fica em cima
‘checkerboard_rl’
Cada visão é disposta em um padrão intercalado tipo tabuleiro de xadrez; a visão do olho esquerdo vem primeiro
‘checkerboard_lr’
Cada visão é disposta em um padrão intercalado tipo tabuleiro de xadrez; a visão do olho direito vem primeiro
‘row_interleaved_rl’
Cada visão é constituída por um intercalamento baseado em linhas; a visão do olho direito é a primeira linha
‘row_interleaved_lr’
Cada visão é constituída por um intercalamento baseado em linhas; a visão do olho esquerdo é a primeira linha
‘col_interleaved_rl’
Ambas as visões são dispostas por meio de um intercalamento baseado em colunas; a visão do olho direito é a primeira coluna
‘col_interleaved_lr’
Ambas as visões são dispostas por meio de um intercalamento baseado em colunas; a visão do olho esquerdo é a primeira coluna
‘anaglyph_cyan_red’
Todos os quadros estão no formato anaglifo, visíveis por meio de filtros vermelho-ciano
‘right_left’
Ambas as visões são dispostas lado a lado; a visão do olho direito fica à esquerda
‘anaglyph_green_magenta’
Todos os quadros estão no formato anaglifo, visíveis por meio de filtros verde-magenta
‘block_lr’
Os dois olhos entrelaçados em um único Block; a visão do olho esquerdo vem primeiro
‘block_rl’
Os dois olhos entrelaçados em um único Block; a visão do olho direito vem primeiro
Por exemplo, um clipe WebM 3D pode ser criado usando a seguinte linha de comando:
ffmpeg -i sample_left_right_clip.mpg -an -c:v libvpx -metadata stereo_mode=left_right -y stereo_clip.webm
4.57.2 Opções
reserve_index_space size
Por padrão, este muxer grava o índice de busca (chamado de cues na terminologia do Matroska) no final do arquivo, pois não é possível saber de antemão quanto espaço reservar para o índice no início do arquivo. No entanto, em alguns casos de uso — por exemplo, streaming em que a busca é possível, mas lenta — é útil colocar o índice no início do arquivo.
Se esta opção for definida com um valor diferente de zero, o muxer reservará size bytes de espaço no cabeçalho do arquivo e tentará gravar os cues ali quando a multiplexação terminar. Se o espaço reservado não for suficiente, nenhum Cues será gravado, o arquivo será finalizado e a gravação do trailer retornará um erro. Um tamanho seguro para a maioria dos casos de uso deve ser de cerca de 50kB por hora de vídeo.
Observe que os cues só são gravados se a saída permitir busca, e esta opção não terá efeito caso contrário.
cues_to_front bool
Se definida, o muxer gravará o índice no início do arquivo deslocando os dados principais, se necessário. Isso pode ser combinado com reserve_index_space, caso em que os dados só são deslocados se o espaço inicialmente reservado se mostrar insuficiente.
Esta opção é ignorada se a saída não permitir busca.
cluster_size_limit size
Armazena no máximo a quantidade de bytes fornecida em um cluster.
Se não for especificado, o limite é definido automaticamente para um valor fixo codificado razoável.
cluster_time_limit duration
Armazena no máximo o número de milissegundos fornecido em um cluster.
Se não for especificado, o limite é definido automaticamente para um valor fixo codificado razoável.
dash bool
Cria um arquivo WebM em conformidade com a especificação WebM DASH. Por padrão, é definido como false.
dash_track_number index
Número da faixa para o fluxo DASH. Por padrão, é definido como 1.
live bool
Grava arquivos presumindo que se trata de um fluxo ao vivo. Por padrão, é definido como false.
allow_raw_vfw bool
Permite o modo raw VFW. Por padrão, é definido como false.
flipped_raw_rgb bool
Se definido como true, armazena altura positiva para bitmaps RGB raw, o que indica que o bitmap é armazenado de baixo para cima. Observe que esta opção não inverte o bitmap, o que deve ser feito manualmente com antecedência, por exemplo usando o filtro ‘vflip’. O padrão é false e indica que o bitmap é armazenado de cima para baixo.
write_crc32 bool
Grava um elemento CRC32 dentro de cada elemento de Nível 1. Por padrão, é definido como true. Esta opção é ignorada para o WebM.
default_mode mode
Controla como o FlagDefault das faixas de saída será definido. Isso influencia quais faixas os players devem reproduzir por padrão. O modo padrão é ‘passthrough’.
‘infer’
Toda faixa com disposition default terá o FlagDefault definido. Além disso, para cada tipo de faixa (áudio, vídeo ou legenda), se não existir nenhuma faixa com disposition default desse tipo, a primeira faixa desse tipo será marcada como default (se existir). Isso garante que a flag default seja definida de forma sensata mesmo que a entrada tenha origem em containers que não têm o conceito de faixas padrão.
‘infer_no_subs’
Este modo é igual ao infer, exceto que, se não existir nenhuma faixa de legenda com disposition default, nenhuma faixa de legenda será marcada como default.
‘passthrough’
Neste modo, o FlagDefault é definido se e somente se a flag AV_DISPOSITION_DEFAULT estiver definida na disposition do fluxo correspondente.
4.58 md5
Formato de teste MD5.
Esta é uma variante do muxer hash. Diferentemente dele, usa por padrão a função hash MD5.
Veja também os muxers hash e framemd5.
4.58.1 Exemplos
-
Para calcular o hash MD5 da entrada convertida em áudio e vídeo raw e armazená-lo no arquivo out.md5:
ffmpeg -i INPUT -f md5 out.md5 -
Para exibir o hash MD5 na stdout:
ffmpeg -i INPUT -f md5 -
4.59 mcc
Muxer para arquivos MacCaption MCC; aceita as versões 1.0 e 2.0 do MCC. Os arquivos MCC armazenam dados VANC, que podem incluir closed captions (EIA-608 e CEA-708), código de tempo auxiliar, dados de pan-scan etc.
4.59.1 Opções
As opções do muxer são:
override_time_code_rate
Sobrescreve o valor Time Code Rate na saída. Por padrão, tenta deduzi-lo a partir do time_base do fluxo, o que muitas vezes não funciona.
use_u_alias
Usa o alias U para a sequência de bytes E1h 00h 00h 00h. Desativado por padrão porque alguns arquivos .mcc divergem sobre se há 2 ou 3 bytes zero.
mcc_version
A versão do formato de arquivo MCC. Deve ser 1 ou 2; o padrão é 2.
creation_program
O programa de criação. O padrão é esta versão do FFmpeg.
creation_time
A data/hora de criação. O padrão é a hora atual.
4.59.2 Exemplos
-
Extrai um fluxo
SMPTE_436M_ANCde MXF a partir de um arquivo MXF e grava em um arquivo MCC a 30 fps.ffmpeg -i input.mxf -c copy -map 0:d -override_time_code_rate 30 out.mcc -
Extrai closed captions EIA-608/CTA-708 de um arquivo .mp4 e grava em um arquivo MCC a 29.97 fps.
ffmpeg -f lavfi -i "movie=input.mp4[out+subcc]" -c:s copy -map 0:s -override_time_code_rate 30000/1001 out.mcc
4.60 microdvd
Muxer do formato de legendas MicroDVD.
Este muxer aceita um único fluxo de legendas ‘microdvd’.
4.61 mmf
Muxer do formato Synthetic music Mobile Application Format (SMAF).
SMAF é um formato de dados musicais especificado pela Yamaha para dispositivos eletrônicos portáteis, como celulares e assistentes digitais pessoais.
Este muxer aceita um único fluxo de áudio ‘adpcm_yamaha’.
4.62 mp3
O muxer MP3 grava um fluxo MP3 bruto com os seguintes recursos opcionais:
- Um cabeçalho de metadados ID3v2 no início (habilitado por padrão). As versões 2.3 e 2.4 são compatíveis; a opção privada
id3v2_versioncontrola qual delas é usada (3 ou 4). Definirid3v2_versioncomo 0 desativa completamente o cabeçalho ID3v2.
O muxer é compatível com a gravação de imagens anexadas (frames APIC) no cabeçalho ID3v2. As imagens são fornecidas ao muxer na forma de um fluxo de vídeo com um único pacote. Pode haver qualquer número desses fluxos; cada um corresponderá a um único frame APIC. As tags de metadados de fluxo title e comment são mapeadas, respectivamente, para a descrição e o tipo de imagem do APIC. Veja http://id3.org/id3v2.4.0-frames para os tipos de imagem permitidos.
Observe que os frames APIC devem ser gravados no início; por isso, o muxer armazena os quadros de áudio em buffer até obter todas as imagens. Por isso, recomenda-se fornecer as imagens o quanto antes para evitar um buffer excessivo.
- Um frame Xing/LAME logo após o cabeçalho ID3v2 (se presente). Habilitado por padrão, mas só é gravado se a saída permitir busca. A opção privada
write_xingpode ser usada para desativá-lo. O frame contém diversas informações que podem ser úteis para o decoder, como a duração do áudio ou o atraso do encoder. - Uma tag ID3v1 legada no final do arquivo (desativada por padrão). Pode ser habilitada com a opção privada
write_id3v1, mas, como suas capacidades são muito limitadas, seu uso não é recomendado.
Exemplos:
Grava um mp3 com cabeçalho ID3v2.3 e rodapé ID3v1:
ffmpeg -i INPUT -id3v2_version 3 -write_id3v1 1 out.mp3
Para anexar uma imagem a um arquivo mp3, selecione tanto o fluxo de áudio quanto o de imagem com map:
ffmpeg -i input.mp3 -i cover.png -c copy -map 0 -map 1
-metadata:s:v title="Album cover" -metadata:s:v comment="Cover (Front)" out.mp3
Grava um MP3 "limpo", sem nenhum recurso extra:
ffmpeg -i input.wav -write_xing 0 -id3v2_version 0 out.mp3
4.63 mpegts
Muxer de fluxo de transporte MPEG.
Este muxer implementa a ISO 13818-1 e parte da ETSI EN 300 468.
As configurações de metadados reconhecidas no muxer mpegts são service_provider e service_name. Se não forem definidas, o padrão de service_provider é ‘FFmpeg’ e o de service_name é ‘Service01’.
4.63.1 Opções
As opções do muxer são:
mpegts_transport_stream_id integer
Define o ‘transport_stream_id’. Isso identifica um transponder no DVB. O padrão é 0x0001.
mpegts_original_network_id integer
Define o ‘original_network_id’. Este é o identificador único de uma rede no DVB. Seu principal uso é a identificação exclusiva de um serviço por meio do caminho ‘Original_Network_ID, Transport_Stream_ID’. O padrão é 0xff01.
mpegts_service_id integer
Define o ‘service_id’, também conhecido como programa no DVB. O padrão é 0x0001.
mpegts_service_type integer
Define o ‘service_type’ do programa. O padrão é digital_tv. Aceita as seguintes opções:
‘hex_value’
Qualquer valor hexadecimal entre 0x01 e 0xff, conforme definido na ETSI 300 468.
‘digital_tv’
Serviço de TV digital.
‘digital_radio’
Serviço de rádio digital.
‘teletext’
Serviço de teletexto.
‘advanced_codec_digital_radio’
Serviço de rádio digital Advanced Codec.
‘mpeg2_digital_hdtv’
Serviço de HDTV digital MPEG2.
‘advanced_codec_digital_sdtv’
Serviço de SDTV digital Advanced Codec.
‘advanced_codec_digital_hdtv’
Serviço de HDTV digital Advanced Codec.
‘hevc_digital_hdtv’
Serviço de televisão digital HEVC.
mpegts_pmt_start_pid integer
Define o primeiro PID para as PMTs. O padrão é 0x1000, o mínimo é 0x0020 e o máximo é 0x1ffa. Esta opção não tem efeito no modo m2ts, em que o PID da PMT é fixo em 0x0100.
mpegts_start_pid integer
Define o primeiro PID para os fluxos elementares. O padrão é 0x0100, o mínimo é 0x0020 e o máximo é 0x1ffa. Esta opção não tem efeito no modo m2ts, em que os PIDs dos fluxos elementares são fixos.
mpegts_m2ts_mode boolean
Habilita o modo m2ts se definido como 1. O valor padrão é -1, que desativa o modo m2ts.
muxrate integer
Define uma muxrate constante. O padrão é VBR.
pes_payload_size integer
Define o payload mínimo do pacote PES em bytes. O padrão é 2930.
mpegts_flags flags
Define as flags do mpegts. Aceita as seguintes opções:
‘resend_headers’
Reemite PAT/PMT antes de gravar o próximo pacote.
‘latm’
Usa empacotamento LATM para AAC.
‘pat_pmt_at_frames’
Reemite PAT e PMT a cada quadro de vídeo.
‘system_b’
Está em conformidade com o Sistema B (DVB) em vez do Sistema A (ATSC).
‘initial_discontinuity’
Marca o pacote inicial de cada fluxo como descontinuidade.
‘nit’
Emite a tabela NIT.
‘omit_rai’
Desativa a gravação do indicador de acesso aleatório.
mpegts_copyts boolean
Preserva as marcas de tempo originais se o valor for definido como 1. O valor padrão é -1, o que faz com que as marcas de tempo sejam deslocadas para começar em 0.
omit_video_pes_length boolean
Omite o comprimento do pacote PES para pacotes de vídeo. O padrão é 1 (verdadeiro).
pcr_period integer
Sobrescreve o tempo padrão de retransmissão do PCR em milissegundos. O padrão é -1, o que significa que o intervalo do PCR será determinado automaticamente: usam-se 20 ms para fluxos CBR, e o maior múltiplo da duração do quadro que seja inferior a 100 ms para fluxos VBR.
pat_period duration
Tempo máximo em segundos entre tabelas PAT/PMT. O padrão é 0.1.
sdt_period duration
Tempo máximo em segundos entre tabelas SDT. O padrão é 0.5.
nit_period duration
Tempo máximo em segundos entre tabelas NIT. O padrão é 0.5.
tables_version integer
Define a versão de PAT, PMT, SDT e NIT (padrão 0; valores válidos vão de 0 a 31, inclusive). Esta opção permite atualizar a estrutura do fluxo para que um consumidor padrão possa detectar a mudança. Para isso, reabra o AVFormatContext de saída (em caso de uso da API) ou reinicie a instância do ffmpeg, alterando ciclicamente o valor de tables_version:
ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
...
ffmpeg -i source3.ts -codec copy -f mpegts -tables_version 31 udp://1.1.1.1:1111
ffmpeg -i source1.ts -codec copy -f mpegts -tables_version 0 udp://1.1.1.1:1111
ffmpeg -i source2.ts -codec copy -f mpegts -tables_version 1 udp://1.1.1.1:1111
...
4.63.2 Exemplo
ffmpeg -i file.mpg -c copy \
-mpegts_original_network_id 0x1122 \
-mpegts_transport_stream_id 0x3344 \
-mpegts_service_id 0x5566 \
-mpegts_pmt_start_pid 0x1500 \
-mpegts_start_pid 0x150 \
-metadata service_provider="Some provider" \
-metadata service_name="Some Channel" \
out.ts
4.64 mxf, mxf_d10, mxf_opatom
Muxer MXF.
4.64.1 Opções
As opções do muxer são:
store_user_comments bool
Define se os comentários do usuário devem ser armazenados quando disponíveis, ou nunca. O IRT D-10 não permite comentários do usuário. Assim, o padrão é gravá-los para mxf e mxf_opatom, mas não para mxf_d10
4.65 null
Muxer null.
Este muxer não gera nenhum arquivo de saída; é útil principalmente para fins de teste ou benchmarking.
Por exemplo, para avaliar o desempenho da decodificação com o ffmpeg, você pode usar o comando:
ffmpeg -benchmark -i INPUT -f null out.null
Observe que o comando acima não lê nem grava o arquivo out.null, mas especificar o arquivo de saída é exigido pela sintaxe do ffmpeg.
Como alternativa, você pode escrever o comando assim:
ffmpeg -benchmark -i INPUT -f null -
4.66 nut
-syncpoints flags
Altera o uso de syncpoints no nut:
default usa os auxiliares de busca normais, de baixa sobrecarga. none não usa os syncpoints, o que reduz a sobrecarga, mas torna o fluxo incapaz de busca;
O uso desta opção não é recomendado, pois os arquivos resultantes ficam muito sensíveis a danos e a busca não é possível. Além disso, em geral, a sobrecarga dos syncpoints é insignificante. Observe que -write_index 0 pode ser usado para desativar todas as tabelas de dados crescentes, permitindo multiplexar fluxos infinitos com memória limitada e sem essas desvantagens.
timestamped estende o syncpoint com um campo de relógio de parede.
As flags none e timestamped são experimentais.
-write_index bool
Grava o índice no final; o padrão é gravar um índice.
ffmpeg -i INPUT -f_strict experimental -syncpoints none - | processor
4.67 ogg
Muxer de container Ogg.
-page_duration duration
Duração de página preferida, em microssegundos. O muxer tentará criar páginas com aproximadamente duration microssegundos de duração. Isso permite ao usuário equilibrar a granularidade de busca e a sobrecarga do container. O padrão é 1 segundo. Um valor de 0 preencherá todos os segmentos, tornando as páginas o maior possível. Um valor de 1 fará com que, na maioria das situações, seja usado efetivamente 1 pacote por página, o que oferece uma granularidade de busca pequena ao custo de sobrecarga adicional do container.
-serial_offset value
Valor serial a partir do qual se define o número de série dos fluxos. Defini-lo com valores diferentes e suficientemente grandes garante que os arquivos ogg produzidos possam ser encadeados com segurança.
4.68 pdv
Muxer Playdate Video.
Este muxer grava o container de vídeo Playdate usado pelo SDK Playdate da Panic. Requer uma saída que permita busca e um único fluxo de vídeo PDV.
max_frames frames
Reserva espaço para, no máximo, frames quadros de vídeo no cabeçalho do arquivo. Esta opção é obrigatória.
4.69 rcwt
RCWT (Raw Captions With Time) é um formato nativo do ccextractor, uma ferramenta de código aberto amplamente usada para processar fontes de closed captions 608/708 (CC). Pode ser usado para arquivar o bitstream de CC originalmente extraído e para produzir um arquivo de origem destinado a processamento ou conversão posteriores. O formato permite a interoperabilidade entre o ccextractor e o FFmpeg, é simples de analisar e pode ser usado para criar um backup da apresentação de CC.
Este muxer implementa a especificação vigente em março de 2024, que se manteve estável e inalterada desde abril de 2014.
Este muxer apresenta algumas diferenças sutis em relação à forma como o ccextractor multiplexa o RCWT. Até agora, não foram observados problemas de compatibilidade ao processar a saída com o ccextractor por esse motivo, mas os resultados podem variar, e as saídas não serão idênticas bit a bit.
Uma especificação livre do RCWT pode ser encontrada aqui: https://github.com/CCExtractor/ccextractor/blob/master/docs/BINARY_FILE_FORMAT.TXT
4.69.1 Exemplos
- Extrai closed captions para RCWT usando lavfi:
ffmpeg -f lavfi -i "movie=INPUT.mkv[out+subcc]" -map 0:s:0 -c:s copy -f rcwt CC.rcwt.bin
4.70 segment, stream_segment, ssegment
Segmentador de fluxo básico.
Este muxer grava os fluxos em vários arquivos separados de duração quase fixa. O padrão do nome do arquivo de saída pode ser definido de forma semelhante ao image2, ou usando um modelo strftime se a opção strftime estiver habilitada.
stream_segment é uma variante do muxer usada para gravar em formatos de saída de streaming, ou seja, que não exigem cabeçalhos globais, e é recomendada para gerar, por exemplo, segmentos de fluxo de transporte MPEG. ssegment é um alias mais curto para stream_segment.
Cada segmento começa com um keyframe do fluxo de referência selecionado, definido por meio da opção reference_stream.
Observe que, se você quiser uma divisão precisa para um arquivo de vídeo, precisa fazer com que os keyframes de entrada correspondam exatamente aos tempos de divisão esperados pelo segmentador; caso contrário, o muxer segment iniciará o novo segmento com o keyframe encontrado logo após o horário de início especificado.
O muxer segment funciona melhor com um único vídeo de taxa de quadros constante.
Opcionalmente, pode gerar uma lista dos segmentos criados definindo a opção segment_list. O tipo de lista é especificado pela opção segment_list_type. Os nomes de arquivo das entradas na lista de segmentos são definidos, por padrão, como o nome base dos arquivos de segmento correspondentes.
Veja também o muxer hls, que fornece uma implementação mais específica para segmentação HLS.
4.70.1 Opções
O muxer segment aceita as seguintes opções:
increment_tc 1|0
se definido como 1, incrementa o timecode entre cada segmento. Se isso for selecionado, a entrada precisa ter um timecode no primeiro fluxo de vídeo. O valor padrão é 0.
reference_stream specifier
Define o fluxo de referência, conforme especificado pela string specifier. Se specifier for definido como auto, a referência é escolhida automaticamente. Caso contrário, deve ser um especificador de fluxo (veja o capítulo “Especificadores de fluxo” do manual do ffmpeg) que especifique o fluxo de referência. O valor padrão é auto.
segment_format format
Sobrescreve o formato de container interno; por padrão, é deduzido pela extensão do nome do arquivo.
segment_format_options options_list
Define as opções de formato de saída usando uma lista de parâmetros key=value separados por :. Valores que contenham o caractere especial : devem ser escapados.
segment_list name
Gera também um arquivo de lista chamado name. Se não for especificado, nenhum arquivo de lista é gerado.
segment_list_flags flags
Define flags que afetam a geração da lista de segmentos.
Atualmente, aceita as seguintes flags:
‘cache’
Permite o armazenamento em cache (afeta apenas arquivos de lista M3U8).
‘live’
Permite a geração de arquivos apropriada para uso ao vivo.
segment_list_size size
Atualiza o arquivo de lista para que contenha no máximo size segmentos. Se for 0, o arquivo de lista conterá todos os segmentos. O valor padrão é 0.
segment_list_entry_prefix prefix
Antepõe prefix a cada entrada. Útil para gerar caminhos absolutos. Por padrão, nenhum prefixo é aplicado.
segment_list_type type
Seleciona o formato de listagem.
Os seguintes valores são reconhecidos:
‘flat’
Gera uma lista simples dos segmentos criados, um segmento por linha.
‘csv, ext’
Gera uma lista dos segmentos criados, um segmento por linha, cada linha seguindo o formato (valores separados por vírgula):
segment_filename,segment_start_time,segment_end_time
segment_filename é o nome do arquivo de saída gerado pelo muxer de acordo com o padrão fornecido. O escape CSV (conforme a RFC4180) é aplicado quando necessário.
segment_start_time e segment_end_time especificam o horário de início e fim do segmento, expresso em segundos.
Um arquivo de lista com o sufixo ".csv" ou ".ext" selecionará automaticamente esse formato.
‘ext’ é obsoleto em favor de ‘csv’.
‘ffconcat’
Gera um arquivo ffconcat para os segmentos criados. O arquivo resultante pode ser lido usando o demuxer concat do FFmpeg.
Um arquivo de lista com o sufixo ".ffcat" ou ".ffconcat" selecionará automaticamente esse formato.
‘m3u8’
Gera um arquivo M3U8 estendido, versão 3, em conformidade com http://tools.ietf.org/id/draft-pantos-http-live-streaming.
Um arquivo de lista com o sufixo ".m3u8" selecionará automaticamente esse formato.
Se não for especificado, o tipo é deduzido a partir do sufixo do nome do arquivo de lista.
segment_time time
Define a duração do segmento como time; o valor deve ser uma especificação de duração. O valor padrão é "2". Veja também a opção segment_times.
Observe que a divisão pode não ser precisa, a menos que você force os keyframes do fluxo de referência no horário indicado. Veja o aviso introdutório e os exemplos abaixo.
min_seg_duration time
Define a duração mínima do segmento como time; o valor deve ser uma especificação de duração. Isso evita que o muxer encerre segmentos com uma duração abaixo desse valor. Só tem efeito com segment_time. O valor padrão é "0".
segment_atclocktime 1|0
Se definido como "1", divide em intervalos regulares de horário do relógio, começando às 00:00. O valor de tempo especificado em segment_time é usado para definir a duração do intervalo de divisão.
Por exemplo, com segment_time definido como "900", é possível criar arquivos às 12:00, 12:15, 12:30 etc.
O valor padrão é "0".
segment_clocktime_offset duration
Atrasa os horários de divisão de segmento pela duração especificada ao usar segment_atclocktime.
Por exemplo, com segment_time definido como "900" e segment_clocktime_offset definido como "300", é possível criar arquivos às 12:05, 12:20, 12:35 etc.
O valor padrão é "0".
segment_clocktime_wrap_duration duration
Força o segmentador a iniciar um novo segmento somente se um pacote chegar ao muxer dentro da duração especificada após o horário de referência da segmentação. Dessa forma, é possível tornar o segmentador mais resistente a saltos para trás no horário local, como segundos bissextos ou a transição do horário de verão para o horário padrão.
O padrão é a maior duração possível, o que significa iniciar um novo segmento independentemente do tempo decorrido desde o último horário de referência.
segment_time_delta delta
Especifica a margem de precisão ao selecionar o horário de início de um segmento, expressa como uma especificação de duração. O valor padrão é "0".
Quando delta é especificado, um keyframe iniciará um novo segmento se seu PTS satisfizer a relação:
PTS >= start_time - time_delta
Esta opção é útil ao dividir conteúdo de vídeo, que é sempre dividido nos limites de GOP, caso um keyframe seja encontrado logo antes do horário de divisão especificado.
Em particular, pode ser usada em combinação com a opção force_key_frames do ffmpeg. Os horários de keyframe especificados por force_key_frames podem não ser definidos com precisão devido a problemas de arredondamento, com a consequência de que um horário de keyframe pode acabar definido logo antes do horário especificado. Para vídeos de taxa de quadros constante, um valor de 1/(2*frame_rate) deve resolver o pior caso de discrepância entre o horário especificado e o horário definido por force_key_frames.
segment_times times
Especifica uma lista de pontos de divisão. times contém uma lista de especificações de duração separadas por vírgula, em ordem crescente. Veja também a opção segment_time.
segment_frames frames
Especifica uma lista de números de quadro de vídeo para divisão. frames contém uma lista de números inteiros separados por vírgula, em ordem crescente.
Esta opção especifica que um novo segmento deve começar sempre que um keyframe do fluxo de referência for encontrado e o número sequencial (começando em 0) do quadro for maior ou igual ao próximo valor da lista.
segment_wrap limit
Reinicia o índice de segmento ao atingir limit.
segment_start_number number
Define o número de sequência do primeiro segmento. O padrão é 0.
strftime 1|0
Usa a função strftime para definir o nome dos novos segmentos a serem gravados. Se isso for selecionado, o nome do segmento de saída deve conter um modelo de função strftime. O valor padrão é 0.
break_non_keyframes 1|0
Se habilitado, permite que os segmentos comecem em quadros que não sejam keyframes. Isso melhora o comportamento em alguns players quando o tempo entre keyframes é inconsistente, mas pode piorá-lo em outros, e pode causar algumas peculiaridades durante a busca. O padrão é 0.
reset_timestamps 1|0
Redefine as marcas de tempo no início de cada segmento, de modo que cada segmento comece com marcas de tempo próximas de zero. Tem como objetivo facilitar a reprodução dos segmentos gerados. Pode não funcionar com algumas combinações de muxers/codecs. É definido como 0 por padrão.
initial_offset offset
Especifica o deslocamento de marca de tempo a aplicar às marcas de tempo dos pacotes de saída. O argumento deve ser uma especificação de duração de tempo, e o padrão é 0.
write_empty_segments 1|0
Se habilitado, grava um segmento vazio se não houver pacotes durante o período que um segmento normalmente abrangeria. Caso contrário, o segmento será preenchido com o próximo pacote gravado. O padrão é 0.
Certifique-se de exigir um GOP fechado ao codificar e de definir o tamanho do GOP de forma a atender à restrição de tempo do segmento.
4.70.2 Exemplos
-
Remultiplexe o conteúdo do arquivo in.mkv em uma lista de segmentos out-000.nut, out-001.nut etc., e grave a lista de segmentos gerados em out.list:
ffmpeg -i in.mkv -codec hevc -flags +cgop -g 60 -map 0 -f segment -segment_list out.list out%03d.nut -
Segmente a entrada e defina as opções de formato de saída para os segmentos de saída:
ffmpeg -i in.mkv -f segment -segment_time 10 -segment_format_options movflags=+faststart out%03d.mp4 -
Segmente o arquivo de entrada de acordo com os pontos de divisão especificados pela opção segment_times:
ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 out%03d.nut -
Use a opção force_key_frames do
ffmpegpara forçar keyframes na entrada no local especificado, junto com a opção de segmentação segment_time_delta para compensar possíveis arredondamentos feitos ao definir os instantes dos keyframes.ffmpeg -i in.mkv -force_key_frames 1,2,3,5,8,13,21 -codec:v mpeg4 -codec:a pcm_s16le -map 0 \ -f segment -segment_list out.csv -segment_times 1,2,3,5,8,13,21 -segment_time_delta 0.05 out%03d.nut
Para forçar keyframes no arquivo de entrada, é necessário transcodificar.
-
Segmente o arquivo de entrada dividindo-o de acordo com a sequência de números de quadro especificada com a opção segment_frames:
ffmpeg -i in.mkv -codec copy -map 0 -f segment -segment_list out.csv -segment_frames 100,200,300,500,800 out%03d.nut -
Converta o in.mkv em segmentos TS usando os encoders
libx264eaac:ffmpeg -i in.mkv -map 0 -codec:v libx264 -codec:a aac -f ssegment -segment_list out.list out%03d.ts -
Segmente o arquivo de entrada e crie uma playlist ao vivo M3U8 (pode ser usada como fonte HLS ao vivo):
ffmpeg -re -i in.mkv -codec copy -map 0 -f segment -segment_list playlist.m3u8 \ -segment_list_flags +live -segment_time 10 out%03d.mkv
4.71 smoothstreaming
O muxer Smooth Streaming gera um conjunto de arquivos (manifesto, chunks) adequado para ser servido por um servidor web convencional.
window_size
Especifica o número de fragmentos mantidos no manifesto. O padrão é 0 (mantém todos).
extra_window_size
Especifica o número de fragmentos mantidos fora do manifesto antes de serem removidos do disco. O padrão é 5.
lookahead_count
Especifica o número de fragmentos lookahead. O padrão é 2.
min_frag_duration
Especifica a duração mínima dos fragmentos (em microssegundos). O padrão é 5000000.
remove_at_exit
Especifica se todos os fragmentos devem ser removidos ao finalizar. O padrão é 0 (não remove).
4.72 streamhash
Formato de teste de hash por fluxo.
Este muxer calcula e imprime um hash criptográfico de todos os quadros de entrada, por fluxo. Isso pode ser usado para verificações de igualdade sem a necessidade de uma comparação binária completa.
Por padrão, os quadros de áudio são convertidos para áudio raw com sinal de 16 bits e os quadros de vídeo para vídeo raw antes do cálculo do hash, mas a saída de conversões explícitas para outros codecs também pode ser usada. As marcas de tempo são ignoradas. Por padrão, usa a função de hash criptográfico SHA-256, mas oferece suporte a vários outros algoritmos.
A saída do muxer consiste em uma linha por fluxo no formato: streamindex,streamtype,algo=hash, em que streamindex é o índice do fluxo mapeado, streamtype é um único caractere indicando o tipo de fluxo, algo é uma string curta que representa a função de hash usada, e hash é um número hexadecimal que representa o hash calculado.
hash algorithm
Usa a função de hash criptográfico especificada pela string algorithm. Os valores compatíveis incluem MD5, murmur3, RIPEMD128, RIPEMD160, RIPEMD256, RIPEMD320, SHA160, SHA224, SHA256 (padrão), SHA512/224, SHA512/256, SHA384, SHA512, CRC32 e adler32.
4.72.1 Exemplos
Para calcular o hash SHA-256 da entrada convertida em áudio e vídeo raw e armazená-lo no arquivo out.sha256:
ffmpeg -i INPUT -f streamhash out.sha256
Para imprimir um hash MD5 na saída padrão, use o comando:
ffmpeg -i INPUT -f streamhash -hash md5 -
Veja também os muxers hash e framehash.
4.73 tee
O muxer tee pode ser usado para gravar os mesmos dados em várias saídas, como arquivos ou fluxos. Pode ser usado, por exemplo, para transmitir um vídeo pela rede e salvá-lo em disco ao mesmo tempo.
Isso é diferente de especificar várias saídas para a ferramenta de linha de comando ffmpeg. Com o muxer tee, os dados de áudio e vídeo são codificados apenas uma vez. Com as múltiplas saídas convencionais, várias operações de codificação são iniciadas em paralelo, o que pode ser um processo muito custoso. O muxer tee não é útil ao usar diretamente a API do libavformat, pois nesse caso é possível entregar os mesmos pacotes diretamente a vários muxers.
Como o muxer tee não representa nenhum formato de saída específico, o ffmpeg não pode selecionar automaticamente os fluxos de saída. Portanto, todos os fluxos destinados à saída devem ser especificados usando -map. Veja os exemplos a seguir.
Alguns encoders podem precisar de opções diferentes dependendo do formato de saída; a detecção automática disso não funciona com o muxer tee, portanto elas precisam ser especificadas explicitamente. O exemplo principal é a flag global_header.
As saídas escravas são especificadas no nome de arquivo passado ao muxer, separadas por ’|’. Se algum dos nomes de saída escrava contiver o separador ’|’, espaços à esquerda ou à direita ou qualquer caractere especial, eles deverão ser escapados (veja (ffmpeg-utils)a seção "Quoting and escaping" do manual ffmpeg-utils(1)).
4.73.1 Opções
use_fifo bool
Se definida como 1, as saídas escravas são processadas em threads separadas usando o muxer fifo. Isso permite compensar diferenças de velocidade/latência/confiabilidade entre as saídas e configurar uma recuperação transparente. Por padrão, esse recurso está desativado.
fifo_options
Opções a serem passadas às instâncias do pseudo-muxer fifo. Veja fifo.
As opções do muxer podem ser especificadas para cada escrava antepondo-as como uma lista de pares key=value separados por ’:’, entre colchetes. Se os valores das opções contiverem um caractere especial ou o separador ’:’, eles deverão ser escapados; observe que se trata de um segundo nível de escape.
As seguintes opções especiais também são reconhecidas:
f
Especifica o nome do formato. Obrigatória caso não possa ser deduzida a partir da URL de saída.
bsfs[/spec]
Especifica uma lista de filtros de bitstream a serem aplicados à saída indicada.
É possível especificar a quais fluxos um determinado filtro de bitstream se aplica, anexando à opção um especificador de fluxo separado por /. spec deve ser um especificador de fluxo (veja Especificadores de fluxo de formato).
Se o especificador de fluxo não for especificado, os filtros de bitstream serão aplicados a todos os fluxos da saída. Isso fará com que a operação de saída falhe caso a saída contenha fluxos aos quais o filtro de bitstream não possa ser aplicado, por exemplo, ao aplicar h264_mp4toannexb a uma saída que contenha um fluxo de áudio.
As opções de um filtro de bitstream devem ser especificadas na forma opt=value.
Vários filtros de bitstream podem ser especificados, separados por ",".
use_fifo bool
Isso permite sobrepor a opção use_fifo do muxer tee para um muxer escravo individual.
fifo_options
Isso permite sobrepor a opção fifo_options do muxer tee para um muxer escravo individual. Veja fifo.
select
Seleciona os fluxos que devem ser mapeados para a saída escrava, especificados por um especificador de fluxo. Se não for especificado, o padrão passa a ser todos os fluxos mapeados. Isso fará com que a operação de saída falhe caso o formato de saída não aceite todos os fluxos mapeados.
Você pode usar vários especificadores de fluxo separados por vírgulas (,), por exemplo: a:0,v
onfail
Especifica o comportamento em caso de falha na saída. Pode ser definida como abort (que é o padrão) ou ignore. abort faz todo o processo falhar em caso de falha nessa saída escrava. ignore ignora a falha nessa saída, de modo que as demais saídas continuam sem serem afetadas.
4.73.2 Exemplos
-
Codifique algo, arquive-o em um arquivo WebM e transmita-o como MPEG-TS por UDP:
ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a "archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/" -
Como acima, mas continue a transmissão mesmo que a saída para o arquivo local falhe (por exemplo, se o disco local ficar cheio):
ffmpeg -i ... -c:v libx264 -c:a mp2 -f tee -map 0:v -map 0:a "[onfail=ignore]archive-20121107.mkv|[f=mpegts]udp://10.0.1.255:1234/" -
Use o
ffmpegpara codificar a entrada e envie a saída para três destinos diferentes. O filtro de bitstreamdump_extraé usado para adicionar informações de extradata a todos os pacotes de keyframes de vídeo da saída, conforme exigido pelo formato MPEG-TS. A opção select é aplicada a out.aac para que ele contenha apenas pacotes de áudio.ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=a]out.aac" -
Como acima, mas selecione apenas o fluxo
a:1para a saída de áudio. Observe que é necessário realizar um segundo nível de escape, já que ":" é um caractere especial usado para separar opções.ffmpeg -i ... -map 0 -flags +global_header -c:v libx264 -c:a aac -f tee "[bsfs/v=dump_extra=freq=keyframe]out.ts|[movflags=+faststart]out.mp4|[select=\'a:1\']out.aac"
4.74 wav
Muxer de áudio RIFF Wave.
4.74.1 Opções
rf64 mode
Seleciona se o formato de arquivo RF64 deve ser usado em vez do RIFF. O RF64 permite arquivos maiores que 4 gigabytes, mas o suporte a RF64 não é tão universal quanto o do RIFF.
São reconhecidos os seguintes modos:
‘auto’
Começa gravando um arquivo RIFF padrão para manter a compatibilidade com softwares que não reconhecem o RF64, mas muda para RF64 se o arquivo de saída ultrapassar 4 gigabytes. Reserva uma pequena quantidade de espaço extra no cabeçalho usando um chunk JUNK, que deve ser ignorado por todos os leitores RIFF em conformidade, mas alguns leitores WAV extremamente simplistas podem se confundir com isso.
‘always’
Sempre usa o formato RF64, independentemente do tamanho do arquivo. O arquivo de saída só poderá ser lido por softwares compatíveis com RF64 e deixa de ser um arquivo RIFF WAVE padrão.
‘never’
Sempre usa RIFF puro, nunca RF64. Este modo é o mais compatível com softwares legados, mas se o arquivo de saída ultrapassar 4 gigabytes, o campo de tamanho de 32 bits do chunk data deixará de representar corretamente o tamanho, e a maioria dos softwares de áudio não conseguirá ler parte ou a totalidade dos dados. (A opção ignore_length do demuxer wav pode ser usada para recuperar um arquivo nessas condições.) Este é o modo padrão.
write_bext bool
Se ativada, adiciona um chunk BEXT de Broadcast Wave Format contendo metadados de áudio estendidos. O padrão é false.
write_peak mode
Se ativada, adiciona um chunk Peak Envelope (EBU Tech 3285 Supplement 3). O padrão é off.
‘off’
Não adiciona o chunk Peak Envelope.
‘on’
Adiciona o chunk Peak Envelope, calculando os valores de pico com base nas opções peak_block_size, peak_format e peak_ppv.
‘only’
Semelhante a on, mas sem gravar os dados de áudio propriamente ditos (nenhum chunk data será gravado no arquivo; apenas o Peak Envelope e outros chunks de metadados serão gravados.)
peak_block_size int
Número de amostras de áudio usadas para gerar cada quadro de pico, até 65536. O padrão é 256.
peak_format format
O formato dos dados da envoltória de pico (1: uint8, 2: uint16). O padrão é 2 (uint16).
peak_ppv int
Número de pontos de pico por valor de pico (1 ou 2). O padrão é 2.
4.75 webm_chunk
Muxer de chunks WebM Live.
Este muxer grava os cabeçalhos e chunks do WebM como arquivos separados, que podem ser consumidos por clientes compatíveis com fluxos WebM Live via DASH.
4.75.1 Opções
Este muxer é compatível com as seguintes opções:
chunk_start_index
Índice do primeiro chunk (o padrão é 0).
header
Nome do arquivo de cabeçalho no qual os dados de inicialização serão gravados.
audio_chunk_duration
Duração de cada chunk de áudio em milissegundos (o padrão é 5000).
4.75.2 Exemplo
ffmpeg -f v4l2 -i /dev/video0 \
-f alsa -i hw:0 \
-map 0:0 \
-c:v libvpx-vp9 \
-s 640x360 -keyint_min 30 -g 30 \
-f webm_chunk \
-header webm_live_video_360.hdr \
-chunk_start_index 1 \
webm_live_video_360_%d.chk \
-map 1:0 \
-c:a libvorbis \
-b:a 128k \
-f webm_chunk \
-header webm_live_audio_128.hdr \
-chunk_start_index 1 \
-audio_chunk_duration 1000 \
webm_live_audio_128_%d.chk
4.76 webm_dash_manifest
Muxer WebM DASH Manifest.
Este muxer implementa a especificação WebM DASH Manifest para gerar o XML do manifesto DASH. Também é compatível com a geração de manifestos para fluxos DASH ao vivo.
Para mais informações, veja:
- WebM DASH Specification: https://sites.google.com/a/webmproject.org/wiki/adaptive-streaming/webm-dash-specification
- ISO DASH Specification: http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip
4.76.1 Opções
Este muxer é compatível com as seguintes opções:
adaptation_sets
Esta opção tem a seguinte sintaxe: "id=x,streams=a,b,c id=y,streams=d,e", em que x e y são os identificadores exclusivos dos adaptation sets, e a, b, c, d e e são os índices dos fluxos de áudio e vídeo correspondentes. Qualquer número de adaptation sets pode ser adicionado usando esta opção.
live
Defina como 1 para criar um manifesto DASH de fluxo ao vivo. O padrão é 0.
chunk_start_index
Índice inicial do primeiro chunk. Esse valor será incluído no atributo ‘startNumber’ do elemento ‘SegmentTemplate’ no manifesto. O padrão é 0.
chunk_duration_ms
Duração de cada chunk em milissegundos. Esse valor será incluído no atributo ‘duration’ do elemento ‘SegmentTemplate’ no manifesto. O padrão é 1000.
utc_timing_url
URL da página que retornará a marca de tempo UTC no formato ISO. Esse valor será incluído no atributo ‘value’ do elemento ‘UTCTiming’ no manifesto. O padrão é None.
time_shift_buffer_depth
Menor tempo (em segundos) de buffer de deslocamento para o qual a disponibilidade de qualquer Representation é garantida. Esse valor será incluído no atributo ‘timeShiftBufferDepth’ do elemento ‘MPD’. O padrão é 60.
minimum_update_period
Período mínimo de atualização (em segundos) do manifesto. Esse valor será incluído no atributo ‘minimumUpdatePeriod’ do elemento ‘MPD’. O padrão é 0.
4.76.2 Exemplo
ffmpeg -f webm_dash_manifest -i video1.webm \
-f webm_dash_manifest -i video2.webm \
-f webm_dash_manifest -i audio1.webm \
-f webm_dash_manifest -i audio2.webm \
-map 0 -map 1 -map 2 -map 3 \
-c copy \
-f webm_dash_manifest \
-adaptation_sets "id=0,streams=0,1 id=1,streams=2,3" \
manifest.xml
4.77 whip
Muxer WebRTC (Real-Time Communication) compatível com streaming de latência inferior a um segundo de acordo com a especificação WHIP (WebRTC-HTTP ingestion protocol).
Este é um recurso experimental.
Ele usa HTTP como protocolo de sinalização para trocar capacidades SDP e candidatos ICE lite. Em seguida, usa solicitações e respostas de binding STUN para estabelecer uma sessão sobre UDP. Depois, inicia um handshake DTLS para trocar as chaves de criptografia SRTP. Por fim, divide os quadros de vídeo e áudio em pacotes RTP e os criptografa usando SRTP.
Certifique-se de usar H.264 sem quadros B e Opus como codec de áudio. Por exemplo, para converter um arquivo de entrada com o ffmpeg em WebRTC:
ffmpeg -re -i input.mp4 -acodec libopus -ar 48000 -ac 2 \
-vcodec libx264 -profile:v baseline -tune zerolatency -threads 1 -bf 0 \
-f whip "http://localhost:1985/rtc/v1/whip/?app=live&stream=livestream"
Neste exemplo, foram usadas opções de baixa latência, resultando em uma latência de ponta a ponta de aproximadamente 150ms.
4.77.1 Opções
Este muxer é compatível com as seguintes opções:
handshake_timeout integer
Define o tempo limite em milissegundos para o handshake de ICE e DTLS. O valor padrão é 5000.
timeout integer
Define o tempo limite em segundos para operações de E/S do socket. Aplicável somente à saída HTTP. O valor padrão é -1.
pkt_size integer
Define o tamanho máximo, em bytes, dos pacotes RTP enviados. O valor padrão é 1200.
ts_buffer_size integer
Define o tamanho do buffer, em bytes, do protocolo subjacente. O valor padrão é -1 (automático). O UDP seleciona automaticamente um valor razoável.
whip_flags flags
Valores possíveis:
‘dtls_active’
O muxer tentará definir a função dtls active e enviará o primeiro client hello.
rtp_history integer
Define o número de itens do histórico de RTP a serem armazenados. O valor padrão é 512.
authorization string
O token Bearer opcional para a Authorization do WHIP.
cert_file string
O caminho opcional do arquivo de certificado para DTLS.
key_file string
O caminho opcional do arquivo de chave privada para DTLS.
5 Metadados
O FFmpeg é capaz de despejar metadados de arquivos de mídia em um arquivo de texto simples, codificado em UTF-8 e no estilo INI, e depois recarregá-los usando o muxer/demuxer metadata.
O formato do arquivo é o seguinte:
- Um arquivo consiste em um cabeçalho e diversas tags de metadados divididas em seções, cada uma em sua própria linha.
- O cabeçalho é uma string ‘;FFMETADATA’, seguida de um número de versão (atualmente 1).
- As tags de metadados têm a forma ‘key=value’
- Logo após o cabeçalho vêm os metadados globais
- Após os metadados globais, pode haver seções com metadados por fluxo/por capítulo.
- Uma seção começa com o nome da seção em maiúsculas (ou seja, STREAM ou CHAPTER) entre colchetes (‘[’, ‘]’) e termina com o início da seção seguinte ou o fim do arquivo.
- No início de uma seção de capítulo, pode haver uma timebase opcional a ser usada para os valores de start/end. Ela deve estar na forma ‘TIMEBASE=num/den’, em que num e den são inteiros. Se a timebase estiver ausente, os tempos de start/end são considerados em nanossegundos.
Em seguida, uma seção de capítulo deve conter os tempos de início e fim do capítulo na forma ‘START=num’, ‘END=num’, em que num é um inteiro positivo.
- Linhas vazias e linhas que começam com ‘;’ ou ‘#’ são ignoradas.
- Chaves ou valores de metadados que contenham caracteres especiais (‘=’, ‘;’, ‘#’, ‘\’ e uma quebra de linha) devem ser escapados com uma barra invertida ‘\’.
- Observe que espaços em branco nos metadados (por exemplo, ‘foo = bar’) são considerados parte da tag (no exemplo acima, a chave é ‘foo ’ e o valor é ‘ bar’).
Um arquivo ffmetadata pode se parecer com isto:
;FFMETADATA1
title=bike\\shed
;this is a comment
artist=FFmpeg troll team
[CHAPTER]
TIMEBASE=1/1000
START=0
#chapter ends at 0:01:00
END=60000
title=chapter \#1
[STREAM]
title=multi\
line
Usando o muxer e o demuxer ffmetadata, é possível extrair os metadados de um arquivo de entrada para um arquivo ffmetadata e, em seguida, transcodificar o arquivo para um arquivo de saída com o arquivo ffmetadata editado.
Extrair um arquivo ffmetadata com o ffmpeg é feito da seguinte forma:
ffmpeg -i INPUT -f ffmetadata FFMETADATAFILE
Reinserir as informações de metadados editadas a partir do arquivo FFMETADATAFILE pode ser feito da seguinte forma:
ffmpeg -i INPUT -i FFMETADATAFILE -map_metadata 1 -codec copy OUTPUT
6 Veja também
ffmpeg, ffplay, ffprobe, libavformat
7 Autores
Os desenvolvedores do FFmpeg.
Para mais detalhes sobre a autoria, veja o histórico do Git do projeto (https://git.ffmpeg.org/ffmpeg), por exemplo, digitando o comando git log no diretório-fonte do FFmpeg, ou navegando pelo repositório on-line em https://git.ffmpeg.org/ffmpeg.
Os mantenedores dos componentes específicos estão listados no arquivo MAINTAINERS na árvore do código-fonte.
Hospedagem fornecida por telepoint.bg