高清視頻動輒百 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 修補包可擴展格式支援、提升效能、修復已知問題。
Microsoft.Expression.Encoder.dll、Microsoft.Expression.Encoder.Utilities.dll (SDK 目錄)WindowsBase (GAC)using Microsoft.Expression.Encoder;
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();
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
};
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}%");
};
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 上游源。
job.ApplyPreset(@"C:\Presets\Custom.xml")EE3 SDK 以極簡 API 覆蓋離線/即時、單/多碼率、裁剪/合併全場景。掌握容器/編碼器/碼率/關鍵幀核心概念,配合預設與手動配置靈活切換,即可構建專業級視頻處理管線。