Aller au contenu

Référence de l'interface de l'encodeur FFMPEG

Vue d'ensemble

L'interface IVFFFMPEGEncoder fournit une configuration complète pour l'encodage vidéo et audio vers divers formats à l'aide de la bibliothèque FFMPEG. Ce puissant encodeur prend en charge plusieurs formats de sortie, dont Flash Video (FLV), MPEG-1, MPEG-2, VCD, SVCD, DVD et MPEG-2 Transport Stream.

L'encodeur utilise une approche de configuration basée sur une structure où tous les paramètres d'encodage sont définis en une seule fois, offrant une interface simple mais complète pour l'encodage vidéo professionnel vers les formats hérités et de streaming.

GUID de l'interface : {17B8FF7D-A67F-45CE-B425-0E4F607D8C60}

CLSID du filtre : {554AB365-B293-4C1D-9245-E8DB01F027F7}

Hérite de : IUnknown

GUID du filtre et de l'interface

// CLSID du filtre encodeur FFMPEG
public static readonly Guid CLSID_FFMPEGEncoder =
    new Guid("554AB365-B293-4C1D-9245-E8DB01F027F7");

// IID de l'interface IVFFFMPEGEncoder
public static readonly Guid IID_IVFFFMPEGEncoder =
    new Guid("17B8FF7D-A67F-45CE-B425-0E4F607D8C60");

Formats de sortie

Énumération VFFFMPEGDLLOutputFormat

/// <summary>
/// Options de format de sortie de l'encodeur FFMPEG.
/// </summary>
public enum VFFFMPEGDLLOutputFormat
{
    /// <summary>
    /// Flash Video (.flv) - format de streaming web
    /// </summary>
    FLV = 0,

    /// <summary>
    /// MPEG-1 (.mpg) - video MPEG-1 standard
    /// </summary>
    MPEG1 = 1,

    /// <summary>
    /// MPEG-1 VCD - format conforme Video CD
    /// Resolution : 352x240 (NTSC) ou 352x288 (PAL)
    /// Debit : 1150 kbps
    /// </summary>
    MPEG1VCD = 2,

    /// <summary>
    /// MPEG-2 (.mpg) - video MPEG-2 standard
    /// </summary>
    MPEG2 = 3,

    /// <summary>
    /// MPEG-2 Transport Stream (.ts) - diffusion et streaming
    /// </summary>
    MPEG2TS = 4,

    /// <summary>
    /// MPEG-2 SVCD - format conforme Super Video CD
    /// Resolution : 480x480 (NTSC) ou 480x576 (PAL)
    /// Debit : 2500 kbps
    /// </summary>
    MPEG2SVCD = 5,

    /// <summary>
    /// MPEG-2 DVD - format conforme DVD-Video
    /// Resolution : 720x480 (NTSC) ou 720x576 (PAL)
    /// Debit : jusqu'a 9800 kbps
    /// </summary>
    MPEG2DVD = 6
}

Standards de systèmes TV

/// <summary>
/// Normes de systeme television pour l'encodage video.
/// </summary>
public enum VFFFMPEGDLLTVSystem
{
    /// <summary>
    /// Pas de systeme TV specifique / detection automatique
    /// </summary>
    None = 0,

    /// <summary>
    /// PAL (Phase Alternating Line)
    /// 25 fps, 576 lignes
    /// Utilise en : Europe, Asie, Australie, Afrique
    /// </summary>
    PAL = 1,

    /// <summary>
    /// NTSC (National Television System Committee)
    /// 29,97 fps, 480 lignes
    /// Utilise en : Amerique du Nord, Japon, Coree du Sud
    /// </summary>
    NTSC = 2,

    /// <summary>
    /// Norme cinema
    /// 24 fps
    /// Utilise pour : cinema, transferts film
    /// </summary>
    Film = 3
}

Structure FFMPEGOutputSettings

/// <summary>
/// Structure de configuration complete pour l'encodeur FFMPEG.
/// Contient tous les parametres audio, video et de format de sortie.
/// </summary>
[StructLayout(LayoutKind.Sequential)]
public struct FFMPEGOutputSettings
{
    /// <summary>
    /// Nom du fichier de sortie avec chemin.
    /// </summary>
    [MarshalAs(UnmanagedType.LPWStr)]
    public string Filename;

