Documentación de los filtros de bitstream de FFmpeg
1 Descripción
Este documento describe los filtros de bitstream que proporciona la biblioteca libavcodec.
Un filtro de bitstream opera sobre los datos del flujo codificado y realiza modificaciones a nivel de bitstream sin llevar a cabo la decodificación.
2 Filtros de bitstream
Al configurar la compilación de FFmpeg, todos los filtros de bitstream admitidos se habilitan de forma predeterminada. Todos los disponibles se pueden listar con la opción de configure --list-bsfs.
Todos los filtros de bitstream se pueden deshabilitar con la opción de configure --disable-bsfs; cualquier filtro de bitstream se puede habilitar de forma selectiva con la opción --enable-bsf=BSF, o se puede deshabilitar un filtro concreto con la opción --disable-bsf=BSF.
La opción -bsfs de las herramientas ff* muestra la lista de todos los filtros de bitstream admitidos incluidos en la compilación.
Las herramientas ff* disponen de una opción -bsf aplicada por flujo, que toma una lista de filtros separados por comas, cuyos parámetros se indican tras el nombre del filtro precedidos de ’=’.
ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1:opt2=str2][,filter2] OUTPUT
A continuación se describen los filtros de bitstream actualmente disponibles, junto con sus parámetros, si los tienen.
2.1 aac_adtstoasc
Convierte un ADTS AAC de MPEG-2/4 en un bitstream MPEG-4 Audio Specific Configuration.
Este filtro crea un AudioSpecificConfig de MPEG-4 a partir de una cabecera ADTS de MPEG-2/4 y elimina la cabecera ADTS.
Este filtro es necesario, por ejemplo, al copiar un flujo AAC desde un ADTS AAC en bruto o un container MPEG-TS hacia MP4A-LATM, hacia un archivo FLV, o hacia archivos MOV/MP4 y formatos relacionados como 3GP o M4A. Cabe señalar que se inserta automáticamente para MP4A-LATM, MOV/MP4 y formatos relacionados.
2.2 av1_metadata
Modifica los metadatos incrustados en un flujo AV1.
td
Inserta o elimina OBUs delimitadores temporales (temporal delimiter) en todas las unidades temporales del flujo.
‘insert’
Inserta un TD al principio de cada TU que no lo tenga ya.
‘remove’
Elimina el TD del principio de cada TU que lo tenga.
color_primaries transfer_characteristics matrix_coefficients
Define los campos de descripción de color en el flujo (véase la sección 6.4.2 de AV1).
color_range
Define el rango de color en el flujo (véase la sección 6.4.2 de AV1; cabe señalar que esto no se puede establecer en flujos que utilizan primarios BT.709, la característica de transferencia sRGB y coeficientes de matriz identity (RGB)).
‘tv’
Rango limitado.
‘pc’
Rango completo.
chroma_sample_position
Define la posición de muestreo de croma en el flujo (véase la sección 6.4.2 de AV1). Esto solo puede establecerse para flujos 4:2:0.
‘vertical’
Posición izquierda (coincide con el valor predeterminado en MPEG-2 y H.264).
‘colocated’
Posición superior izquierda.
tick_rate
Define la tasa de tick (time_scale / num_units_in_display_tick) en la información de temporización de la cabecera de secuencia.
num_ticks_per_picture
Define el número de ticks por imagen, para indicar que el flujo tiene una velocidad de fotogramas fija. Se ignora si tick_rate no está también definido.
delete_padding
Elimina los OBU de relleno (Padding).
2.3 chomp
Elimina el relleno de ceros al final de un paquete.
2.4 dca_core
Extrae el núcleo de un flujo DCA/DTS, descartando extensiones como DTS-HD.
2.5 dovi_rpu
Manipula los metadatos de Dolby Vision en un bitstream HEVC/AV1, con la posibilidad de habilitar la compresión de metadatos.
strip
Si está habilitado, elimina del flujo todos los metadatos de Dolby Vision (el registro de configuración y los bloques de datos RPU).
compression
Qué nivel de compresión habilitar.
‘none’
Sin compresión de metadatos.
‘limited’
Esquema de compresión de metadatos limitado. Debería ser compatible con la mayoría de los dispositivos. Es el valor predeterminado.
‘extended’
Compresión de metadatos extendida. Los dispositivos no están obligados a admitirla. Cabe señalar que, por el momento, este nivel se comporta igual que ‘limited’ en libavcodec.
2.6 dovi_split
Divide un bitstream HEVC multicapa de Dolby Vision Profile 7. El Profile 7 transporta el bitstream HEVC de la capa de mejora entrelazado dentro de las unidades de acceso de la capa base, envuelto en unidades NAL user-unspecified de tipo 63 (UNSPEC63), y los metadatos RPU como una NAL user-unspecified hermana de tipo 62 (UNSPEC62).
mode
Qué componentes de Dolby Vision conservar en el bitstream de salida.
‘bl’
Solo capa base: descarta todos los UNSPEC63 (EL) y todos los UNSPEC62 (RPU). La salida es un flujo HEVC plano sin marcadores de Dolby Vision. Es el valor predeterminado.
‘bl_rpu’
Capa base conservando la NAL RPU.
‘el’
Solo capa de mejora: para cada NAL UNSPEC63, elimina la cabecera NAL externa de dos bytes y emite la carga útil interna. El resultado es un bitstream HEVC independiente. UNSPEC62 (RPU) se descarta.
‘el_rpu’
Capa de mejora con la NAL RPU conservada tal cual. Igual que ‘el’, pero las NAL RPU UNSPEC62 también se emiten junto con las NAL EL desenvueltas.
2.7 dump_extra
Añade extradata al principio de los paquetes filtrados, salvo cuando dichos paquetes ya comienzan exactamente con el extradata que se pretende añadir.
freq
El argumento adicional especifica qué paquetes se deben filtrar. Acepta los siguientes valores:
‘k’ ‘keyframe’
añade extradata a todos los paquetes clave
‘e’ ‘all’
añade extradata a todos los paquetes
Si no se especifica, se asume ‘k’.
Por ejemplo, el siguiente comando ffmpeg fuerza una cabecera global (deshabilitando así las cabeceras individuales de cada paquete) en los paquetes H.264 generados por el encoder libx264, pero los corrige añadiendo a los paquetes clave la cabecera almacenada en extradata:
ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts
2.8 dv_error_marker
Los bloques de DV marcados como dañados se sustituyen por bloques del color especificado.
color
El color por el que sustituir los bloques dañados
sta
Una máscara de 16 bits que especifica cuáles de los 16 posibles valores de estado de error se deben sustituir por bloques de color. 0xFFFE es el valor predeterminado, que sustituye todos los valores de estado de error distintos de 0.
‘ok’
Sin error, sin ocultación
‘err’
Error, sin ocultación
‘res’
Reservado
‘notok’
Error u ocultación
‘notres’
No reservado
‘Aa, Ba, Ca, Ab, Bb, Cb, A, B, C, a, b, erri, erru’
El código de estado de error específico
véanse las páginas 44-46 o la sección 5.5 de http://web.archive.org/web/20060927044735/http://www.smpte.org/smpte_store/standards/pdf/s314m.pdf
2.9 eac3_core
Extrae el núcleo de un flujo E-AC-3, descartando los canales adicionales.
2.10 eia608_to_smpte436m
Convierte un flujo EIA_608 en un flujo de datos SMPTE_436M_ANC, envolviendo los subtítulos ocultos (closed captions) en paquetes VANC CDP CTA-708.
line_number
Elige en qué número de línea deben ir los paquetes VANC generados. Por lo general interesa la línea 9 (el valor predeterminado) o la 11.
wrapping_type
Elige el tipo de envoltura SMPTE 436M; el valor predeterminado es ‘vanc_frame’. Acepta los siguientes valores:
‘vanc_frame’
Fotograma VANC (fotograma entrelazado o progresivo segmentado)
‘vanc_field_1’ ‘vanc_field_2’ ‘vanc_progressive_frame’ sample_coding
Elige la codificación de muestra SMPTE 436M; el valor predeterminado es ‘8bit_luma’. Acepta los siguientes valores:
‘8bit_luma’
muestras de luma de componente de 8 bits
‘8bit_color_diff’
muestras de diferencia de color de componente de 8 bits
‘8bit_luma_and_color_diff’
muestras de luma y de diferencia de color de componente de 8 bits
‘10bit_luma’
muestras de luma de componente de 10 bits
‘10bit_color_diff’
muestras de diferencia de color de componente de 10 bits
‘10bit_luma_and_color_diff’
muestras de luma y de diferencia de color de componente de 10 bits
‘8bit_luma_parity_error’
muestras de luma de componente de 8 bits con error de paridad
‘8bit_color_diff_parity_error’
muestras de diferencia de color de componente de 8 bits con error de paridad
‘8bit_luma_and_color_diff_parity_error’
muestras de luma y de diferencia de color de componente de 8 bits con error de paridad
initial_cdp_sequence_cntr
El valor inicial de los campos enteros sin signo de 16 bits cdp_hdr_sequence_cntr y cdp_ftr_sequence_cntr del CDP. El valor predeterminado es 0.
cdp_frame_rate
Define el campo cdp_frame_rate del CDP. Esto no cambia realmente la temporización del flujo de datos; solo cambia los valores insertados en ese campo en los paquetes CDP generados. El valor predeterminado es ‘30000/1001’.
2.11 extract_extradata
Extrae el extradata in-band.
Ciertos codecs permiten transmitir las cabeceras de larga duración (por ejemplo, las cabeceras de secuencia de MPEG-2, o los (VPS/)SPS/PPS de H.264/HEVC) tanto "in-band" (es decir, como parte del bitstream que contiene los fotogramas codificados) como "out of band" (por ejemplo, a nivel de container). Esta segunda forma se denomina "extradata" en la terminología de FFmpeg.
Este filtro de bitstream detecta las cabeceras in-band y las pone a disposición como extradata.
remove
Cuando esta opción está habilitada, las cabeceras de larga duración se eliminan del bitstream tras la extracción.
2.12 filter_units
Elimina del flujo las unidades cuyo tipo esté, o no esté, en un conjunto dado.
pass_types
Lista de tipos de unidad, o de rangos de tipos de unidad, que se dejan pasar mientras se eliminan todos los demás. Se especifica como una lista de valores de tipo de unidad, o de rangos separados por ’-’, separados entre sí por ’|’.
remove_types
Idéntico a pass_types, salvo que las unidades del conjunto indicado se eliminan y todas las demás se dejan pasar.
Los tipos usados por pass_types y remove_types corresponden a los tipos de unidad NAL (nal_unit_type) en H.264, HEVC y H.266 (véase la Tabla 7-1 de las especificaciones de H.264 y HEVC, o la Tabla 5 de la especificación de H.266), a los valores de marcador para JPEG (sin el prefijo 0xFF) y, para MPEG-2, a los códigos de inicio sin el prefijo de código de inicio (es decir, el byte que sigue a 0x000001). Para VP8 y VP9, todas las unidades tienen tipo cero.
Esta transformación no modifica el extradata, pero cabe señalar que si el flujo contiene conjuntos de parámetros en línea, la salida puede quedar inutilizable si estos se eliminan.
Por ejemplo, para eliminar todas las unidades NAL no VCL de un flujo H.264:
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=pass_types=1-5' OUTPUT
Para eliminar todos los AUD, SEI y filler de un flujo H.265:
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=35|38-40' OUTPUT
Para eliminar todos los datos de usuario de un flujo MPEG-2, incluidos los subtítulos ocultos (Closed Captions):
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=178' OUTPUT
Para eliminar todos los SEI de un flujo H264, incluidos los subtítulos ocultos:
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=6' OUTPUT
Para eliminar todos los SEI de prefijo y sufijo de un flujo HEVC, incluidos los subtítulos ocultos y el HDR dinámico:
ffmpeg -i INPUT -c:v copy -bsf:v 'filter_units=remove_types=39|40' OUTPUT
2.13 hapqa_extract
Extrae la parte Rgb o Alpha de un archivo HAPQA, sin recompresión, para crear un archivo HAPQ o HAPAlphaOnly.
texture
Especifica la textura que se debe conservar.
color alpha
Convierte HAPQA a 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
Convierte HAPQA a 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 los metadatos incrustados en un flujo H.264.
aud
Inserta o elimina unidades NAL AUD en todas las unidades de acceso del flujo.
‘pass’ ‘insert’ ‘remove’
El valor predeterminado es pass.
sample_aspect_ratio
Define la relación de aspecto de muestra del flujo en los parámetros VUI. Véase la tabla E-1 de H.264.
overscan_appropriate_flag
Define si el flujo es apto o no para su visualización con overscan (véase la sección E.2.1 de H.264).
video_format video_full_range_flag
Define el formato de vídeo en el flujo (véase la sección E.2.1 de H.264 y la tabla E-2).
colour_primaries transfer_characteristics matrix_coefficients
Define la descripción de color en el flujo (véase la sección E.2.1 de H.264 y las tablas E-3, E-4 y E-5).
chroma_sample_loc_type
Define la posición de muestreo de croma en el flujo (véase la sección E.2.1 de H.264 y la figura E-1).
tick_rate
Define la tasa de tick (time_scale / num_units_in_tick) en los parámetros VUI. Es la unidad de tiempo más pequeña representable en el flujo, y en muchos casos representa la tasa de campo del flujo (el doble de la velocidad de fotogramas).
fixed_frame_rate_flag
Define si el flujo tiene una velocidad de fotogramas fija; normalmente esto indica que la velocidad de fotogramas es exactamente la mitad de la tasa de tick, pero el significado exacto depende del entrelazado y de la estructura de imagen (véase la sección E.2.1 de H.264 y la tabla E-6).
zero_new_constraint_set_flags
Pone a cero constraint_set4_flag y constraint_set5_flag en el SPS. Estos bits estaban reservados en una versión anterior de la especificación de H.264, por lo que algunos decoders por hardware requieren que sean cero. El resultado de ponerlos a cero sigue siendo un bitstream válido.
crop_left crop_right crop_top crop_bottom
Define los desplazamientos de recorte de fotograma en el SPS. Estos valores sustituyen a los actuales si el flujo ya está recortado.
Estos campos se expresan en píxeles. Cabe señalar que algunos tamaños pueden no ser representables si el croma está submuestreado o el flujo está entrelazado (véase la sección 7.4.2.1.1 de H.264).
sei_user_data
Inserta una cadena como datos de usuario no registrados SEI. El argumento debe tener la forma UUID+string, donde el UUID son dígitos hexadecimales posiblemente separados por guiones, y la cadena puede ser cualquier cosa.
Por ejemplo, ‘086f3693-b7b3-4f2c-9653-21492feee5b8+hello’ insertará la cadena “hello” asociada al UUID indicado.
delete_filler
Elimina tanto las unidades NAL de relleno como los mensajes SEI de relleno.
display_orientation
Inserta, extrae o elimina mensajes SEI de orientación de pantalla (Display orientation). Véanse las secciones D.1.27 y D.2.27 de H.264 para la sintaxis y la semántica.
‘pass’ ‘insert’ ‘remove’ ‘extract’
El valor predeterminado es pass.
El modo insert funciona junto con las opciones rotate y flip. Cualquier mensaje de orientación de pantalla preexistente se eliminará en los modos insert o remove. El modo extract añade la matriz de visualización al paquete como side data.
rotate
Define la rotación en el SEI de orientación de pantalla (ángulo antihorario en grados). El rango va de -360 a +360. El valor predeterminado es NaN.
flip
Define el volteo (flip) en el SEI de orientación de pantalla.
‘horizontal’ ‘vertical’
El valor predeterminado es no definido.
level
Define el nivel en el SPS. Véanse la sección A.3 y las tablas A-1 a A-5 de H.264.
El argumento debe ser el nombre de un nivel (por ejemplo, ‘4.2’), un valor de level_idc (por ejemplo, ‘42’), o el nombre especial ‘auto’, que indica que el filtro debe intentar deducir el nivel a partir de las propiedades del flujo de entrada.
2.15 h264_mp4toannexb
Convierte un bitstream H.264 del modo con prefijo de longitud al modo con prefijo de código de inicio (tal como se define en el Anexo B de la especificación ITU-T H.264).
Esto lo requieren algunos formatos de streaming, típicamente el formato de transport stream de MPEG-2 (muxer mpegts).
Por ejemplo, para remultiplexar con ffmpeg un archivo MP4 que contiene un flujo H.264 al formato mpegts, se puede usar el siguiente comando:
ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts
Cabe señalar que este filtro se inserta automáticamente para los formatos de salida MPEG-TS (muxer mpegts) y H.264 en bruto (muxer h264).
2.16 h264_redundant_pps
Esto aplica una corrección específica a algunos flujos H264 BDMV de Blu-ray que contienen PPS redundantes. Estos PPS modifican parámetros irrelevantes del flujo, lo que confunde a otras transformaciones que requieren el extradata correcto.
El encoder usado en estos flujos afectados añade PPS adicionales a lo largo del flujo, variando el QP inicial y si la predicción ponderada estaba habilitada. Esto causa problemas al copiar el flujo en un container con cabecera global, ya que el PPS inicial no es adecuado para el resto del flujo. Un efecto secundario, por ejemplo, es que al buscar (seek) se obtiene una salida corrupta hasta que aparece un nuevo PPS.
Este BSF elimina los PPS adicionales y reescribe las cabeceras de slice de modo que el flujo use un único PPS inicial en la cabecera global, lo que resuelve el problema.
2.17 hevc_metadata
Modifica los metadatos incrustados en un flujo HEVC.
aud
Inserta o elimina unidades NAL AUD en todas las unidades de acceso del flujo.
‘insert’ ‘remove’ sample_aspect_ratio
Define la relación de aspecto de muestra del flujo en los parámetros VUI.
video_format video_full_range_flag
Define el formato de vídeo en el flujo (véase la sección E.3.1 de H.265 y la tabla E.2).
colour_primaries transfer_characteristics matrix_coefficients
Define la descripción de color en el flujo (véase la sección E.3.1 de H.265 y las tablas E.3, E.4 y E.5).
chroma_sample_loc_type
Define la posición de muestreo de croma en el flujo (véase la sección E.3.1 de H.265 y la figura E.1).
tick_rate
Define la tasa de tick en los parámetros del VPS y del VUI (time_scale / num_units_in_tick). Combinada con num_ticks_poc_diff_one, permite establecer una velocidad de fotogramas constante en el flujo. Cabe señalar que es probable que los parámetros del container la sobrescriban cuando el flujo está dentro de un container.
num_ticks_poc_diff_one
Define poc_proportional_to_timing_flag en el VPS y el VUI, y usa este valor para definir num_ticks_poc_diff_one_minus1 (véanse las secciones 7.4.3.1 y E.3.1 de H.265). Se ignora si tick_rate no está también definido.
crop_left crop_right crop_top crop_bottom
Define los desplazamientos de recorte de la ventana de conformidad en el SPS. Estos valores sustituyen a los actuales si el flujo ya está recortado.
Estos campos se expresan en píxeles. Cabe señalar que algunos tamaños pueden no ser representables si el croma está submuestreado (sección 7.4.3.2.1 de H.265).
width height
Define el ancho y el alto tras el recorte.
level
Define el nivel en el VPS y el SPS. Véanse la sección A.4 y las tablas A.6 y A.7 de H.265.
El argumento debe ser el nombre de un nivel (por ejemplo, ‘5.1’), un valor de general_level_idc (por ejemplo, ‘153’ para el nivel 5.1), o el nombre especial ‘auto’, que indica que el filtro debe intentar deducir el nivel a partir de las propiedades del flujo de entrada.
2.18 hevc_mp4toannexb
Convierte un bitstream HEVC/H.265 del modo con prefijo de longitud al modo con prefijo de código de inicio (tal como se define en el Anexo B de la especificación ITU-T H.265).
Esto lo requieren algunos formatos de streaming, típicamente el formato de transport stream de MPEG-2 (muxer mpegts).
Por ejemplo, para remultiplexar con ffmpeg un archivo MP4 que contiene un flujo HEVC al formato mpegts, se puede usar el siguiente comando:
ffmpeg -i INPUT.mp4 -codec copy -bsf:v hevc_mp4toannexb OUTPUT.ts
Cabe señalar que este filtro se inserta automáticamente para los formatos de salida MPEG-TS (muxer mpegts) y HEVC/H.265 en bruto (muxer h265 o hevc).
2.19 imxdump
Modifica el bitstream para que encaje en MOV y sea utilizable por el decoder de Final Cut Pro. Este filtro solo se aplica al codec mpeg2video, y probablemente no sea necesario en Final Cut Pro 7 y versiones posteriores si se usa el -tag:v adecuado.
Por ejemplo, para remultiplexar IMX NTSC de 30 MB/s a MOV:
ffmpeg -i input.mxf -c copy -bsf:v imxdump -tag:v mx3n output.mov
2.20 mjpeg2jpeg
Convierte paquetes MJPEG/AVI1 en paquetes JPEG/JFIF completos.
MJPEG es un codec de vídeo en el que cada fotograma de vídeo es esencialmente una imagen JPEG. Los fotogramas individuales se pueden extraer sin pérdida, por ejemplo con
ffmpeg -i ../some_mjpeg.avi -c:v copy frames_%d.jpg
Por desgracia, estos fragmentos son imágenes JPEG incompletas, porque carecen del segmento DHT necesario para la decodificación. Cita de http://www.digitalpreservation.gov/formats/fdd/fdd000063.shtml:
Avery Lee, escribiendo en el grupo de noticias rec.video.desktop en 2001, comentó que "MJPEG, o al menos el MJPEG de los AVI con el fourcc MJPG, es un JPEG restringido con una tabla de Huffman fija, y omitida. El JPEG debe estar en espacio de color YCbCr, debe ser 4:2:2, y debe usar codificación Huffman básica, no aritmética ni progresiva. [...] En efecto, se pueden extraer los fotogramas MJPEG y decodificarlos con un decoder JPEG normal, pero hay que anteponerles el segmento DHT, o el decoder no tendrá forma de saber cómo descomprimir los datos. La tabla exacta necesaria se da en la especificación OpenDML."
Este filtro de bitstream parchea la cabecera de los fotogramas extraídos de un flujo MJPEG (que llevan el ID de cabecera AVI1 y carecen de segmento DHT) para producir imágenes 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
Añade una cabecera MJPEG A al bitstream, para permitir su decodificación por Quicktime.
2.22 mov2textsub
Extrae un archivo de texto representable a partir de subtítulos MOV, eliminando la cabecera de metadatos de cada paquete de subtítulos.
Véase también el filtro text2movsub.
2.23 mpeg2_metadata
Modifica los metadatos incrustados en un flujo MPEG-2.
display_aspect_ratio
Define la relación de aspecto de visualización en el flujo.
Se admiten los siguientes valores fijos:
4/3 16/9 221/100
Cualquier otro valor hará que se señalicen píxeles cuadrados en su lugar (véase la sección 6.3.3 de H.262 y la tabla 6-3).
frame_rate
Define la velocidad de fotogramas en el flujo. Se construye a partir de una tabla de valores conocidos combinados con un pequeño multiplicador y divisor; si el valor indicado no es exactamente representable, se usará en su lugar el valor representable más cercano (véase la sección 6.3.3 de H.262 y la tabla 6-4).
video_format
Define el formato de vídeo en el flujo (véase la sección 6.3.6 de H.262 y la tabla 6-6).
colour_primaries transfer_characteristics matrix_coefficients
Define la descripción de color en el flujo (véase la sección 6.3.6 de H.262 y las tablas 6-7, 6-8 y 6-9).
2.24 mpeg4_unpack_bframes
Desempaqueta los fotogramas B empaquetados al estilo DivX.
Los fotogramas B empaquetados al estilo DivX no son MPEG-4 válido y solo eran una solución alternativa para el defectuoso subsistema Video for Windows. Ocupan más espacio, pueden causar pequeños problemas de sincronización AV, requieren más potencia de CPU para decodificar (a menos que el reproductor disponga de alguna cola de imágenes decodificadas que compense el patrón de fotogramas 2,0,2,0 por paquete) y causan problemas si se copian en un container estándar como mp4 o mpeg-ps/ts, porque los decoders de MPEG-4 pueden no ser capaces de decodificarlos, ya que no son MPEG-4 válido.
Por ejemplo, para corregir con ffmpeg un archivo AVI que contiene un flujo MPEG-4 con fotogramas B empaquetados al estilo DivX, se puede usar el siguiente comando:
ffmpeg -i INPUT.avi -codec copy -bsf:v mpeg4_unpack_bframes OUTPUT.avi
2.25 noise
Daña el contenido de los paquetes, o simplemente los descarta, sin dañar el container. Se puede usar para fuzzing o para probar la resiliencia/ocultación de errores.
Parámetros:
amount
Acepta una expresión cuya evaluación por paquete determina con qué frecuencia se modificarán los bytes de ese paquete. Un valor inferior a 0 dará lugar a una frecuencia variable. El valor predeterminado es 0, lo que implica que no hay modificación. Sin embargo, si no se especifican ni amount ni drop, amount se fijará en -1. Véanse más abajo las variables aceptadas.
drop
Acepta una expresión evaluada por paquete cuyo valor determina si ese paquete se descarta. Si se evalúa a un valor positivo, el paquete se descarta. Si se evalúa a un valor negativo, da lugar a una probabilidad variable de descarte, aproximadamente inversa a la magnitud del valor. El valor predeterminado es 0, lo que implica que no hay descartes. Véanse más abajo las variables aceptadas.
dropamount
Acepta un entero no negativo, que asigna una probabilidad variable de descarte, aproximadamente inversa al valor. El valor predeterminado es 0, lo que implica que no hay descartes. Esta opción se conserva por compatibilidad con versiones anteriores y equivale a fijar drop en un valor negativo de la misma magnitud, es decir, dropamount=4 es lo mismo que drop=-4. Se ignora si drop también está especificado.
Tanto amount como drop aceptan expresiones que contengan las siguientes variables:
‘n’
El índice del paquete, empezando desde cero.
‘tb’
La timebase de las marcas de tiempo de los paquetes.
‘pts’
Marca de tiempo de presentación del paquete (presentation timestamp).
‘dts’
Marca de tiempo de decodificación del paquete (decoding timestamp).
‘nopts’
Constante que representa AV_NOPTS_VALUE.
‘startpts’
Primer PTS distinto de AV_NOPTS_VALUE visto en el flujo.
‘startdts’
Primer DTS distinto de AV_NOPTS_VALUE visto en el flujo.
‘duration’ ‘d’
Duración del paquete, en unidades de timebase.
‘pos’
Posición del paquete en la entrada; puede ser -1 cuando es desconocida o no está definida.
‘size’
Tamaño del paquete, en bytes.
‘key’
Si el paquete está marcado como keyframe.
‘state’
Un entero pseudoaleatorio, derivado principalmente del contenido de la carga útil del paquete.
2.25.1 Ejemplos
Aplica la modificación a todos los bytes, pero sin descartar ningún paquete.
ffmpeg -i INPUT -c copy -bsf noise=1 output.mkv
Descarta todos los paquetes de vídeo no marcados como keyframe a partir del segundo 30, sin modificar el resto de los paquetes.
ffmpeg -i INPUT -c copy -bsf:v noise=drop='gt(pts*tb\,30)*not(key)' output.mkv
Descarta un segundo de audio cada 10 segundos y añade algo de ruido aleatorio al resto.
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 deja pasar los paquetes sin cambios.
2.27 pcm_rechunk
Reempaqueta el audio PCM a un número fijo de muestras por paquete o a una tasa fija de paquetes por segundo. Es similar al filtro de audio (ffmpeg-filters)asetnsamples, pero opera sobre paquetes de audio en lugar de fotogramas de audio.
nb_out_samples, n
Define el número de muestras por cada paquete de audio de salida. El número se entiende como muestras por cada canal. El valor predeterminado es 1024.
pad, p
Si se fija en 1, el filtro rellenará el último paquete de audio con silencio, de modo que contenga el mismo número de muestras (o aproximadamente el mismo, véase frame_rate) que los anteriores. El valor predeterminado es 1.
frame_rate, r
Esta opción hace que el filtro genere un número fijo de paquetes por segundo en lugar de un número fijo de muestras por paquete. Si la frecuencia de muestreo del audio no es divisible por la velocidad de fotogramas, el número de muestras no será constante, sino que variará ligeramente para que cada paquete empiece lo más cerca posible del límite de fotograma. Usar esta opción tiene prioridad sobre nb_out_samples.
El patrón 1602-1601-1602-1601-1602, bien conocido para audio de 48 kHz con la velocidad de fotogramas NTSC, se puede generar usando la opción 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
Fusiona en un único paquete una secuencia de segmentos de subtítulos PGS que termina con un segmento "end of display set".
Esto lo requieren algunos containers que admiten subtítulos PGS (muxer matroska).
2.29 prores_metadata
Modifica los metadatos de propiedades de color incrustados en un flujo prores.
color_primaries
Define los primarios de color. Los valores disponibles son:
‘auto’
Conserva la misma propiedad de primarios de color (valor predeterminado).
‘unknown’ ‘bt709’ ‘bt470bg’
BT601 625
‘smpte170m’
BT601 525
‘bt2020’ ‘smpte431’
DCI P3
‘smpte432’
P3 D65
transfer_characteristics
Define la transferencia de color. Los valores disponibles son:
‘auto’
Conserva la misma propiedad de características de transferencia (valor predeterminado).
‘unknown’ ‘bt709’
BT 601, BT 709, BT 2020
‘smpte2084’
SMPTE ST 2084
‘arib-std-b67’
ARIB STD-B67
matrix_coefficients
Define el coeficiente de matriz. Los valores disponibles son:
‘auto’
Conserva la misma propiedad de espacio de color (valor predeterminado).
‘unknown’ ‘bt709’ ‘smpte170m’
BT 601
‘bt2020nc’
Define el espacio de color Rec709 para cada fotograma del archivo
ffmpeg -i INPUT -c copy -bsf:v prores_metadata=color_primaries=bt709:color_trc=bt709:colorspace=bt709 output.mov
Define los parámetros Hybrid Log-Gamma para cada fotograma del archivo
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
Elimina el extradata de los paquetes.
Acepta el siguiente parámetro:
freq
Define de qué tipos de fotograma se elimina el extradata.
‘k’
Elimina el extradata solo de los fotogramas que no son keyframe.
‘keyframe’
Elimina el extradata solo de los keyframes.
‘e, all’
Elimina el extradata de todos los fotogramas.
2.31 setts
Define el PTS y el DTS en los paquetes.
Acepta los siguientes parámetros:
ts pts dts
Define expresiones para el PTS, el DTS o ambos.
duration
Define la expresión para la duración.
time_base
Define la timebase de salida.
prescale
Define si los campos de tiempo se convierten a la timebase de salida establecida por el usuario antes de evaluar las expresiones. El valor predeterminado es 0.
Las expresiones se evalúan mediante la API eval y pueden contener las siguientes constantes:
N
El contador del paquete de entrada. Empieza en 0.
TS
La marca de tiempo de demultiplexación de la entrada en el caso de las opciones ts o dts, o la marca de tiempo de presentación en el caso de la opción pts.
POS
La posición original del paquete en el archivo, o undefined si no está definida para el paquete actual
DTS
La marca de tiempo de demultiplexación de la entrada.
PTS
La marca de tiempo de presentación de la entrada.
DURATION
La duración de la entrada.
STARTDTS
El DTS del primer paquete.
STARTPTS
El PTS del primer paquete.
PREV_INDTS
El DTS de entrada anterior.
PREV_INPTS
El PTS de entrada anterior.
PREV_INDURATION
La duración de entrada anterior.
PREV_OUTDTS
El DTS de salida anterior.
PREV_OUTPTS
El PTS de salida anterior.
PREV_OUTDURATION
La duración de salida anterior.
NEXT_DTS
El DTS de entrada siguiente.
NEXT_PTS
El PTS de entrada siguiente.
NEXT_DURATION
La duración de entrada siguiente.
TB
La timebase en la que se expresan los campos de tiempo. La timebase de salida establecida por el usuario si prescale está habilitado; en caso contrario, la timebase de entrada.
TB_OUT
La timebase de salida.
SR
La frecuencia de muestreo del flujo al que pertenece el paquete.
NOPTS
La constante AV_NOPTS_VALUE.
Por ejemplo, para igualar el PTS al DTS (no recomendado si hay fotogramas B implicados):
ffmpeg -i INPUT -c:a copy -bsf:a setts=pts=DTS out.mkv
2.32 showinfo
Registra información básica de los paquetes. Útil principalmente para pruebas, depuración y desarrollo.
2.33 smpte436m_to_eia608
Convierte un flujo de datos SMPTE_436M_ANC en un flujo EIA_608, extrayendo los subtítulos ocultos de los paquetes VANC CDP CTA-708 e ignorando el resto de los datos.
2.34 text2movsub
Convierte subtítulos de texto en subtítulos MOV (como los que usa el codec mov_text) con cabeceras de metadatos.
Véase también el filtro mov2textsub.
2.35 trace_headers
Registra una salida de traza con todos los elementos sintácticos de las cabeceras del flujo codificado (todo lo que está por encima del nivel de los bloques codificados individuales). Puede ser útil para depurar problemas de bajo nivel del flujo.
Admite AV1, H.264, H.265, (M)JPEG, MPEG-2 y VP9, aunque, según la compilación, puede que solo esté disponible un subconjunto de ellos.
2.36 truehd_core
Extrae el núcleo de un flujo TrueHD, descartando los datos ATMOS.
2.37 vp9_metadata
Modifica los metadatos incrustados en un flujo VP9.
color_space
Define el valor del espacio de color en la cabecera de fotograma. Cabe señalar que cualquier fotograma definido como RGB pasará implícitamente a rango PC, y que RGB es incompatible con los profiles 0 y 2.
‘unknown’ ‘bt601’ ‘bt709’ ‘smpte170’ ‘smpte240’ ‘bt2020’ ‘rgb’ color_range
Define el valor del rango de color en la cabecera de fotograma. Cabe señalar que cualquier valor impuesto por el espacio de color tendrá prioridad sobre este valor.
‘tv’ ‘pc’
2.38 vp9_superframe
Vuelve a fusionar los fotogramas invisibles (alt-ref) de VP9 en superframes de VP9. Esto corrige la fusión de flujos VP9 divididos o segmentados en los que el fotograma alt-ref se separó de su contraparte visible.
2.39 vp9_superframe_split
Divide los superframes de VP9 en fotogramas individuales.
2.40 vp9_raw_reorder
Dado un flujo VP9 con marcas de tiempo correctas pero posiblemente desordenado, inserta paquetes show-existing-frame adicionales para corregir el orden.
3 Véase también
ffmpeg, ffplay, ffprobe, libavcodec
4 Autores
Los desarrolladores de FFmpeg.
Para más información sobre la autoría, consulte el historial de Git del proyecto (https://git.ffmpeg.org/ffmpeg); por ejemplo, ejecutando el comando git log en el directorio de fuentes de FFmpeg, o consultando el repositorio en línea en https://git.ffmpeg.org/ffmpeg.
Los mantenedores de los distintos componentes figuran en el archivo MAINTAINERS del árbol de código fuente.
Alojamiento proporcionado por telepoint.bg