Documentação dos filtros de bitstream do FFmpeg
1 Descrição
Este documento descreve os filtros de bitstream fornecidos pela biblioteca libavcodec.
Um filtro de bitstream opera sobre os dados do fluxo codificado e realiza modificações no nível de bitstream sem executar a decodificação.
2 Filtros de bitstream
Ao configurar a compilação do FFmpeg, todos os filtros de bitstream compatíveis são habilitados por padrão. É possível listar todos os disponíveis com a opção de configure --list-bsfs.
É possível desabilitar todos os filtros de bitstream com a opção de configure --disable-bsfs, habilitar seletivamente qualquer filtro de bitstream com a opção --enable-bsf=BSF, ou desabilitar um filtro de bitstream específico com a opção --disable-bsf=BSF.
A opção -bsfs das ferramentas ff* exibe a lista de todos os filtros de bitstream compatíveis incluídos na compilação.
As ferramentas ff* têm uma opção -bsf aplicada por fluxo, que recebe uma lista de filtros separados por vírgula, cujos parâmetros seguem o nome do filtro após um ’=’.
ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1:opt2=str2][,filter2] OUTPUT
Abaixo está uma descrição dos filtros de bitstream atualmente disponíveis, com seus parâmetros, se houver.
2.1 aac_adtstoasc
Converte AAC ADTS de MPEG-2/4 em um bitstream MPEG-4 Audio Specific Configuration.
Este filtro cria um AudioSpecificConfig MPEG-4 a partir de um cabeçalho ADTS MPEG-2/4 e remove o cabeçalho ADTS.
Este filtro é necessário, por exemplo, ao copiar um fluxo AAC de um ADTS AAC bruto ou de um container MPEG-TS para MP4A-LATM, para um arquivo FLV, ou para arquivos MOV/MP4 e formatos relacionados como 3GP ou M4A. Observe que ele é inserido automaticamente para MP4A-LATM, MOV/MP4 e formatos relacionados.
2.2 av1_metadata
Modifica os metadados incorporados em um fluxo AV1.
td
Insere ou remove OBUs delimitadores temporais (temporal delimiter) em todas as unidades temporais do fluxo.
‘insert’
Insere um TD no início de cada TU que ainda não o tenha.
‘remove’
Remove o TD do início de cada TU que o tenha.
color_primaries transfer_characteristics matrix_coefficients
Define os campos de descrição de cor no fluxo (veja a seção 6.4.2 do AV1).
color_range
Define o intervalo de cor no fluxo (veja a seção 6.4.2 do AV1; observe que isso não pode ser definido para fluxos que usam primaries BT.709, característica de transferência sRGB e coeficientes de matriz identity (RGB)).
‘tv’
Intervalo limitado.
‘pc’
Intervalo completo.
chroma_sample_position
Define a posição de amostragem de croma no fluxo (veja a seção 6.4.2 do AV1). Isso só pode ser definido para fluxos 4:2:0.
‘vertical’
Posição esquerda (corresponde ao padrão em MPEG-2 e H.264).
‘colocated’
Posição superior esquerda.
tick_rate
Define a taxa de tick (time_scale / num_units_in_display_tick) nas informações de temporização do cabeçalho de sequência.
num_ticks_per_picture
Define o número de ticks em cada imagem, para indicar que o fluxo tem uma taxa de quadros fixa. Ignorado se tick_rate também não estiver definido.
delete_padding
Exclui os OBUs de preenchimento (Padding).
2.3 chomp
Remove o preenchimento com zeros no final de um pacote.
2.4 dca_core
Extrai o núcleo de um fluxo DCA/DTS, descartando extensões como DTS-HD.
2.5 dovi_rpu
Manipula os metadados do Dolby Vision em um bitstream HEVC/AV1, com a opção de habilitar a compressão de metadados.
strip
Se habilitado, remove do fluxo todos os metadados do Dolby Vision (registro de configuração e blocos de dados RPU).
compression
Qual nível de compressão habilitar.
‘none’
Sem compressão de metadados.
‘limited’
Esquema de compressão de metadados limitado. Deve ser compatível com a maioria dos dispositivos. Este é o padrão.
‘extended’
Compressão de metadados estendida. Os dispositivos não são obrigados a oferecer suporte a isso. Observe que, atualmente, esse nível se comporta da mesma forma que ‘limited’ no libavcodec.
2.6 dovi_split
Divide um bitstream HEVC multicamadas do Dolby Vision Profile 7. O Profile 7 transporta o bitstream HEVC da camada de aprimoramento intercalado dentro das unidades de acesso da camada base, envolto em unidades NAL user-unspecified do tipo 63 (UNSPEC63), com os metadados RPU como uma NAL user-unspecified irmã do tipo 62 (UNSPEC62).
mode
Quais componentes do Dolby Vision manter no bitstream de saída.
‘bl’
Somente camada base: descarta todos os UNSPEC63 (EL) e todos os UNSPEC62 (RPU). A saída é um fluxo HEVC simples, sem marcadores do Dolby Vision. Este é o padrão.
‘bl_rpu’
Camada base com a NAL RPU mantida.
‘el’
Somente camada de aprimoramento: para cada NAL UNSPEC63, remove o cabeçalho NAL externo de dois bytes e emite o payload interno. O resultado é um bitstream HEVC independente. UNSPEC62 (RPU) é descartado.
‘el_rpu’
Camada de aprimoramento com a NAL RPU mantida tal como está. Igual a ‘el’, mas as NALs RPU UNSPEC62 também são emitidas junto com as NALs EL desempacotadas.
2.7 dump_extra
Adiciona extradata no início dos pacotes filtrados, exceto quando esses pacotes já começam exatamente com o extradata que se pretende adicionar.
freq
O argumento adicional especifica quais pacotes devem ser filtrados. Aceita os seguintes valores:
‘k’ ‘keyframe’
adiciona extradata a todos os pacotes-chave
‘e’ ‘all’
adiciona extradata a todos os pacotes
Se não for especificado, presume-se ‘k’.
Por exemplo, o comando ffmpeg a seguir força um cabeçalho global (desabilitando assim os cabeçalhos individuais de cada pacote) nos pacotes H.264 gerados pelo encoder libx264, mas os corrige adicionando aos pacotes-chave o cabeçalho armazenado em extradata:
ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
2.8 dv_error_marker
Os blocos do DV marcados como danificados são substituídos por blocos da cor especificada.
color
A cor pela qual substituir os blocos danificados
sta
Uma máscara de 16 bits que especifica quais dos 16 valores possíveis de status de erro devem ser substituídos por blocos coloridos. 0xFFFE é o padrão, que substitui todos os valores de status de erro diferentes de 0.
‘ok’
Sem erro, sem ocultação
‘err’
Erro, sem ocultação
‘res’
Reservado
‘notok’
Erro ou ocultação
‘notres’
Não reservado
‘Aa, Ba, Ca, Ab, Bb, Cb, A, B, C, a, b, erri, erru’
O código específico de status de erro
veja as páginas 44-46 ou a seção 5.5 de http://web.archive.org/web/20060927044735/http://www.smpte.org/smpte_store/standards/pdf/s314m.pdf
2.9 eac3_core
Extrai o núcleo de um fluxo E-AC-3, descartando canais extras.
2.10 eia608_to_smpte436m
Converte um fluxo EIA_608 em um fluxo de dados SMPTE_436M_ANC, envolvendo as legendas ocultas (closed captions) em pacotes VANC CDP CTA-708.
line_number
Escolhe em qual número de linha os pacotes VANC gerados devem ficar. Geralmente, prefere-se a linha 9 (o padrão) ou a 11.
wrapping_type
Escolhe o tipo de encapsulamento SMPTE 436M; o padrão é ‘vanc_frame’. Aceita os seguintes valores:
‘vanc_frame’
Quadro VANC (quadro entrelaçado ou progressivo segmentado)
‘vanc_field_1’ ‘vanc_field_2’ ‘vanc_progressive_frame’ sample_coding
Escolhe a codificação de amostra SMPTE 436M; o padrão é ‘8bit_luma’. Aceita os seguintes valores:
‘8bit_luma’
amostras de luma de componente de 8 bits
‘8bit_color_diff’
amostras de diferença de cor de componente de 8 bits
‘8bit_luma_and_color_diff’
amostras de luma e de diferença de cor de componente de 8 bits
‘10bit_luma’
amostras de luma de componente de 10 bits
‘10bit_color_diff’
amostras de diferença de cor de componente de 10 bits
‘10bit_luma_and_color_diff’
amostras de luma e de diferença de cor de componente de 10 bits
‘8bit_luma_parity_error’
amostras de luma de componente de 8 bits com erro de paridade
‘8bit_color_diff_parity_error’
amostras de diferença de cor de componente de 8 bits com erro de paridade
‘8bit_luma_and_color_diff_parity_error’
amostras de luma e de diferença de cor de componente de 8 bits com erro de paridade
initial_cdp_sequence_cntr
O valor inicial dos campos inteiros sem sinal de 16 bits cdp_hdr_sequence_cntr e cdp_ftr_sequence_cntr do CDP. O padrão é 0.
cdp_frame_rate
Define o campo cdp_frame_rate do CDP. Isso não altera de fato a temporização do fluxo de dados; apenas altera os valores inseridos nesse campo nos pacotes CDP gerados. O padrão é ‘30000/1001’.
2.11 extract_extradata
Extrai o extradata in-band.
Certos codecs permitem que os cabeçalhos de longo prazo (por exemplo, os cabeçalhos de sequência do MPEG-2, ou o (VPS/)SPS/PPS do H.264/HEVC) sejam transmitidos "in-band" (ou seja, como parte do bitstream que contém os quadros codificados) ou "out of band" (por exemplo, no nível do container). Esta última forma é chamada de "extradata" na terminologia do FFmpeg.
Este filtro de bitstream detecta os cabeçalhos in-band e os disponibiliza como extradata.
remove
Quando essa opção é habilitada, os cabeçalhos de longo prazo são removidos do bitstream após a extração.
2.12 filter_units
Remove do fluxo as unidades cujo tipo esteja, ou não esteja, em um determinado conjunto.
pass_types
Lista de tipos de unidade, ou de intervalos de tipos de unidade, que devem passar enquanto todos os demais são removidos. É especificada como uma lista, separada por ’|’, de valores de tipo de unidade ou de intervalos separados por ’-’.
remove_types
Idêntico a pass_types, exceto que as unidades no conjunto indicado são removidas e todas as demais passam.
Os tipos usados por pass_types e remove_types correspondem aos tipos de unidade NAL (nal_unit_type) em H.264, HEVC e H.266 (veja a Tabela 7-1 nas especificações de H.264 e HEVC, ou a Tabela 5 na especificação de H.266), aos valores de marcador do JPEG (sem o prefixo 0xFF) e, para o MPEG-2, aos códigos de início sem o prefixo de código de início (ou seja, o byte seguinte a 0x000001). Para VP8 e VP9, todas as unidades têm tipo zero.
O extradata não é alterado por essa transformação, mas observe que, se o fluxo contiver conjuntos de parâmetros inline, a saída poderá ficar inutilizável caso eles sejam removidos.
Por exemplo, para remover todas as unidades NAL não VCL de um fluxo H.264:
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=pass_types=1-5' OUTPUT
Para remover todos os AUD, SEI e filler de um fluxo H.265:
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=35|38-40' OUTPUT
Para remover todos os dados de usuário de um fluxo MPEG-2, incluindo legendas ocultas (Closed Captions):
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=178' OUTPUT
Para remover todos os SEI de um fluxo H264, incluindo legendas ocultas:
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=6' OUTPUT
Para remover todos os SEI de prefixo e sufixo de um fluxo HEVC, incluindo legendas ocultas e HDR dinâmico:
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=39|40' OUTPUT
2.13 hapqa_extract
Extrai a parte Rgb ou Alpha de um arquivo HAPQA, sem recompressão, para criar um arquivo HAPQ ou HAPAlphaOnly.
texture
Especifica a textura a manter.
color alpha
Converte HAPQA em HAPQ
ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=color -tag:v HapY -metadata:s:v:0 encoder="HAPQ" hapq_file.mov
Converte HAPQA em HAPAlphaOnly
ffmpeg -i hapqa_inputfile.mov -c copy -bsf:v hapqa_extract=texture=alpha -tag:v HapA -metadata:s:v:0 encoder="HAPAlpha Only" hapalphaonly_file.mov
2.14 h264_metadata
Modifica os metadados incorporados em um fluxo H.264.
aud
Insere ou remove unidades NAL AUD em todas as unidades de acesso do fluxo.
‘pass’ ‘insert’ ‘remove’
O padrão é pass.
sample_aspect_ratio
Define a proporção de aspecto de amostra do fluxo nos parâmetros VUI. Veja a tabela E-1 do H.264.
overscan_appropriate_flag
Define se o fluxo é adequado para exibição com overscan ou não (veja a seção E.2.1 do H.264).
video_format video_full_range_flag
Define o formato de vídeo no fluxo (veja a seção E.2.1 do H.264 e a tabela E-2).
colour_primaries transfer_characteristics matrix_coefficients
Define a descrição de cor no fluxo (veja a seção E.2.1 do H.264 e as tabelas E-3, E-4 e E-5).
chroma_sample_loc_type
Define a posição de amostragem de croma no fluxo (veja a seção E.2.1 do H.264 e a figura E-1).
tick_rate
Define a taxa de tick (time_scale / num_units_in_tick) nos parâmetros VUI. É a menor unidade de tempo representável no fluxo e, em muitos casos, representa a taxa de campo do fluxo (o dobro da taxa de quadros).
fixed_frame_rate_flag
Define se o fluxo tem taxa de quadros fixa - normalmente isso indica que a taxa de quadros é exatamente a metade da taxa de tick, mas o significado exato depende do entrelaçamento e da estrutura de imagem (veja a seção E.2.1 do H.264 e a tabela E-6).
zero_new_constraint_set_flags
Zera constraint_set4_flag e constraint_set5_flag no SPS. Esses bits eram reservados em uma versão anterior da especificação H.264, de modo que alguns decoders de hardware exigem que sejam zero. O resultado de zerá-los ainda é um bitstream válido.
crop_left crop_right crop_top crop_bottom
Define os deslocamentos de corte de quadro no SPS. Esses valores substituem os atuais se o fluxo já estiver cortado.
Esses campos são definidos em pixels. Observe que alguns tamanhos podem não ser representáveis se o croma estiver subamostrado ou o fluxo estiver entrelaçado (veja a seção 7.4.2.1.1 do H.264).
sei_user_data
Insere uma string como dados de usuário não registrados SEI. O argumento deve ter a forma UUID+string, em que o UUID é formado por dígitos hexadecimais possivelmente separados por hifens, e a string pode ser qualquer coisa.
Por exemplo, ‘086f3693-b7b3-4f2c-9653-21492feee5b8+hello’ insere a string “hello” associada ao UUID indicado.
delete_filler
Exclui tanto as unidades NAL de preenchimento quanto as mensagens SEI de preenchimento.
display_orientation
Insere, extrai ou remove mensagens SEI de orientação de exibição (Display orientation). Veja as seções D.1.27 e D.2.27 do H.264 para a sintaxe e a semântica.
‘pass’ ‘insert’ ‘remove’ ‘extract’
O padrão é pass.
O modo insert funciona em conjunto com as opções rotate e flip. Qualquer mensagem de orientação de exibição preexistente será removida nos modos insert ou remove. O modo extract anexa a matriz de exibição ao pacote como side data.
rotate
Define a rotação no SEI de orientação de exibição (ângulo anti-horário em graus). O intervalo vai de -360 a +360. O padrão é NaN.
flip
Define o flip no SEI de orientação de exibição.
‘horizontal’ ‘vertical’
O padrão é não definido.
level
Define o nível no SPS. Consulte a seção A.3 e as tabelas A-1 a A-5 do H.264.
O argumento deve ser o nome de um nível (por exemplo, ‘4.2’), um valor de level_idc (por exemplo, ‘42’), ou o nome especial ‘auto’, indicando que o filtro deve tentar deduzir o nível a partir das propriedades do fluxo de entrada.
2.15 h264_mp4toannexb
Converte um bitstream H.264 do modo com prefixo de tamanho para o modo com prefixo de código de início (conforme definido no Anexo B da especificação ITU-T H.264).
Isso é exigido por alguns formatos de streaming, tipicamente o formato de transport stream MPEG-2 (muxer mpegts).
Por exemplo, para remultiplexar com o ffmpeg um arquivo MP4 contendo um fluxo H.264 para o formato mpegts, você pode usar o comando:
ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
Observe que esse filtro é inserido automaticamente para os formatos de saída MPEG-TS (muxer mpegts) e H.264 bruto (muxer h264).
2.16 h264_redundant_pps
Este filtro aplica uma correção específica a alguns fluxos H264 BDMV de Blu-ray que contêm PPSs redundantes. Esses PPSs modificam parâmetros irrelevantes do fluxo, confundindo outras transformações que exigem o extradata correto.
O encoder usado nesses fluxos afetados adiciona PPSs extras ao longo do fluxo, variando o QP inicial e se a predição ponderada estava habilitada. Isso causa problemas ao copiar o fluxo para um container com cabeçalho global, já que o PPS inicial não é adequado para o restante do fluxo. Um efeito colateral, por exemplo, é que a busca (seek) retornará uma saída corrompida até que um novo PPS apareça.
Esse BSF remove os PPSs extras e reescreve os cabeçalhos de slice de modo que o fluxo use um único PPS inicial no cabeçalho global, o que resolve o problema.
2.17 hevc_metadata
Modifica os metadados incorporados em um fluxo HEVC.
aud
Insere ou remove unidades NAL AUD em todas as unidades de acesso do fluxo.
‘insert’ ‘remove’ sample_aspect_ratio
Define a proporção de aspecto de amostra do fluxo nos parâmetros VUI.
video_format video_full_range_flag
Define o formato de vídeo no fluxo (veja a seção E.3.1 do H.265 e a tabela E.2).
colour_primaries transfer_characteristics matrix_coefficients
Define a descrição de cor no fluxo (veja a seção E.3.1 do H.265 e as tabelas E.3, E.4 e E.5).
chroma_sample_loc_type
Define a posição de amostragem de croma no fluxo (veja a seção E.3.1 do H.265 e a figura E.1).
tick_rate
Define a taxa de tick nos parâmetros do VPS e do VUI (time_scale / num_units_in_tick). Combinada com num_ticks_poc_diff_one, permite definir uma taxa de quadros constante no fluxo. Observe que é provável que os parâmetros do container a sobrescrevam quando o fluxo estiver dentro de um container.
num_ticks_poc_diff_one
Define poc_proportional_to_timing_flag no VPS e no VUI e usa esse valor para definir num_ticks_poc_diff_one_minus1 (veja as seções 7.4.3.1 e E.3.1 do H.265). Ignorado se tick_rate também não estiver definido.
crop_left crop_right crop_top crop_bottom
Define os deslocamentos de corte da janela de conformidade no SPS. Esses valores substituem os atuais se o fluxo já estiver cortado.
Esses campos são definidos em pixels. Observe que alguns tamanhos podem não ser representáveis se o croma estiver subamostrado (seção 7.4.3.2.1 do H.265).
width height
Define a largura e a altura após o corte.
level
Define o nível no VPS e no SPS. Veja a seção A.4 e as tabelas A.6 e A.7 do H.265.
O argumento deve ser o nome de um nível (por exemplo, ‘5.1’), um valor de general_level_idc (por exemplo, ‘153’ para o nível 5.1), ou o nome especial ‘auto’, indicando que o filtro deve tentar deduzir o nível a partir das propriedades do fluxo de entrada.
2.18 hevc_mp4toannexb
Converte um bitstream HEVC/H.265 do modo com prefixo de tamanho para o modo com prefixo de código de início (conforme definido no Anexo B da especificação ITU-T H.265).
Isso é exigido por alguns formatos de streaming, tipicamente o formato de transport stream MPEG-2 (muxer mpegts).
Por exemplo, para remultiplexar com o ffmpeg um arquivo MP4 contendo um fluxo HEVC para o formato mpegts, você pode usar o comando:
ffmpeg -i INPUT.mp4 -codec copy -bsf:v hevc_mp4toannexb OUTPUT.ts
Observe que esse filtro é inserido automaticamente para os formatos de saída MPEG-TS (muxer mpegts) e HEVC/H.265 bruto (muxer h265 ou hevc).
2.19 imxdump
Modifica o bitstream para que se encaixe no MOV e seja utilizável pelo decoder do Final Cut Pro. Este filtro se aplica apenas ao codec mpeg2video, e provavelmente não é necessário no Final Cut Pro 7 e versões mais recentes com o -tag:v apropriado.
Por exemplo, para remultiplexar IMX NTSC de 30 MB/s para MOV:
ffmpeg -i input.mxf -c copy -bsf:v imxdump -tag:v mx3n output.mov
2.20 mjpeg2jpeg
Converte pacotes MJPEG/AVI1 em pacotes JPEG/JFIF completos.
MJPEG é um codec de vídeo em que cada quadro de vídeo é essencialmente uma imagem JPEG. Os quadros individuais podem ser extraídos sem perdas, por exemplo com
ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
Infelizmente, esses trechos são imagens JPEG incompletas, pois não têm o segmento DHT necessário para a decodificação. Citando http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml:
Avery Lee, escrevendo no newsgroup rec.video.desktop em 2001, comentou que "o MJPEG, ou pelo menos o MJPEG dos AVIs com o fourcc MJPG, é um JPEG restrito com uma tabela de Huffman fixa – e omitida. O JPEG deve estar no espaço de cor YCbCr, deve ser 4:2:2, e deve usar codificação Huffman básica, não aritmética nem progressiva. . . . É de fato possível extrair os quadros MJPEG e decodificá-los com um decoder JPEG comum, mas é preciso anexar antes o segmento DHT a eles, ou o decoder não terá como saber como descomprimir os dados. A tabela exata necessária é dada na especificação OpenDML."
Este filtro de bitstream corrige o cabeçalho dos quadros extraídos de um fluxo MJPEG (que trazem o ID de cabeçalho AVI1 e não têm segmento DHT) para produzir imagens JPEG completas.
ffmpeg -i mjpeg-movie.avi -c:v copy -bsf:v mjpeg2jpeg frame_%d.jpg
exiftran -i -9 frame*.jpg
ffmpeg -i frame_%d.jpg -c:v copy rotated.avi
2.21 mjpegadump
Adiciona um cabeçalho MJPEG A ao bitstream, para permitir a decodificação pelo Quicktime.
2.22 mov2textsub
Extrai um arquivo de texto representável a partir de legendas MOV, removendo o cabeçalho de metadados de cada pacote de legenda.
Veja também o filtro text2movsub.
2.23 mpeg2_metadata
Modifica os metadados incorporados em um fluxo MPEG-2.
display_aspect_ratio
Define a proporção de aspecto de exibição no fluxo.
Os seguintes valores fixos são compatíveis:
4/3 16/9 221/100
Qualquer outro valor fará com que pixels quadrados sejam sinalizados em vez disso (veja a seção 6.3.3 do H.262 e a tabela 6-3).
frame_rate
Define a taxa de quadros no fluxo. Ela é construída a partir de uma tabela de valores conhecidos combinados com um pequeno multiplicador e divisor - se o valor informado não for exatamente representável, o valor representável mais próximo será usado em seu lugar (veja a seção 6.3.3 do H.262 e a tabela 6-4).
video_format
Define o formato de vídeo no fluxo (veja a seção 6.3.6 do H.262 e a tabela 6-6).
colour_primaries transfer_characteristics matrix_coefficients
Define a descrição de cor no fluxo (veja a seção 6.3.6 do H.262 e as tabelas 6-7, 6-8 e 6-9).
2.24 mpeg4_unpack_bframes
Desempacota quadros B empacotados no estilo DivX.
Os quadros B empacotados no estilo DivX não são MPEG-4 válido e eram apenas uma solução alternativa para o defeituoso subsistema Video for Windows. Eles ocupam mais espaço, podem causar pequenos problemas de sincronização AV, exigem mais poder de CPU para decodificar (a menos que o player tenha alguma fila de imagens decodificadas para compensar o padrão de quadros 2,0,2,0 por pacote) e causam problemas se copiados para um container padrão como mp4 ou mpeg-ps/ts, porque os decoders de MPEG-4 podem não conseguir decodificá-los, já que não são MPEG-4 válido.
Por exemplo, para corrigir com o ffmpeg um arquivo AVI contendo um fluxo MPEG-4 com quadros B empacotados no estilo DivX, você pode usar o comando:
ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi
2.25 noise
Danifica o conteúdo dos pacotes, ou simplesmente os descarta, sem danificar o container. Pode ser usado para fuzzing ou para testar a resiliência/ocultação de erros.
Parâmetros:
amount
Aceita uma expressão cuja avaliação por pacote determina com que frequência os bytes desse pacote serão modificados. Um valor abaixo de 0 resultará em uma frequência variável. O padrão é 0, o que resulta em nenhuma modificação. No entanto, se nem amount nem drop forem especificados, amount será definido como -1. Veja abaixo as variáveis aceitas.
drop
Aceita uma expressão avaliada por pacote cujo valor determina se esse pacote é descartado. A avaliação como um valor positivo resulta no descarte do pacote. A avaliação como um valor negativo resulta em uma chance variável de descarte, aproximadamente inversa à magnitude do valor. O padrão é 0, o que resulta em nenhum descarte. Veja abaixo as variáveis aceitas.
dropamount
Aceita um inteiro não negativo, que atribui uma chance variável de descarte, aproximadamente inversa ao valor. O padrão é 0, o que resulta em nenhum descarte. Esta opção é mantida por compatibilidade com versões anteriores e equivale a definir drop com um valor negativo de mesma magnitude, ou seja, dropamount=4 é o mesmo que drop=-4. Ignorada se drop também for especificado.
Tanto amount quanto drop aceitam expressões contendo as seguintes variáveis:
‘n’
O índice do pacote, começando em zero.
‘tb’
A timebase para as marcas de tempo dos pacotes.
‘pts’
Marca de tempo de apresentação do pacote (presentation timestamp).
‘dts’
Marca de tempo de decodificação do pacote (decoding timestamp).
‘nopts’
Constante que representa AV_NOPTS_VALUE.
‘startpts’
Primeiro PTS diferente de AV_NOPTS_VALUE visto no fluxo.
‘startdts’
Primeiro DTS diferente de AV_NOPTS_VALUE visto no fluxo.
‘duration’ ‘d’
Duração do pacote, em unidades de timebase.
‘pos’
Posição do pacote na entrada; pode ser -1 quando desconhecida ou não definida.
‘size’
Tamanho do pacote, em bytes.
‘key’
Se o pacote está marcado como keyframe.
‘state’
Um inteiro pseudoaleatório, derivado principalmente do conteúdo do payload do pacote.
2.25.1 Exemplos
Aplica a modificação a todos os bytes, mas sem descartar nenhum pacote.
ffmpeg -i INPUT -c copy -bsf noise=1 output.mkv
Descarta todo pacote de vídeo não marcado como keyframe após a marca de tempo de 30s, mas não modifica nenhum dos pacotes restantes.
ffmpeg -i INPUT -c copy -bsf:v noise=drop='gt(pts*tb\,30)*not(key)' output.mkv
Descarta um segundo de áudio a cada 10 segundos e adiciona algum ruído aleatório ao restante.
ffmpeg -i INPUT -c copy -bsf:a noise=amount=-1:drop='between(mod(pts*tb\,10)\,9\,10)' output.mkv
2.26 null
Este filtro de bitstream deixa os pacotes passarem sem alterações.
2.27 pcm_rechunk
Reempacota o áudio PCM em um número fixo de amostras por pacote ou em uma taxa fixa de pacotes por segundo. Isso é semelhante ao filtro de áudio (ffmpeg-filters)asetnsamples, mas opera sobre pacotes de áudio em vez de quadros de áudio.
nb_out_samples, n
Define o número de amostras por cada pacote de áudio de saída. O número é entendido como o número de amostras por canal. O valor padrão é 1024.
pad, p
Se definido como 1, o filtro preencherá o último pacote de áudio com silêncio, de modo que ele contenha o mesmo número de amostras (ou aproximadamente o mesmo número, veja frame_rate) que os anteriores. O valor padrão é 1.
frame_rate, r
Esta opção faz o filtro gerar um número fixo de pacotes por segundo em vez de um número fixo de amostras por pacote. Se a taxa de amostragem do áudio não for divisível pela taxa de quadros, o número de amostras não será constante, mas variará ligeiramente para que cada pacote comece o mais próximo possível do limite de quadro. Usar esta opção tem precedência sobre nb_out_samples.
Você pode gerar o conhecido padrão 1602-1601-1602-1601-1602 de áudio de 48kHz para a taxa de quadros NTSC usando a opção frame_rate.
ffmpeg -f lavfi -i sine=r=48000:d=1 -c pcm_s16le -bsf pcm_rechunk=r=30000/1001 -f framecrc -
2.28 pgs_frame_merge
Mescla em um único pacote uma sequência de segmentos de legenda PGS que termina com um segmento "end of display set".
Isso é exigido por alguns containers que oferecem suporte a legendas PGS (muxer matroska).
2.29 prores_metadata
Modifica os metadados de propriedades de cor incorporados em um fluxo prores.
color_primaries
Define os primaries de cor. Os valores disponíveis são:
‘auto’
Mantém a mesma propriedade de primaries de cor (padrão).
‘unknown’ ‘bt709’ ‘bt470bg’
BT601 625
‘smpte170m’
BT601 525
‘bt2020’ ‘smpte431’
DCI P3
‘smpte432’
P3 D65
transfer_characteristics
Define a transferência de cor. Os valores disponíveis são:
‘auto’
Mantém a mesma propriedade de características de transferência (padrão).
‘unknown’ ‘bt709’
BT 601, BT 709, BT 2020
‘smpte2084’
SMPTE ST 2084
‘arib-std-b67’
ARIB STD-B67
matrix_coefficients
Define o coeficiente de matriz. Os valores disponíveis são:
‘auto’
Mantém a mesma propriedade de espaço de cor (padrão).
‘unknown’ ‘bt709’ ‘smpte170m’
BT 601
‘bt2020nc’
Define o espaço de cor Rec709 para cada quadro do arquivo
ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt709:color_trc=bt709:colorspace=bt709 output.mov
Define os parâmetros Hybrid Log-Gamma para cada quadro do arquivo
ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt2020:color_trc=arib-std-b67:colorspace=bt2020nc output.mov
2.30 remove_extra
Remove o extradata dos pacotes.
Aceita o seguinte parâmetro:
freq
Define de quais tipos de quadro remover o extradata.
‘k’
Remove o extradata apenas dos quadros que não são keyframe.
‘keyframe’
Remove o extradata apenas dos keyframes.
‘e, all’
Remove o extradata de todos os quadros.
2.31 setts
Define o PTS e o DTS nos pacotes.
Aceita os seguintes parâmetros:
ts pts dts
Define expressões para o PTS, o DTS ou ambos.
duration
Define a expressão para a duração.
time_base
Define a timebase de saída.
prescale
Define se os campos de tempo são convertidos para a timebase de saída definida pelo usuário antes da avaliação das expressões. O padrão é 0.
As expressões são avaliadas por meio da API eval e podem conter as seguintes constantes:
N
A contagem do pacote de entrada. Começa em 0.
TS
A marca de tempo de demultiplexação na entrada, no caso das opções ts ou dts, ou a marca de tempo de apresentação, no caso da opção pts.
POS
A posição original do pacote no arquivo, ou undefined se indefinida para o pacote atual
DTS
A marca de tempo de demultiplexação na entrada.
PTS
A marca de tempo de apresentação na entrada.
DURATION
A duração na entrada.
STARTDTS
O DTS do primeiro pacote.
STARTPTS
O PTS do primeiro pacote.
PREV_INDTS
O DTS de entrada anterior.
PREV_INPTS
O PTS de entrada anterior.
PREV_INDURATION
A duração de entrada anterior.
PREV_OUTDTS
O DTS de saída anterior.
PREV_OUTPTS
O PTS de saída anterior.
PREV_OUTDURATION
A duração de saída anterior.
NEXT_DTS
O DTS de entrada seguinte.
NEXT_PTS
O PTS de entrada seguinte.
NEXT_DURATION
A duração de entrada seguinte.
TB
A timebase na qual os campos de tempo são expressos. A timebase de saída definida pelo usuário se prescale estiver habilitado; caso contrário, a timebase de entrada.
TB_OUT
A timebase de saída.
SR
A taxa de amostragem do fluxo ao qual o pacote pertence.
NOPTS
A constante AV_NOPTS_VALUE.
Por exemplo, para igualar o PTS ao DTS (não recomendado se houver quadros B envolvidos):
ffmpeg -i INPUT -c:a copy -bsf:a setts=pts=DTS out.mkv
2.32 showinfo
Registra informações básicas do pacote em log. Útil principalmente para testes, depuração e desenvolvimento.
2.33 smpte436m_to_eia608
Converte um fluxo de dados SMPTE_436M_ANC em um fluxo EIA_608, extraindo as legendas ocultas dos pacotes VANC CDP CTA-708 e ignorando todos os demais dados.
2.34 text2movsub
Converte legendas de texto em legendas MOV (como as usadas pelo codec mov_text) com cabeçalhos de metadados.
Veja também o filtro mov2textsub.
2.35 trace_headers
Registra em log a saída de rastreamento contendo todos os elementos sintáticos nos cabeçalhos do fluxo codificado (tudo acima do nível dos blocos codificados individuais). Isso pode ser útil para depurar problemas de fluxo de baixo nível.
Compatível com AV1, H.264, H.265, (M)JPEG, MPEG-2 e VP9, mas, dependendo da compilação, apenas um subconjunto deles pode estar disponível.
2.36 truehd_core
Extrai o núcleo de um fluxo TrueHD, descartando os dados ATMOS.
2.37 vp9_metadata
Modifica os metadados incorporados em um fluxo VP9.
color_space
Define o valor do espaço de cor no cabeçalho de quadro. Observe que qualquer quadro definido como RGB será implicitamente definido como intervalo PC e que RGB é incompatível com os profiles 0 e 2.
‘unknown’ ‘bt601’ ‘bt709’ ‘smpte170’ ‘smpte240’ ‘bt2020’ ‘rgb’ color_range
Define o valor do intervalo de cor no cabeçalho de quadro. Observe que qualquer valor imposto pelo espaço de cor terá precedência sobre este valor.
‘tv’ ‘pc’
2.38 vp9_superframe
Mescla novamente os quadros invisíveis (alt-ref) do VP9 em superframes do VP9. Isso corrige a mesclagem de fluxos VP9 divididos/segmentados nos quais o quadro alt-ref foi separado de sua contraparte visível.
2.39 vp9_superframe_split
Divide superframes do VP9 em quadros individuais.
2.40 vp9_raw_reorder
Dado um fluxo VP9 com marcas de tempo corretas, mas possivelmente fora de ordem, insere pacotes show-existing-frame adicionais para corrigir a ordenação.
3 Veja também
ffmpeg, ffplay, ffprobe, libavcodec
4 Autores
Os desenvolvedores do FFmpeg.
Para mais detalhes sobre a autoria, veja o histórico Git do projeto (https://git.ffmpeg.org/ffmpeg), por exemplo, executando o comando git log no diretório de fontes 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