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:
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:
- OpenH264EncoderSettings (Predeterminado, CPU)
- AMFH264EncoderSettings (AMD)
- NVENCH264EncoderSettings (NVIDIA)
- QSVH264EncoderSettings (Intel Quick Sync)
- MFHEVCEncoderSettings (Solo Windows)
- AMFH265EncoderSettings (AMD)
- NVENCHEVCEncoderSettings (NVIDIA)
- QSVHEVCEncoderSettings (Intel Quick Sync)
Puede verificar la disponibilidad de codificadores específicos usando el método IsAvailable:
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:
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:
Establecer el formato de salida para la instancia del núcleo Video Edit SDK:
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¶
-
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.
-
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¶
-
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.
-
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.
-
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.