0

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

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

我还尝试设置当前线程的文化和 UI 文化,认为它是从那里获取的。然而,SDK 在内部启动了大量新线程,我认为这些正在改变我的文化。

这真的很烦人,我在任何地方都找不到有关更改编码器语言的任何信息。搜索词太笼统了,我得到的只是编码器的规格表。:( 请帮忙!

4

1 回答 1

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 部分。必须调用该方法才能使更改真正生效。您还需要确保在加载阅读器配置文件后执行此操作。

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

于 2010-09-28T17:52:22.337 回答