    /// <summary>
    /// True si un flux audio est inclus dans la sortie.
    /// </summary>
    [MarshalAs(UnmanagedType.Bool)]
    public bool AudioAvailable;

    /// <summary>
    /// Debit binaire audio en bits par seconde (par exemple 128000 pour 128 kbps).
    /// </summary>
    public int AudioBitrate;

    /// <summary>
    /// Frequence d'echantillonnage audio en Hz (par exemple 44100, 48000).
    /// </summary>
    public int AudioSamplerate;

    /// <summary>
    /// Nombre de canaux audio (1 = mono, 2 = stereo).
    /// </summary>
    public int AudioChannels;

    /// <summary>
    /// Largeur de la trame video en pixels.
    /// </summary>
    public int VideoWidth;

    /// <summary>
    /// Hauteur de la trame video en pixels.
    /// </summary>
    public int VideoHeight;

    /// <summary>
    /// Largeur du rapport d'aspect d'affichage (par exemple 16 pour 16:9).
    /// </summary>
    public int AspectRatioW;

    /// <summary>
    /// Hauteur du rapport d'aspect d'affichage (par exemple 9 pour 16:9).
    /// </summary>
    public int AspectRatioH;

    /// <summary>
    /// Debit binaire video en bits par seconde (par exemple 5000000 pour 5 Mbps).
    /// </summary>
    public int VideoBitrate;

    /// <summary>
    /// Debit video maximal pour l'encodage VBR (bits par seconde).
    /// </summary>
    public int VideoMaxRate;

    /// <summary>
    /// Debit video minimal pour l'encodage VBR (bits par seconde).
    /// </summary>
    public int VideoMinRate;

    /// <summary>
    /// Taille du tampon video en bits (affecte la latence et la fluidite).
    /// </summary>
    public int VideoBufferSize;

    /// <summary>
    /// True pour activer l'encodage entrelace (pour la TV diffusee).
    /// </summary>
    [MarshalAs(UnmanagedType.Bool)]
    public bool Interlace;

    /// <summary>
    /// Taille du GOP (Group of Pictures) - intervalle d'image-cle.
    /// Typique : 12-15 pour MPEG-2, 30-60 pour video web.
    /// </summary>
    public int VideoGopSize;

    /// <summary>
    /// Norme du systeme TV (PAL, NTSC, Film ou None).
    /// </summary>
    [MarshalAs(UnmanagedType.I4)]
    public VFFFMPEGDLLTVSystem TVSystem;

    /// <summary>
    /// Format de sortie (FLV, MPEG-1, MPEG-2, etc.).
    /// </summary>
    [MarshalAs(UnmanagedType.I4)]
    public VFFFMPEGDLLOutputFormat OutputFormat;
}

Définitions de l'interface

Définition C

using System;
using System.Runtime.InteropServices;

namespace VisioForge.DirectShowAPI
{
    /// <summary>
    /// Interface de configuration de l'encodeur FFMPEG.
    /// Fournit un encodage complet vers plusieurs formats via la bibliotheque FFMPEG.
    /// </summary>
    [ComImport]
    [Guid("17B8FF7D-A67F-45CE-B425-0E4F607D8C60")]
    [InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    public interface IVFFFMPEGEncoder
    {
        /// <summary>
        /// Definit la configuration complete de l'encodeur FFMPEG.
        /// Tous les parametres d'encodage doivent etre definis en une fois via cette structure.
        /// </summary>
        /// <param name="settings">Structure complete des parametres de l'encodeur</param>
        [PreserveSig]
        void set_settings([In] FFMPEGOutputSettings settings);
    }
}

Définition C++

#include <unknwn.h>

// {17B8FF7D-A67F-45CE-B425-0E4F607D8C60}
DEFINE_GUID(IID_IVFFFMPEGEncoder,
    0x17b8ff7d, 0xa67f, 0x45ce, 0xb4, 0x25, 0xe, 0x4f, 0x60, 0x7d, 0x8c, 0x60);

// {554AB365-B293-4C1D-9245-E8DB01F027F7}
DEFINE_GUID(CLSID_FFMPEGEncoder,
    0x554ab365, 0xb293, 0x4c1d, 0x92, 0x45, 0xe8, 0xdb, 0x01, 0xf0, 0x27, 0xf7);

/// <summary>
/// Enumeration des formats de sortie.
/// </summary>
enum FFOutputFormat
{
    of_FLV = 0,
    of_MPEG1 = 1,
    of_MPEG1VCD = 2,
    of_MPEG2 = 3,
    of_MPEG2TS = 4,
    of_MPEG2SVCD = 5,
    of_MPEG2DVD = 6
};

/// <summary>
/// Enumeration des systemes TV.
/// </summary>
enum video_tv_system_t
{
    video_norm_unknown = 0,
    video_norm_pal = 1,
    video_norm_ntsc = 2,
    video_norm_film = 3
};

/// <summary>
/// Structure des parametres de sortie de l'encodeur FFMPEG.
/// </summary>
struct CVFOutputSettings
{
    wchar_t* filename;

