Codificador y salida FLAC¶
Video Capture SDK .Net Video Edit SDK .Net Media Blocks SDK .Net
El codificador FLAC (Free Lossless Audio Codec) proporciona compresión de audio sin pérdida de alta calidad mientras preserva la calidad de audio original.
Salida FLAC multiplataforma¶
VideoCaptureCoreX VideoEditCoreX MediaBlocksPipeline
Características¶
El codificador FLAC soporta una amplia gama de configuraciones de audio:
- Tasas de muestreo desde 1 Hz hasta 655,350 Hz
- Hasta 8 canales de audio (mono a surround 7.1)
- Compresión sin pérdida con configuraciones de calidad ajustables
- Soporte de salida para streaming
- Tamaños de bloque configurables y parámetros de compresión
Configuración de calidad¶
El codificador proporciona un parámetro de calidad que va de 0 a 9:
- 0: Compresión más rápida (menor uso de CPU)
- 1-7: Configuraciones de compresión equilibradas
- 8: Mayor compresión (mayor uso de CPU)
- 9: Compresión extrema (extremadamente intensivo en CPU)
La configuración de calidad predeterminada es 5, que ofrece un buen balance entre ratio de compresión y velocidad de procesamiento.
Configuración básica¶
La clase multiplataforma FLACEncoderSettings ofrece opciones de configuración avanzadas:
// Crear configuración del codificador FLAC con calidad predeterminada
var flacSettings = new FLACEncoderSettings
{
// Nivel de compresión predeterminado
Quality = 5,
// Tamaño de bloque de audio en muestras
BlockSize = 4608,
// Habilitar soporte de streaming
StreamableSubset = true,
// Habilitar procesamiento estéreo
MidSideStereo = true
};
Configuración avanzada de compresión¶
// Crear configuración del codificador FLAC con configuración avanzada
var advancedSettings = new FLACEncoderSettings
{
// Configuración de predicción lineal
// Orden LPC máximo para predicción
MaxLPCOrder = 8,
// Precisión automática para coeficientes
QlpCoeffPrecision = 0,
// Configuración de codificación residual
MinResidualPartitionOrder = 3,
MaxResidualPartitionOrder = 3,
// Configuración de optimización de búsqueda
// Deshabilitar búsqueda costosa de coeficientes
ExhaustiveModelSearch = false,
// Deshabilitar búsqueda de precisión
QlpCoeffPrecSearch = false,
// Deshabilitar búsqueda de código de escape
EscapeCoding = false
};
Código de ejemplo¶
Agregar la salida FLAC a la instancia del núcleo Video Capture SDK:
// Crear una instancia del núcleo Video Capture SDK
var core = new VideoCaptureCoreX();
// Crear una instancia de salida FLAC
var flacOutput = new FLACOutput("output.flac");
// Establecer la calidad del codificador FLAC
flacOutput.Audio.Quality = 5;
// Agregar la salida FLAC
core.Outputs_Add(flacOutput, true);
Establecer el formato de salida para la instancia del núcleo Video Edit SDK:
// Crear una instancia del núcleo Video Edit SDK
var core = new VideoEditCoreX();
// Crear una instancia de salida FLAC
var flacOutput = new FLACOutput("output.flac");
// Establecer la calidad
flacOutput.Audio.Quality = 5;
// Establecer el formato de salida
core.Output_Format = flacOutput;
Crear una instancia de salida FLAC de Media Blocks:
// Crear una instancia de configuración del codificador FLAC
var flacSettings = new FLACEncoderSettings();
// Crear una instancia de salida FLAC
var flacOutput = new FLACOutputBlock("output.flac", flacSettings);
Clase FLACOutput¶
La clase FLACOutput proporciona funcionalidad para configurar la salida FLAC (Free Lossless Audio Codec) en los SDK de VisioForge.
// Crear una nueva instancia de salida FLAC
var flacOutput = new FLACOutput("output.flac");
// Configurar ajustes del codificador FLAC
flacOutput.Audio.CompressionLevel = 5; // Ejemplo de configuración
Filename¶
- Establecer el nombre de archivo de salida durante la inicialización o usando la propiedad
- También se puede acceder/modificar usando los métodos
GetFilename()ySetFilename()
Configuración de audio¶
La propiedad Audio proporciona acceso a configuraciones de codificación específicas de FLAC a través de la clase FLACEncoderSettings:
flacOutput.Audio = new FLACEncoderSettings();
// Configure parámetros de codificación FLAC específicos aquí
Procesamiento de audio personalizado¶
Puede establecer un procesador de audio personalizado usando la propiedad CustomAudioProcessor:
Notas de implementación¶
- La clase implementa múltiples interfaces:
IVideoEditXBaseOutputIVideoCaptureXBaseOutput-
IOutputAudioProcessor -
Solo se soporta codificación de audio FLAC (sin capacidades de codificación de video)
- La configuración predeterminada del codificador FLAC se crea automáticamente durante la inicialización
El SDK Media Blocks contiene un bloque de codificador FLAC dedicado.
Consideraciones de rendimiento¶
Al configurar el codificador FLAC, considere estos factores de rendimiento:
- Configuraciones de calidad más altas (7-9) aumentarán significativamente el uso de CPU
- La opción
ExhaustiveModelSearchpuede impactar grandemente la velocidad de codificación - Tamaños de bloque más grandes pueden mejorar la compresión pero aumentan el uso de memoria
StreamableSubsetdebe permanecer habilitado a menos que tenga requisitos específicos
Compatibilidad¶
El codificador soporta las siguientes configuraciones:
- Canales de audio: 1 a 8 canales
- Tasas de muestreo: 1 Hz a 655,350 Hz
- Tasa de bits: Variable (compresión sin pérdida)
Manejo de errores¶
Siempre verifique la disponibilidad del codificador antes de usar:
if (!FLACEncoderSettings.IsAvailable())
{
// Manejar escenario de codificador no disponible
Console.WriteLine("El codificador FLAC no está disponible en este sistema");
return;
}
Mejores prácticas¶
- Comience con la configuración de calidad predeterminada (5) y ajuste según sus necesidades
- Habilite
MidSideStereopara contenido estéreo para mejorar la compresión - Use
SeekPointspara archivos de audio más largos para habilitar búsqueda rápida - Mantenga
StreamableSubsethabilitado a menos que tenga requisitos específicos - Evite usar
ExhaustiveModelSearcha menos que el ratio de compresión sea crítico
Salida FLAC solo Windows¶
VideoCaptureCore VideoEditCore
La clase FLACOutput proporciona configuraciones solo para Windows para el codificador FLAC. Esta clase implementa tanto las interfaces IVideoEditBaseOutput como IVideoCaptureBaseOutput, haciéndola adecuada tanto para escenarios de edición como de captura de video.
Propiedades¶
Nivel de compresión¶
- Propiedad:
Level - Tipo:
int - Rango: 0-8
- Predeterminado: 5
- Descripción: Controla el nivel de compresión, donde 0 proporciona la compresión más rápida y 8 proporciona la mayor compresión.
Tamaño de bloque¶
- Propiedad:
BlockSize - Tipo:
int - Predeterminado: 4608
- Valores válidos: Para flujos subset, debe ser uno de:
- 192, 256, 512, 576, 1024, 1152, 2048, 2304, 4096, 4608
- 8192, 16384 (solo si la tasa de muestreo > 48kHz)
- Descripción: Especifica el tamaño del bloque en muestras. El codificador usa el mismo tamaño de bloque para todo el flujo.
Orden LPC¶
- Propiedad:
LPCOrder - Tipo:
int - Predeterminado: 8
- Restricciones:
- Debe ser ≤ 32
- Para flujos subset a ≤ 48kHz, debe ser ≤ 12
- Descripción: Especifica el orden máximo de codificación predictiva lineal. Establecer a 0 deshabilita la predicción lineal genérica y usa solo predictores fijos, lo cual es más rápido pero típicamente resulta en archivos 5-10% más grandes.
Opciones de codificación Mid-Side¶
Codificación Mid-Side¶
- Propiedad:
MidSideCoding - Tipo:
bool - Predeterminado:
false - Descripción: Habilita la codificación mid-side para flujos estéreo. Esto típicamente aumenta la compresión en algunos puntos porcentuales al codificar tanto el par estéreo como las versiones mid-side de cada bloque y seleccionar la trama resultante más pequeña.
Codificación Mid-Side adaptativa¶
- Propiedad:
AdaptiveMidSideCoding - Tipo:
bool - Predeterminado:
false - Descripción: Habilita la codificación mid-side adaptativa para flujos estéreo. Esto proporciona codificación más rápida que la codificación mid-side completa pero con compresión ligeramente menor al cambiar adaptativamente entre codificación independiente y mid-side.
Parámetros Rice¶
Rice mínimo¶
- Propiedad:
RiceMin - Tipo:
int - Predeterminado: 3
- Descripción: Establece el orden de partición residual mínimo. Funciona junto con RiceMax para controlar cómo se particiona la señal residual.
Rice máximo¶
- Propiedad:
RiceMax - Tipo:
int - Predeterminado: 3
- Descripción: Establece el orden de partición residual máximo. El residual se particiona en 2^min a 2^max piezas, cada una con su propio parámetro Rice. Las configuraciones óptimas típicamente dependen del tamaño del bloque, con mejores resultados cuando blocksize/(2^n)=128.
Opciones avanzadas¶
Búsqueda exhaustiva de modelo¶
- Propiedad:
ExhaustiveModelSearch - Tipo:
bool - Predeterminado:
false - Descripción: Habilita la búsqueda exhaustiva de modelo para codificación óptima. Cuando está habilitado, el codificador genera subtramas para cada orden y usa la más pequeña, potencialmente mejorando la compresión en ~0.5% a costa de tiempo de codificación significativamente aumentado.
Métodos¶
Constructor¶
Inicializa una nueva instancia con valores predeterminados:
- Level = 5
- RiceMin = 3
- RiceMax = 3
- LPCOrder = 8
- BlockSize = 4608
Serialización¶
Save()¶
Serializa la configuración a una cadena JSON.
Load(string json)¶
Crea una nueva instancia FLACOutput desde una cadena JSON.
Ejemplo de uso¶
var flacSettings = new FLACOutput
{
Level = 8, // Compresión máxima
BlockSize = 4608, // Tamaño de bloque predeterminado
MidSideCoding = true, // Habilitar codificación mid-side para mejor compresión
ExhaustiveModelSearch = true // Habilitar búsqueda exhaustiva para mejor compresión
};
core.Output_Format = flacSettings; // Core es VideoCaptureCore o VideoEditCore
Mejores prácticas¶
Selección de nivel de compresión¶
- Use Level 0-3 para codificación más rápida con compresión moderada
- Use Level 4-6 para compresión/velocidad equilibrada
- Use Level 7-8 para máxima compresión sin importar la velocidad
Consideraciones de tamaño de bloque¶
- Tamaños de bloque más grandes generalmente proporcionan mejor compresión
- Manténgase en valores estándar (4608, 4096, etc.) para máxima compatibilidad
- Considere restricciones de memoria al seleccionar tamaño de bloque
Codificación Mid-Side¶
- Habilite para contenido estéreo cuando la compresión es prioridad
- Use modo adaptativo cuando la velocidad de codificación es importante
- Deshabilite para contenido mono ya que no tiene efecto
Parámetros Rice¶
- Los valores predeterminados (3,3) son adecuados para la mayoría de casos de uso
- Aumente para potencialmente mejor compresión a costa de velocidad de codificación
- Valores más allá de 6 raramente proporcionan beneficios significativos