Укажите язык вывода звука в Expression Encoder

Я использую Expression Encoder 3 SDK и пытаюсь указать язык вывода звука. Основная причина, по которой я это делаю, заключается в том, чтобы кодировать звуковую дорожку на английском языке и указывать другие необязательные звуковые дорожки на других языках. Expression Encoder не поддерживает это, но если вы кодируете отдельные дорожки на разные языки, редактор Windows Media Stream может затем собрать их в один файл.

Я не могу найти способ изменить язык вывода. Я попробовал метаданные метки, но это просто ставит язык вызова метки; это фактически не меняет язык LCID трека. Итак, редактор потоков все еще видит его как английский.

Я также попытался установить текущую культуру потока и культуру пользовательского интерфейса, полагая, что это происходит оттуда. Тем не менее, SDK запускает тонны новых потоков внутри, и я думаю, что они меняют мою культуру.

Это действительно раздражает, и я не могу найти что-нибудь о смене языка для кодировщика. Поисковые термины слишком общие, и все, что я получаю, это спецификации на кодировщике.:(Пожалуйста помоги!

1 ответ

Решение

Я нашел ответ, и я так и думал. Кажется, что вы не можете изменить язык вывода с Expression Encoder 3. Говорят о многоязыковой поддержке в Expression Encoder 4, но, кажется, она ограничена, хотя я не проверял это, IIS Smooth Streaming.

Решение состоит в том, чтобы позволить Encoder вывести аудиофайл на английском языке, а затем сменить язык по факту.

Я сделал это с помощью двух проектов с открытым исходным кодом, сосредоточенных вокруг DirectShow SDK и Windows Media Format SDK. Здесь есть оболочки.NET для обоих из них: DirectShow и WMFormat.

Проект 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. Этот метод должен быть вызван, чтобы изменение вступило в силу. Вы также должны убедиться, что вы делаете это после загрузки профиля читателя.

Я не уверен, что кому-то еще нужно будет это делать. Но если так, надеюсь, это поможет.

Другие вопросы по тегам