    BOOL audioAvailable;
    int audioBitrate;
    int audioSamplerate;
    int audioChannels;

    int videoWidth;
    int videoHeight;
    int aspectRatioW;
    int aspectRatioH;
    int videoBitrate;
    int videoMaxRate;
    int videoMinRate;
    int videoBufferSize;
    BOOL interlace;
    int videoGopSize;
    int tvSystem;

    int outputFormat;
};

/// <summary>
/// Interface de configuration de l'encodeur FFMPEG.
/// </summary>
DECLARE_INTERFACE_(IVFFFMPEGEncoder, IUnknown)
{
    /// <summary>
    /// Definit la configuration complete de l'encodeur FFMPEG.
    /// </summary>
    /// <param name="settings">Structure complete des parametres de l'encodeur</param>
    STDMETHOD(set_settings)(THIS_
        CVFOutputSettings settings
        ) PURE;
};

Définition Delphi

uses
  ActiveX, ComObj;

const
  IID_IVFFFMPEGEncoder: TGUID = '{17B8FF7D-A67F-45CE-B425-0E4F607D8C60}';
  CLSID_FFMPEGEncoder: TGUID = '{554AB365-B293-4C1D-9245-E8DB01F027F7}';

type
  /// <summary>
  /// Enumeration des formats de sortie FFMPEG.
  /// </summary>
  TVFFFMPEGDLLOutputFormat = (
    FLV,
    MPEG1,
    MPEG1VCD,
    MPEG2,
    MPEG2TS,
    MPEG2SVCD,
    MPEG2DVD
  );

  /// <summary>
  /// Enumeration des systemes TV. Note : le membre `None` peut entrer en
  /// conflit avec l'identificateur `None` expose par d'autres unites Delphi
  /// (par exemple `Variants` de la RTL). Referencez les valeurs via le nom
  /// qualifie de l'enum — `TVFFFMPEGDLLTVSystem.None` — pour eviter
  /// l'ambiguite dans le code reel.
  /// </summary>
  TVFFFMPEGDLLTVSystem = (
    None,
    PAL,
    NTSC,
    Film
  );

  /// <summary>
  /// Structure des parametres de sortie de l'encodeur FFMPEG.
  /// </summary>
  TFFMPEGOutputSettings = record
    Filename: PWideChar;
    AudioAvailable: BOOL;
    AudioBitrate: Integer;
    AudioSamplerate: Integer;
    AudioChannels: Integer;
    VideoWidth: Integer;
    VideoHeight: Integer;
    AspectRatioW: Integer;
    AspectRatioH: Integer;
    VideoBitrate: Integer;
    VideoMaxRate: Integer;
    VideoMinRate: Integer;
    VideoBufferSize: Integer;
    Interlace: BOOL;
    VideoGopSize: Integer;
    TVSystem: Integer;
    OutputFormat: Integer;
  end;

  /// <summary>
  /// Interface de configuration de l'encodeur FFMPEG.
  /// </summary>
  IVFFFMPEGEncoder = interface(IUnknown)
    ['{17B8FF7D-A67F-45CE-B425-0E4F607D8C60}']

