2010-09-24 62 views
0

我正在使用Expression Encoder 3 SDK,並試圖指定輸出音頻語言。我這樣做的最終原因是將音軌編碼爲英文,並將其他可選音軌指定爲其他語言。表達式編碼器不支持這一點,但如果您將不同的音軌編碼爲不同的語言,則Windows媒體流編輯器可以將它們合併爲一個文件。在表達式編碼器中指定音頻輸出語言

我找不到任何方法來改變輸出語言。我嘗試了元數據標籤,但這只是一種標籤調用語言;它實際上並沒有改變賽道的LCID語言。因此,流編輯器仍然將其視爲英文。

我也嘗試設置當前線程的文化和UI文化,認爲它從那裏拿起它。但是,SDK內部增加了大量新線程,我認爲這些正在讓我的文化發生變化。

這真的很煩人,我找不到任何有關編碼器改變語言的地方。搜索條款太籠統了,我得到的只是編碼器的規格表。 :(請幫助!

+0

我想到的另一種方法是允許Expression Encoder使用錯誤的語言進行編碼,然後在事實之後更改語言。這個解決方案會很好,但是再次,如果不重新編碼,我也找不到一種方法。 – 2010-09-27 17:50:20

回答

1

我找到了答案,正如我的想法似乎你不能改變表達式編碼器3的輸出語言。在表達式編碼器4中有談論多語言支持,但它似乎有限,雖然我沒有測試它,IIS Smooth Streaming的。

的解決方案是允許編碼器輸出的音頻文件作爲英語,然後在事後更改語言。

我完成了這個使用兩個以DirectShow SDK和Windows Media Format SDK爲中心的開源項目,這兩個.NET包裝器位於:DirectShowWMFormat

WindowsMediaNet項目有一個名爲WMVCopy的示例項目。這會將一個WMV文件複製到另一個WMV文件,同時重新構建標題等。但是,它不會重新編碼流,它只是將其從一個文件複製到下一個文件。這正是我想要的。

我修改了WMVCopy代碼來改變所有流的語言:

int streamCount = 0; 
m_pReaderProfile.GetStreamCount(out streamCount); 
for (int streamIndex = 0; streamIndex < streamCount; streamIndex++) 
{ 
    IWMStreamConfig stream = null; 
    m_pReaderProfile.GetStream(streamIndex, out stream); 

    ((IWMStreamConfig3)stream).SetLanguage(language); 
    m_pReaderProfile.ReconfigStream(stream); 
} 

這個循環遍歷每個流和語言設置爲指定字符串LCID。該語言必須採用en-us或ca-fr的形式。導入部分是ReconfigureStream部分。必須調用該方法才能使更改實際生效。您還需要確保在讀取器配置文件加載後執行此操作。

我不確定是否有其他人需要這樣做。但如果是這樣,我希望這有助於。