Я немного не уверен в точной проблеме, которую вы пытаетесь решить.Звучит так, будто вы хотите закодировать файлы mpg, avi, wmv в DV AVI type 1 и использовать ffmpeg как часть решения.
Существуют фильтры DirectShow для Microsoft DV Video Encoder и DV muxer, которые будут объединятьвидео и аудио в единый видео + аудио DV-поток, необходимый для DVI типа 1.
I 'Я не очень знаком с ffmpeg, но я не уверен, зачем вам это нужно для вашей конкретной проблемы.DirectShow может обрабатывать самые разные форматы ввода.Из часто задаваемых вопросов видно, что ffmpeg может получать входные данные из фильтра DirectShow, но не записывать данные в фильтр DirectShow.
Было бы проще всего выполнить преобразование только с DirectShow без ffmpeg:
- Создание графа DirectShow (CoCreateInstance получает IGraphBuilder).
- Создание исходного фильтра из вашего входного файла (IGraphBuilder :: AddSourceFilter)
- Создание фильтра кодера DV (CoCreateInstance)
- Добавление фильтра кодера DV в график (IFilterGraph:: AddFilter)
- Подключите вывод источника видео к кодировщику DV (IGraphBuilder :: Connect)
Затем аналогично:
- Подключите новый DVподключите к выходу видеокодера DV и к выходному аудиосигналу из фильтра источника (вам может понадобиться промежуточный фильтр для сжатия звука в нужный формат).
- Подключите выход мультиплексора dv к новому фильтру avi mux.
- Подключите выход мультиплексора avi к новому фильтру средства записи файлов, настроенному с вашим файлом назначения.
- Запустите график, используя IMediaControl и IMediaEvents для преобразования вашего входного файла в ваш выходной файл.
Если я неправильно понял ваш вопрос, тогда вы сможете построить другой график, который будет преобразован в илииз DV AVI типа 1 или 2. Для записи типа 2 вам не нужно использовать dv muxer.
Все это можно легко проверить заранее с помощью GraphEdit или аналогичных инструментов перед написанием любого кода.GraphEdit доступен с Windows SDK.GraphStudio - это альтернатива с открытым исходным кодом, но есть и другие.В целях разработки вы также можете построить график в GraphEdit или аналогичном, а затем загрузить его и запустить в своем собственном тестовом приложении (см. http://msdn.microsoft.com/en-us/library/dd390649(v=vs.85).aspx)
. Для получения некоторой базовой информации о начале работы см .: - Страница Wikipedia на DirectShow.- Как я могу изучить программирование DirectShow? - Где найти подробное руководство по DirectShow?