Saltar a contenido

Salida de archivo MP4

Video Capture SDK .Net Video Edit SDK .Net Media Blocks SDK .Net

MP4 (MPEG-4 Part 14), introducido en 2001, es un formato de contenedor multimedia digital más comúnmente usado para almacenar video y audio. También soporta subtítulos e imágenes. MP4 es conocido por su alta compresión y compatibilidad entre varios dispositivos y plataformas, haciéndolo una opción popular para streaming y compartir.

Capturar videos desde una webcam y guardarlos en un archivo es un requisito común en muchas aplicaciones. Una forma de lograr esto es usando un kit de desarrollo de software (SDK) como VisioForge Video Capture SDK .Net, que proporciona una API fácil de usar para capturar y procesar videos en C#.

Para capturar video en formato MP4 usando Video Capture SDK, necesita configurar el formato de salida de video usando una de las clases para salida MP4. Puede usar varios codificadores de video de software y hardware disponibles, incluyendo Intel QuickSync, Nvidia NVENC y AMD/ATI APU.

Salida MP4 multiplataforma

VideoCaptureCoreX VideoEditCoreX MediaBlocksPipeline

La clase MP4Output proporciona una forma flexible y potente de configurar ajustes de salida de video MP4 para operaciones de captura y edición de video. Esta guía le llevará a través de cómo usar la clase MP4Output efectivamente, cubriendo sus características principales y patrones de uso comunes.

MP4Output implementa varias interfaces importantes:

  • IVideoEditXBaseOutput
  • IVideoCaptureXBaseOutput
  • Creación de Media Block

Esto lo hace adecuado tanto para escenarios de edición como de captura de video mientras proporciona control extenso sobre el procesamiento de video y audio.

Uso básico

La forma más simple de crear una instancia MP4Output es usando el constructor con un nombre de archivo:

var output = new MP4Output("output.mp4");

Esto crea un MP4Output con configuración predeterminada de codificador de video y audio. En Windows, usará OpenH264 para codificación de video y Media Foundation AAC para codificación de audio por defecto.

Configuración del codificador de video

La clase MP4Output soporta múltiples codificadores de video a través de su propiedad Video. Aquí están los codificadores de video soportados:

Codificadores H.264

  • OpenH264EncoderSettings (Predeterminado, CPU)
  • AMFH264EncoderSettings (AMD)
  • NVENCH264EncoderSettings (NVIDIA)
  • QSVH264EncoderSettings (Intel Quick Sync)

Codificadores HEVC (H.265)

  • MFHEVCEncoderSettings (Solo Windows)
  • AMFH265EncoderSettings (AMD)
  • NVENCHEVCEncoderSettings (NVIDIA)
  • QSVHEVCEncoderSettings (Intel Quick Sync)

Puede verificar la disponibilidad de codificadores específicos usando el método IsAvailable:

if (NVENCH264EncoderSettings.IsAvailable())
{
    output.Video = new NVENCH264EncoderSettings();
}

Ejemplo de configuración de un codificador de video específico:

var output = new MP4Output("output.mp4");
output.Video = new NVENCH264EncoderSettings(); // Usar codificador NVIDIA

Configuración del codificador de audio

La propiedad Audio le permite especificar el codificador de audio. Los codificadores de audio soportados incluyen:

Ejemplo de configuración de un codificador de audio personalizado:

var output = new MP4Output("output.mp4");
output.Audio = new MP3EncoderSettings();

La clase MP4Output selecciona automáticamente codificadores predeterminados apropiados basándose en la plataforma.

Código de ejemplo

Agregar la salida MP4 a la instancia del núcleo Video Capture SDK:

var core = new VideoCaptureCoreX();
core.Outputs_Add(output, true);

Establecer el formato de salida para la instancia del núcleo Video Edit SDK:

var core = new VideoEditCoreX();
core.Output_Format = output;

Crear una instancia de salida MP4 de Media Blocks:

var aac = new VOAACEncoderSettings();
var h264 = new OpenH264EncoderSettings();
var mp4SinkSettings = new MP4SinkSettings("output.mp4");
var mp4Output = new MP4OutputBlock(mp4SinkSettings, h264, aac);

Mejores prácticas

Aceleración de hardware: Cuando sea posible, use codificadores acelerados por hardware (NVENC, AMF, QSV) para mejor rendimiento:

var output = new MP4Output("output.mp4");
if (NVENCH264EncoderSettings.IsAvailable())
{
    output.Video = new NVENCH264EncoderSettings();
}

Selección de codificador: Use los métodos proporcionados para enumerar codificadores disponibles:

var output = new MP4Output("output.mp4");
var availableVideoEncoders = output.GetVideoEncoders();
var availableAudioEncoders = output.GetAudioEncoders();

Problemas comunes y soluciones

  1. Acceso a archivos: El constructor de MP4Output intenta verificar el acceso de escritura creando e inmediatamente eliminando un archivo de prueba. Asegúrese de que la aplicación tenga permisos apropiados al directorio de salida.

  2. Disponibilidad del codificador: Los codificadores de hardware pueden no estar disponibles en todos los sistemas. Siempre proporcione un respaldo:

var output = new MP4Output("output.mp4");
if (!NVENCH264EncoderSettings.IsAvailable())
{
    output.Video = new OpenH264EncoderSettings(); // Recurrir al codificador de software
}

Salida MP4 solo Windows

VideoCaptureCore VideoEditCore

Clase MP4Output

La clase MP4Output es la clase principal para configurar la salida MP4.

Propiedades

Video

Establezca el codificador de video a usar para el archivo MP4 de salida.

Codificadores de video disponibles:

  • H264 MF
  • H264 SW Nvidia
  • H264 SW AMD/ATI
  • H264 QSV
  • H264 NVENC
  • H264 AMF
  • H265 SW
  • H265 QSV
  • H265 NVENC
  • H265 AMF
  • Apple ProRes (solo macOS)

Audio

Establezca el codificador de audio a usar para el archivo MP4 de salida. AAC es el formato recomendado.

Codificadores de audio disponibles:

  • MF AAC
  • voaacenc
  • fdkaac enc

Código de ejemplo

Usando Video Capture SDK para capturar video en formato MP4:

// Crear una instancia del núcleo Video Capture SDK
var core = new VideoCaptureCore();
core.Mode = VideoCaptureMode.VideoCapture;
core.Output_Filename = "output.mp4";

// Crear una salida MP4
var mp4Output = new MP4Output();

// Seleccionar codificador H264
mp4Output.Video.Encoder = MP4VideoEncoder.H264_QSV; // Usar codificador Intel QSV

// Establecer tasa de bits de video
mp4Output.Video.Bitrate = 4000; // 4 Mbps

// Establecer codificador de audio
mp4Output.Audio.Encoder = MP4AudioEncoder.AAC_MF;
mp4Output.Audio.Bitrate = 192; // 192 Kbps

// Establecer el formato de salida
core.Output_Format = mp4Output;

// Iniciar la captura
await core.StartAsync();

// Detener después de 10 segundos
await Task.Delay(10000);

// Detener la captura
await core.StopAsync();

Usando Video Edit SDK para convertir video a formato MP4:

// Crear una instancia del núcleo Video Edit SDK
var core = new VideoEditCore();

// Agregar el archivo de video fuente
var videoFile = new MediaFileSource(@"c:\samples\video.avi");
core.Input_AddVideoFile(videoFile, null, null);

// Establecer nombre de archivo de salida
core.Output_Filename = "output.mp4";

// Crear salida MP4
var mp4Output = new MP4Output();

// Seleccionar codificador H264
mp4Output.Video.Encoder = MP4VideoEncoder.H264_NVENC; // Usar codificador NVIDIA

// Establecer tasa de bits de video
mp4Output.Video.Bitrate = 5000; // 5 Mbps

// Establecer codificador de audio
mp4Output.Audio.Encoder = MP4AudioEncoder.AAC_MF;
mp4Output.Audio.Bitrate = 256; // 256 Kbps

// Establecer el formato de salida
core.Output_Format = mp4Output;

// Iniciar la edición
await core.StartAsync();

Selección de la tasa de bits correcta

La tasa de bits óptima depende de su resolución y tipo de contenido:

  • 720p (1280x720): 2-4 Mbps para contenido estándar, 4-6 Mbps para contenido de movimiento alto
  • 1080p (1920x1080): 4-8 Mbps para contenido estándar, 8-12 Mbps para contenido de movimiento alto
  • 4K (3840x2160): 15-25 Mbps para contenido estándar, 25-40 Mbps para contenido de movimiento alto

Consideraciones de rendimiento

  1. Codificadores de hardware: Los codificadores de hardware (NVENC, QSV, AMF) son significativamente más rápidos y usan menos recursos de CPU que los codificadores de software.

  2. HEVC vs H.264: HEVC (H.265) proporciona mejor compresión pero requiere más potencia de procesamiento. Use H.264 para compatibilidad más amplia y codificación más rápida.

  3. Tasa de bits variable: Use modos VBR para mejor relación calidad-tamaño, CBR para requisitos de tamaño de archivo predecibles o streaming.