    /// <summary>
    /// Definit la configuration complete de l'encodeur FFMPEG.
    /// </summary>
    procedure set_settings(const settings: TFFMPEGOutputSettings); stdcall;
  end;

Spécifications des formats de sortie

FLV (Flash Video)

Format : Adobe Flash Video (.flv) Cas d'usage : streaming web, contenu Flash hérité Paramètres typiques : - Résolution : 640x480, 854x480, 1280x720 - Débit vidéo : 500-2500 kbps - Audio : MP3, 64-128 kbps, 44100 Hz - GOP : 30-60 images

MPEG-1

Format : vidéo MPEG-1 (.mpg) Cas d'usage : vidéo basique, systèmes hérités, web Paramètres typiques : - Résolution : 352x240 (NTSC), 352x288 (PAL) - Débit vidéo : 1150 kbps - Audio : MPEG Layer 2, 224 kbps, 44100 Hz - GOP : 12-15 images

MPEG-1 VCD (Video CD)

Format : MPEG-1 conforme Video CD (.mpg) Cas d'usage : création de VCD, distribution sur disque Paramètres requis : - Résolution : 352x240 (NTSC), 352x288 (PAL) - Débit vidéo : 1150 kbps (fixe) - Audio : MPEG Layer 2, 224 kbps, 44100 Hz - GOP : 12 images (NTSC), 15 images (PAL) - Système TV : doit correspondre (NTSC ou PAL)

MPEG-2

Format : vidéo MPEG-2 (.mpg) Cas d'usage : création de DVD, diffusion, haute qualité Paramètres typiques : - Résolution : 720x480 (NTSC), 720x576 (PAL) - Débit vidéo : 4000-9800 kbps - Audio : MPEG Layer 2 ou AC-3, 192-448 kbps - GOP : 12-15 images

MPEG-2 TS (Transport Stream)

Format : MPEG-2 Transport Stream (.ts) Cas d'usage : diffusion, streaming, Blu-ray Paramètres typiques : - Résolution : 720x480, 1280x720, 1920x1080 - Débit vidéo : 3000-15000 kbps - Audio : MPEG Layer 2 ou AC-3 - GOP : 12-30 images - Meilleure résistance aux erreurs que MPEG-2 PS

MPEG-2 SVCD (Super Video CD)

Format : MPEG-2 conforme Super Video CD (.mpg) Cas d'usage : création de SVCD, distribution sur disque Paramètres requis : - Résolution : 480x480 (NTSC), 480x576 (PAL) - Débit vidéo : 2500 kbps (typique) - Audio : MPEG Layer 2, 224 kbps, 44100 Hz - GOP : 12-15 images - Système TV : doit correspondre (NTSC ou PAL)

MPEG-2 DVD (DVD-Video)

Format : MPEG-2 conforme DVD-Video (.mpg) Cas d'usage : création de DVD, distribution professionnelle Paramètres requis : - Résolution : 720x480 (NTSC), 720x576 (PAL) - Débit vidéo : 4000-9800 kbps - Audio : AC-3 ou PCM, jusqu'à 448 kbps - GOP : 12 images (NTSC), 15 images (PAL) - Système TV : doit correspondre (NTSC ou PAL) - Entrelacé : généralement activé pour la diffusion

Exemples d'utilisation

Exemple C# — MPEG-2 qualité DVD (NTSC)

using System;
using DirectShowLib;
using VisioForge.DirectShowAPI;

public class FFMPEGDVDEncoder
{
    public void ConfigureDVDNTSC(IBaseFilter ffmpegEncoder)
    {
        // Interroger l'interface de l'encodeur FFMPEG
        var encoder = ffmpegEncoder as IVFFFMPEGEncoder;
        if (encoder == null)
        {
            Console.WriteLine("Error: Filter does not support IVFFFMPEGEncoder");
            return;
        }

        // Configurer l'encodage MPEG-2 conforme DVD (NTSC)
        var settings = new FFMPEGOutputSettings
        {
            // Fichier de sortie
            Filename = "C:\\output\\movie.mpg",

            // Parametres audio
            AudioAvailable = true,
            AudioBitrate = 224000,      // 224 kbps
            AudioSamplerate = 48000,    // 48 kHz pour DVD
            AudioChannels = 2,           // Stereo

            // Parametres video - specifications DVD NTSC
            VideoWidth = 720,
            VideoHeight = 480,
            AspectRatioW = 16,
            AspectRatioH = 9,
            VideoBitrate = 6000000,     // 6 Mbps
            VideoMaxRate = 9800000,     // 9.8 Mbps max pour DVD
            VideoMinRate = 0,
            VideoBufferSize = 1835008,  // Tampon DVD standard
            Interlace = true,           // DVD est entrelace
            VideoGopSize = 12,          // 12 images pour NTSC

            // Parametres de format
            TVSystem = VFFFMPEGDLLTVSystem.NTSC,
            OutputFormat = VFFFMPEGDLLOutputFormat.MPEG2DVD
        };

        encoder.set_settings(settings);

        Console.WriteLine("FFMPEG encoder configured for DVD NTSC:");
        Console.WriteLine("  Resolution: 720x480 (16:9)");
        Console.WriteLine("  Video: 6 Mbps MPEG-2, interlaced");
        Console.WriteLine("  Audio: 224 kbps, 48 kHz stereo");
        Console.WriteLine("  GOP: 12 frames");
    }
}

Exemple C# — streaming web FLV

public class FFMPEGWebStreaming
{
    public void ConfigureFLV(IBaseFilter ffmpegEncoder)
    {
        var encoder = ffmpegEncoder as IVFFFMPEGEncoder;
        if (encoder == null)
            return;

        // Configurer Flash Video pour le streaming web
        var settings = new FFMPEGOutputSettings
        {
            Filename = "C:\\output\\video.flv",

            // Parametres audio
            AudioAvailable = true,
            AudioBitrate = 96000,       // 96 kbps
            AudioSamplerate = 44100,
            AudioChannels = 2,

            // Parametres video - streaming web 720p
            VideoWidth = 1280,
            VideoHeight = 720,
            AspectRatioW = 16,
            AspectRatioH = 9,
            VideoBitrate = 2000000,     // 2 Mbps
            VideoMaxRate = 2500000,     // 2.5 Mbps max
            VideoMinRate = 1500000,     // 1.5 Mbps min
            VideoBufferSize = 2000000,
            Interlace = false,          // Progressif pour le web
            VideoGopSize = 60,          // 2 secondes a 30 fps

            TVSystem = VFFFMPEGDLLTVSystem.None,
            OutputFormat = VFFFMPEGDLLOutputFormat.FLV
        };

        encoder.set_settings(settings);

        Console.WriteLine("FFMPEG encoder configured for FLV web streaming:");
        Console.WriteLine("  720p @ 2 Mbps, progressive");
    }
}

Exemple C# — MPEG-1 conforme VCD (PAL)

public class FFMPEGVCDEncoder
{
    public void ConfigureVCDPAL(IBaseFilter ffmpegEncoder)
    {
        var encoder = ffmpegEncoder as IVFFFMPEGEncoder;
        if (encoder == null)
            return;

        // Configurer MPEG-1 conforme VCD (PAL)
        var settings = new FFMPEGOutputSettings
        {
            Filename = "C:\\output\\vcd.mpg",

            // Parametres audio - specification VCD
            AudioAvailable = true,
            AudioBitrate = 224000,      // 224 kbps requis
            AudioSamplerate = 44100,    // 44.1 kHz requis
            AudioChannels = 2,

            // Parametres video - specifications VCD PAL
            VideoWidth = 352,
            VideoHeight = 288,          // Resolution PAL
            AspectRatioW = 4,
            AspectRatioH = 3,
            VideoBitrate = 1150000,     // 1150 kbps requis
            VideoMaxRate = 1150000,
            VideoMinRate = 1150000,
            VideoBufferSize = 327680,   // Taille de tampon VCD
            Interlace = false,
            VideoGopSize = 15,          // 15 images pour PAL

            TVSystem = VFFFMPEGDLLTVSystem.PAL,
            OutputFormat = VFFFMPEGDLLOutputFormat.MPEG1VCD
        };

        encoder.set_settings(settings);

        Console.WriteLine("FFMPEG encoder configured for VCD PAL:");
        Console.WriteLine("  352x288 @ 1150 kbps");
    }
}

Exemple C# — MPEG-2 Transport Stream

public class FFMPEGMPEG2TS
{
    public void ConfigureMPEG2TS(IBaseFilter ffmpegEncoder)
    {
        var encoder = ffmpegEncoder as IVFFFMPEGEncoder;
        if (encoder == null)
            return;

        // Configurer MPEG-2 Transport Stream pour la diffusion
        var settings = new FFMPEGOutputSettings
        {
            Filename = "C:\\output\\stream.ts",

            // Parametres audio
            AudioAvailable = true,
            AudioBitrate = 192000,
            AudioSamplerate = 48000,
            AudioChannels = 2,

            // Parametres video - diffusion HD 1080i
            VideoWidth = 1920,
            VideoHeight = 1080,
            AspectRatioW = 16,
            AspectRatioH = 9,
            VideoBitrate = 12000000,    // 12 Mbps
            VideoMaxRate = 15000000,    // 15 Mbps max
            VideoMinRate = 8000000,     // 8 Mbps min
            VideoBufferSize = 8000000,
            Interlace = true,           // La diffusion est entrelacee
            VideoGopSize = 15,

            TVSystem = VFFFMPEGDLLTVSystem.NTSC,
            OutputFormat = VFFFMPEGDLLOutputFormat.MPEG2TS
        };

        encoder.set_settings(settings);

        Console.WriteLine("FFMPEG encoder configured for MPEG-2 TS:");
        Console.WriteLine("  1080i HD broadcast stream");
    }
}

Exemple C++ — DVD NTSC

#include <dshow.h>
#include <iostream>
#include "InterfaceDefine.h"

void ConfigureFFMPEGDVD(IBaseFilter* pFFMPEGEncoder)
{
    IVFFFMPEGEncoder* pEncoder = NULL;
    HRESULT hr = S_OK;

    // Interroger l'interface de l'encodeur FFMPEG
    hr = pFFMPEGEncoder->QueryInterface(IID_IVFFFMPEGEncoder,
                                        (void**)&pEncoder);
    if (FAILED(hr) || !pEncoder)
    {
        std::cout << "Error: Filter does not support IVFFFMPEGEncoder" << std::endl;
        return;
    }

    // Configurer l'encodage MPEG-2 conforme DVD (NTSC)
    CVFOutputSettings settings;
    ZeroMemory(&settings, sizeof(settings));

    settings.filename = L"C:\\output\\movie.mpg";

    // Parametres audio
    settings.audioAvailable = TRUE;
    settings.audioBitrate = 224000;
    settings.audioSamplerate = 48000;
    settings.audioChannels = 2;

    // Parametres video - specifications DVD NTSC
    settings.videoWidth = 720;
    settings.videoHeight = 480;
    settings.aspectRatioW = 16;
    settings.aspectRatioH = 9;
    settings.videoBitrate = 6000000;
    settings.videoMaxRate = 9800000;
    settings.videoMinRate = 0;
    settings.videoBufferSize = 1835008;
    settings.interlace = TRUE;
    settings.videoGopSize = 12;

    settings.tvSystem = video_norm_ntsc;
    settings.outputFormat = of_MPEG2DVD;

    pEncoder->set_settings(settings);

    std::cout << "FFMPEG encoder configured for DVD NTSC" << std::endl;

    pEncoder->Release();
}

Exemple C++ — streaming web FLV

void ConfigureFFMPEGFLV(IBaseFilter* pFFMPEGEncoder)
{
    IVFFFMPEGEncoder* pEncoder = NULL;
    HRESULT hr = pFFMPEGEncoder->QueryInterface(IID_IVFFFMPEGEncoder,
                                                (void**)&pEncoder);
    if (SUCCEEDED(hr) && pEncoder)
    {
        CVFOutputSettings settings;
        ZeroMemory(&settings, sizeof(settings));

        settings.filename = L"C:\\output\\video.flv";

        // Parametres audio
        settings.audioAvailable = TRUE;
        settings.audioBitrate = 96000;
        settings.audioSamplerate = 44100;
        settings.audioChannels = 2;

        // Parametres video - web 720p
        settings.videoWidth = 1280;
        settings.videoHeight = 720;
        settings.aspectRatioW = 16;
        settings.aspectRatioH = 9;
        settings.videoBitrate = 2000000;
        settings.videoMaxRate = 2500000;
        settings.videoMinRate = 1500000;
        settings.videoBufferSize = 2000000;
        settings.interlace = FALSE;
        settings.videoGopSize = 60;

        settings.tvSystem = video_norm_unknown;
        settings.outputFormat = of_FLV;

        pEncoder->set_settings(settings);

        std::cout << "FFMPEG FLV encoder configured" << std::endl;

        pEncoder->Release();
    }
}

Exemple Delphi — DVD PAL

uses
  DirectShow9, ActiveX;

procedure ConfigureFFMPEGDVDPAL(FFMPEGEncoder: IBaseFilter);
var
  Encoder: IVFFFMPEGEncoder;
  Settings: TFFMPEGOutputSettings;
  hr: HRESULT;
begin
  hr := FFMPEGEncoder.QueryInterface(IID_IVFFFMPEGEncoder, Encoder);
  if Failed(hr) or (Encoder = nil) then
  begin
    WriteLn('Error: Filter does not support IVFFFMPEGEncoder');
    Exit;
  end;

