首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

Microsoft Expression Encoder 3 SDK 視頻編碼實戰:從入門到進階

     編輯:關於.NET

高清視頻動輒百 MB/分鐘,上傳分享、設備播放亟需轉碼。Expression Encoder 3 (EE3) 作為 Expression 套件成員,提供免費/付費雙版本與強大 SDK。本文系統講解 EE3 SDK 編碼核心概念、基礎/進階/即時/合併編碼實戰代碼。

版本與格式支援矩陣

項目免費版付費版 (Studio 3 / Web 3 Suite)
輸入格式WMV, VOB, MPEG, AVI, DVR-MS+ MP4/MOV/MTS/3GP 等
輸出編碼器VC-1 (WMV)+ H.264, Smooth Streaming
目標設備Silverlight (單碼率), Xbox, Zune+ iPhone, PS3, Flash 10+, Smooth Streaming

安裝 Encoder 3 QFE 修補包可擴展格式支援、提升效能、修復已知問題。

編碼基礎知識速覽

  • 容器 vs 編碼器: MP4 為容器,H.264 為常見編碼器,兩者可混搭
  • 碼率模式: CBR (固定) / VBR (可變) / 限制 VBR (上限) / 品質導向 VBR
  • 關鍵幀間距: 關鍵幀含完整畫面,間隔過大影響 Seek 與 Smooth Streaming 切流暢度

SDK 環境準備

  1. 引用 Microsoft.Expression.Encoder.dll、Microsoft.Expression.Encoder.Utilities.dll (SDK 目錄)
  2. 引用 WindowsBase (GAC)
  3. using Microsoft.Expression.Encoder;
  4. 64 位 OS 需專案屬性 → Build → Target platform: x86

基礎編碼:預設配置一鍵輸出


var src = new MediaItem(@"C:\Source\AdrenalineRush.wmv");
var job = new Job();
job.MediaItems.Add(src);
job.ApplyPreset(Presets.VC1ZuneHD); // 內建預設
job.OutputDirectory = @"C:\Encoded";
job.Encode();

進階編碼:手動配置音視頻 Profile


src.OutputFormat = new WindowsMediaOutputFormat();
src.OutputFormat.VideoProfile = new AdvancedVC1VideoProfile {
    Bitrate = new VariableConstrainedBitrate(1000, 1500), // 平均/峰值 kbps
    Size = new Size(480, 272),
    FrameRate = 30,
    KeyFrameDistance = TimeSpan.FromSeconds(4)
};
src.OutputFormat.AudioProfile = new WmaAudioProfile {
    Bitrate = new VariableConstrainedBitrate(128, 192),
    Codec = AudioCodec.WmaProfessional,
    BitsPerSample = 24
};

Silverlight Smooth Streaming 多碼率編碼


src.OutputFormat.VideoProfile.SmoothStreaming = true;
src.OutputFormat.VideoProfile.KeyFrameDistance = TimeSpan.FromSeconds(2); // 關鍵幀 2秒,配合 2秒 切片
src.OutputFormat.VideoProfile.Streams.Clear();
src.OutputFormat.VideoProfile.Streams.Add(new StreamInfo(
    new VariableConstrainedBitrate(2000, 3000), new Size(1280, 720)));
src.OutputFormat.VideoProfile.Streams.Add(new StreamInfo(
    new VariableConstrainedBitrate(1400, 1834), new Size(848, 476)));
src.OutputFormat.VideoProfile.Streams.Add(new StreamInfo(
    new VariableConstrainedBitrate(660, 733), new Size(640, 360)));

三碼率自適應,播放器依帶寬無縫切換。碼率估算公式:(檔案KB * 8 / 時長秒) - 音頻碼率。

進度監控:多通道編碼感知


job.EncodeProgress += (s, e) => {
    Console.Clear();
    Console.WriteLine($"{(100 * (e.CurrentPass - 1) + e.Progress) / e.TotalPasses}%");
};
  • VBR 為雙通道:第一通道分析複雜度,第二通道實際編碼
  • CBR 單通道,CurrentPass/TotalPasses 恆為 1

片段裁剪與多檔合併


// 僅編碼前 6 秒
src.Sources[0].Clips[0].StartTime = TimeSpan.Zero;
src.Sources[0].Clips[0].EndTime = TimeSpan.FromSeconds(6);

// 合併多檔順序輸出
src.Sources.Add(new Source(@"C:\Source\Video2.wmv"));

即時編碼:網絡攝像頭直播推流


using (var job = new LiveJob()) {
    var videoDev = job.VideoDevices[0];
    var audioDev = job.AudioDevices[0];
    var liveSrc = job.AddDeviceSource(videoDev, audioDev);
    job.ActivateSource(liveSrc);

    job.OutputFormat = new WindowsMediaBroadcastOutputFormat {
        BroadcastPort = 8080
    };

    job.StartEncoding();
    Console.ReadLine(); // 按 Enter 停止
    job.StopEncoding();
}

本地 mms://localhost:8080 可用 WMP 播放,延遲 20-30 秒,可作為 WMS/IIS Media Services 上游源。

輔助工具:A/B Compare 與 PowerShell 模組

  • UI 內建 A/B Compare:當前幀附近 5 秒編碼對比原片,分屏審視品質
  • 導出預設為 XML,SDK 可載入:job.ApplyPreset(@"C:\Presets\Custom.xml")
  • Convert-Media PowerShell 模組:CodePlex 開源,無需寫代碼即可命令列批量轉碼

總結

EE3 SDK 以極簡 API 覆蓋離線/即時、單/多碼率、裁剪/合併全場景。掌握容器/編碼器/碼率/關鍵幀核心概念,配合預設與手動配置靈活切換,即可構建專業級視頻處理管線。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved