У меня нет опыта работы с API обработки видео, и мне трудно найти ответ на этот вопрос. Моя цель - создать программу, способную создавать видео из выбранных частей выбранного файла. Я не смог найти ответ, может ли DirectShow удалить некоторые части видео или вырезать некоторые части, чтобы объединить их в новое, более короткое видео.
Способен ли DirectShow вырезать некоторые части видео?
Ответы (2)
Услуги редактирования DirectShow (DES) — это именно то, о чем вы спрашиваете. По сути, это движок Windows Movie Maker, и он был частью DirectShow, начиная с DirectX 8. Там вы можете создать временную шкалу с одной или несколькими видео- и аудиодорожками, поместить туда части одного или разных файлов, а затем либо воспроизвести, либо преобразовать их в файл. Он даже поддерживает рендеринг без повторного сжатия для некоторых форматов. DES был доступен в течение многих лет, но сейчас считается устаревшим.
В чистом DirectShow по-прежнему возможно использовать интерфейс IMediaSeeking на соответствующих выходных контактах для поиска желаемой начальной точки и обработки нужных частей файлов.
Насколько я знаю, DirectShow не может сделать это из коробки. Похоже, вы разрабатываете приложение для редактирования видео. Во-первых, вы должны разработать проигрыватель, который позволит воспроизводить от-до (в единицах времени или кадра) и воспроизводить кадр за кадром. С таким плеером пользователь сможет выбирать фрагменты по своему выбору. Одним из способов сделать это было бы разработать часть декодирования с DShow или без него и часть рендеринга с DShow, потому что это проще. Часть рендеринга, вероятно, потребует пользовательского исходного фильтра, подключенного к аудио и/или видео рендереру. Такой пользовательский исходный фильтр должен иметь собственный интерфейс для настройки и получения несжатых данных. Часть декодирования должна иметь ранее упомянутые функции для воспроизведения фрагментов и пошагового покадрового воспроизведения, чтобы вы могли управлять воспроизведением и обеспечивать выбор фрагментов файла с точностью до кадра (для последующего экспорта в один файл).
Вторая часть приложения предназначена для создания нового видеофайла из выбранных фрагментов. У вас есть 2 варианта здесь. Вы можете перекодировать все эти фрагменты. Сделав это, вы потеряете качество. Кроме того, вам придется сначала настроить кодировщик, сообщив ему, что является входным и выходным форматом. В зависимости от выбранного кодировщика это может быть тривиальным или довольно сложным. Второй вариант — создать новое видео из сжатых образцов. Здесь вам нужно будет обратить внимание, чтобы такой файл запускался с ключевого кадра (для видеопотока). Также вам понадобится сторонний SDK для такой задачи, или вы можете сделать это вручную, если вы знакомы с получившейся архитектурой формата контейнера. Например, Windows Media Format SDK предоставляет способ сделать это, если исходным форматом является файл ASF/WMV. Если нет, что касается видео, вам придется как-то это решить.
ЕСЛИ вы собираетесь это сделать, приготовьтесь к значительному объему кодирования.