在Expression Encoder中指定音频输出语言

时间:2010-09-24 15:35:30

标签: encoding expression-encoder expression-encoder-sdk

我正在使用Expression Encoder 3 SDK,我正在尝试指定输出音频语言。我这样做的最终原因是将音轨编码为英语,并将其他可选的音轨指定为其他语言。 Expression Encoder不支持此功能,但如果您将单独的轨道编码为不同的语言,则Windows Media Stream Editor可以将它们组合成一个文件。

我找不到任何改变输出语言的方法。我尝试了元数据标签,但这只是放置标签调用语言;它实际上并没有改变轨道的语言LCID。因此,流编辑器仍然将其视为英语。

我也试过设置当前线程的文化和UI文化,认为它是从那里捡起来的。然而,SDK在内部旋转了大量的新线程,我认为这些正在改变我的文化。

这真烦人,我无法找到任何关于编码器更改语言的内容。搜索条件过于通用,我得到的只是编码器上的规格表。 :(请帮忙!

1 个答案:

答案 0 :(得分:1)

我找到了答案,就像我想的那样。您似乎无法从Expression Encoder 3更改输出语言。在Expression Encoder 4中有关于多语言支持的讨论,但它似乎有限,尽管我还没有测试它,但是对于IIS Smooth Streaming。

解决方案是允许Encoder以英语输出音频文件,然后在事后更改语言。

我使用两个以DirectShow SDK和Windows Media Format SDK为中心的开源项目完成了这项工作。这两个版本都有.NET包装器:DirectShowWMFormat

WindowsMediaNet项目有一个名为WMVCopy的示例项目。这会将一个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部分。必须调用该方法才能使更改实际生效。您还需要确保在加载阅读器配置文件后执行此操作。

我不确定是否还有其他人需要这样做。但如果是这样,我希望这会有所帮助。