  try
    ZeroMemory(@Settings, SizeOf(Settings));

    Settings.Filename := 'C:\output\movie.mpg';

    // Parametres audio
    Settings.AudioAvailable := True;
    Settings.AudioBitrate := 224000;
    Settings.AudioSamplerate := 48000;
    Settings.AudioChannels := 2;

    // Parametres video - specifications DVD PAL
    Settings.VideoWidth := 720;
    Settings.VideoHeight := 576;
    Settings.AspectRatioW := 16;
    Settings.AspectRatioH := 9;
    Settings.VideoBitrate := 6000000;
    Settings.VideoMaxRate := 9800000;
    Settings.VideoMinRate := 0;
    Settings.VideoBufferSize := 1835008;
    Settings.Interlace := True;
    Settings.VideoGopSize := 15;

    Settings.TVSystem := Ord(PAL);
    Settings.OutputFormat := Ord(MPEG2DVD);

    Encoder.set_settings(Settings);

    WriteLn('FFMPEG encoder configured for DVD PAL');
  finally
    Encoder := nil;
  end;
end;

Bonnes pratiques

Recommandations par format

Pour la création de DVD (MPEG2DVD) : - Faites toujours correspondre le système TV à la région cible (NTSC pour les Amériques/Japon, PAL pour l'Europe/Asie) - Utilisez 720x480 pour NTSC, 720x576 pour PAL - Activez l'entrelacement pour la compatibilité diffusion - GOP : 12 images (NTSC), 15 images (PAL) - Débit vidéo : 4-9,8 Mbps - Audio : 48 kHz, 224-448 kbps

Pour VCD/SVCD (MPEG1VCD, MPEG2SVCD) : - Respectez strictement les spécifications de format (résolution, débit) - Faites correspondre le système TV à la région cible - Utilisez exactement les débits spécifiés pour la meilleure compatibilité - Testez sur le matériel cible (lecteurs VCD/SVCD autonomes)

Pour le streaming web (FLV) : - Utilisez un encodage progressif (non entrelacé) - Débits plus bas pour une portée plus large (500-2500 kbps) - GOP : 30-60 images pour des points de navigation toutes les 1-2 secondes - Envisagez des alternatives modernes (MP4/H.264) pour une meilleure qualité

Pour la diffusion (MPEG2TS) : - Transport Stream offre une meilleure résistance aux erreurs - À utiliser pour la diffusion en direct et les applications de broadcast - Débits plus élevés acceptables (10-15 Mbps pour HD) - Faites correspondre l'entrelacement à la norme de diffusion

Résolution et rapport d'aspect

Résolutions standard par format :

Format Résolution NTSC Résolution PAL Rapport d'aspect
VCD 352x240 352x288 4:3
SVCD 480x480 480x576 4:3 ou 16:9
DVD 720x480 720x576 4:3 ou 16:9
FLV/MPEG-2 Tout Tout Tout

Paramètres de rapport d'aspect : - 4:3 standard : AspectRatioW = 4, AspectRatioH = 3 - 16:9 écran large : AspectRatioW = 16, AspectRatioH = 9 - Assurez-vous que le rapport d'aspect d'affichage correspond au rapport d'aspect des pixels

Directives sur la taille de GOP

VCD/SVCD/DVD : - NTSC : 12 images (0,4 seconde à 29,97 fps) - PAL : 15 images (0,6 seconde à 25 fps) - Requis pour la conformité au format

Streaming web : - 30-60 images (1-2 secondes) - GOP plus court : meilleure navigation, fichier plus volumineux - GOP plus long : fichier plus petit, navigation plus lente

Diffusion : - 12-15 images pour une haute qualité - À adapter à la norme du système TV

Configuration du débit binaire

VBR (débit binaire variable) : - Définissez VideoBitrate (moyenne), VideoMinRate, VideoMaxRate - Meilleure qualité pour un même débit moyen - À utiliser pour l'encodage basé sur fichier

CBR (débit binaire constant) : - Définissez les trois débits à la même valeur - Taille de fichier et bande passante prévisibles - À utiliser pour le streaming et la diffusion

Paramètres audio

Fréquences d'échantillonnage : - 44100 Hz : qualité CD, VCD/SVCD - 48000 Hz : DVD, diffusion professionnelle - Faites correspondre à la source quand c'est possible

Débits binaires : - Parole mono : 64-96 kbps - Musique stéréo : 128-224 kbps - Audio DVD : 192-448 kbps

Dépannage

Échec de l'initialisation de l'encodeur

Symptômes : l'appel set_settings échoue ou plante

Causes possibles : 1. Nom ou chemin de fichier invalide 2. Spécifications de format incorrectes 3. Combinaison résolution/débit non prise en charge

Solutions : - Vérifiez que le répertoire de sortie existe et est accessible en écriture - Vérifiez que la résolution correspond aux exigences du format - Vérifiez que le débit est dans les limites du format - Pour VCD/SVCD/DVD, respectez strictement les spécifications

Le fichier de sortie ne se lit pas

Symptômes : le fichier encodé ne se lit pas ou comporte des erreurs

Causes possibles : 1. Les spécifications de format ne sont pas respectées 2. Mauvais système TV pour le format 3. Incohérence d'entrelacement 4. Problèmes de taille de GOP

Solutions : - Pour DVD/VCD/SVCD : utilisez les paramètres exacts de la spécification - Faites correspondre le système TV à la région cible - Activez l'entrelacement pour DVD/diffusion - Utilisez des tailles de GOP standard (12 pour NTSC, 15 pour PAL)

Qualité vidéo médiocre

Symptômes : vidéo en blocs, floue ou avec artefacts

Causes possibles : 1. Débit trop faible pour la résolution 2. Taille de GOP incorrecte 3. Plage de débit trop restrictive

Solutions : - Augmentez le débit vidéo (voir les recommandations par format) - Pour VBR, élargissez la plage débit min/max - Utilisez une taille de GOP adaptée au format - Vérifiez que la résolution correspond aux spécifications du format

Problèmes de synchronisation A/V

Symptômes : l'audio et la vidéo se désynchronisent

Causes possibles : 1. Fréquence d'échantillonnage incorrecte 2. Mauvaise fréquence d'images pour le système TV 3. Problèmes de taille de tampon

Solutions : - Utilisez 48000 Hz pour DVD, 44100 Hz pour VCD - Vérifiez que le système TV correspond à la fréquence d'images source - Augmentez VideoBufferSize pour les contenus complexes - Vérifiez que l'audio/vidéo source sont synchronisés

Le DVD/VCD ne se lit pas sur le matériel

Symptômes : le fichier se lit sur l'ordinateur mais pas sur un lecteur autonome

Causes possibles : 1. Les spécifications de format ne sont pas strictement respectées 2. Mauvais système TV 3. Taille de GOP ou débit non conformes

Solutions : - Critique : utilisez les spécifications exactes du format - VCD : 352x240/288, 1150 kbps, GOP 12/15 - DVD : 720x480/576, max 9,8 Mbps, GOP 12/15 - Faites correspondre le système TV à la région du lecteur - Activez l'entrelacement pour DVD - Testez d'abord avec un lecteur DVD/VCD logiciel

Fichiers de sortie volumineux

Symptômes : fichiers de sortie plus volumineux que prévu

Causes possibles : 1. Débit trop élevé 2. CBR au lieu de VBR 3. Taille de GOP trop petite

Solutions : - Réduisez le débit vidéo - Utilisez VBR avec une plage min/max appropriée - Augmentez la taille de GOP (pour les formats hors DVD/VCD) - Envisagez des formats plus efficaces (H.264/MP4 au lieu de MPEG-2)


Voir aussi