Encoding 在表达式编码器中指定音频输出语言

Encoding 在表达式编码器中指定音频输出语言,encoding,expression-encoder,expression-encoder-sdk,Encoding,Expression Encoder,Expression Encoder Sdk,我正在使用Expression Encoder 3 SDK,并试图指定输出音频语言。我这样做的最终原因是将音轨编码为英语,并将其他可选音轨指定为其他语言。Expression Encoder不支持此功能,但如果将单独的曲目编码为不同的语言,则Windows Media Stream Editor可以将其合并到一个文件中 我找不到任何方法来更改输出语言。我尝试了元数据标记,但这只是一种标记调用语言;它实际上不会改变曲目的语言LCID。所以,流编辑器仍然将其视为英语 我还尝试设置当前线程的区域性和U

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

我找不到任何方法来更改输出语言。我尝试了元数据标记,但这只是一种标记调用语言;它实际上不会改变曲目的语言LCID。所以,流编辑器仍然将其视为英语

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


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

我找到了答案,答案与我所想的一样。您似乎无法更改Expression Encoder 3的输出语言。Expression Encoder 4中有多语言支持的说法,但对IIS平滑流式处理的支持似乎有限,尽管我尚未进行测试

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

我使用以DirectShowSDK和Windows Media Format SDK为中心的两个开源项目完成了这项工作

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);
}
int streamCount=0;
m_pReaderProfile.GetStreamCount(out streamCount);
对于(int streamIndex=0;streamIndex
这将循环每个流,并将语言设置为指定的LCID字符串。该语言必须采用en us或ca-fr的形式。导入部分是ReconfigureStream部分。必须调用该方法才能使更改实际生效。您还需要确保在加载读卡器配置文件后执行此操作


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

我想到的另一种方法是允许Expression Encoder使用错误的语言进行编码,然后在事后更改语言。这种解决方案很好,但同样,我也找不到不重新编码就可以做到这一点的方法。