Эквивалент Mac OS X для DirectShow, GraphEdit
Новичок в Mac OS X, знаком с Windows. В Windows есть DirectShow, большое количество встроенных фильтров, COM-программирование и GraphEdit для очень быстрого прототипирования и отслеживания графов, которые вы построили в коде.
Сейчас я собираюсь поехать на Mac, чтобы работать с камерами, веб-камерами, микрофонами, цветовыми пространствами, файлами, разделением, синхронизацией, рендерингом, чтением файлов, сохранением файлов и многими другими вещами, которые я считаю само собой разумеющимся с DirecShow. при сборке приложений для живого выступления. Что касается Mac, то пока я не нашел... ничего! Либо я не знаю, где искать, либо у меня самое сложное время, чтобы связать репутацию Mac с его простотой обработки мультимедиа с последовательной программной способностью проникать туда и начинать связываться со строительными блоками манипулирования медиа.
Я видел несколько слабых предложений использовать gstreamer или какую-то библиотеку для QT, но я не могу заставить себя поверить, что это путь Apple. И я наткнулся на некоторую документацию по QuickTime, но я не собираюсь делать переходы, спрайты, трансляции,...
Обучение мозгу в DirectShow означает, что я даже не знаю, как Apple думает о предоставлении DirectShow-подобной функциональности. Это означает, что я не знаю правильных ключевых слов и даже не знаю, где искать. Книги? Купил несколько. Теперь я мог бы написать некоторый код, который может редактировать свадебное видео вашей сестры (если я не могу добиться приличного прогресса в этой теме, я, возможно, затем буду спрашивать, что это будет стоить для вас), но для определения, какие фильтры доступны и как связать их вместе... ничего. Предложения?
1 ответ
На данный момент обработка видео переживает огромный переход на Mac. QuickTime очень старый, но в то же время большой и мощный, поэтому в течение последних 5 лет он проходил процесс постепенной замены.
Тем не менее, QTKit - это подмножество QuickTime (захват, воспроизведение, преобразование формата и базовое редактирование видео), которое поддерживается в будущем. Устаревшие API-интерфейсы QuickTime все еще существуют на данный момент и, вероятно, останутся, по крайней мере, до тех пор, пока его основные функции не станут доступны в другом месте, но будут 32-битными. Для некоторых вовлеченных видео вещей вам может понадобиться использовать его в некоторых местах.
На данный момент iOS опережает Mac, потому что она может начаться с нуля с AVFoundation. Будущее медиа-фреймворков для Mac, вероятно, будет либо напрямую основано на AVFoundation (QTKit - это облегченная оболочка сверху), либо на расширении QTKit, которое выглядит очень похоже.
Для аудио есть Core Audio, который есть на Mac и iOS и не уйдет в ближайшее время. Это довольно мощный, но местами несколько тупой. К счастью, онлайн-поддержка очень хорошая; список рассылки является важным ресурсом.
Для фильтров и обработки на уровне кадра у вас есть Core Video, как кто-то еще упомянул, а также Core Image. Для движущейся графики есть Quartz Composer, который включает в себя графический редактор и архитектуру плагинов для добавления собственных патчей. Для программной процедурной анимации и простого смешивания моделей рендеринга (OpenGL, Quartz, видео и т. Д.) Есть Core Animation.
В дополнение ко всему этому, разумеется, нет причин, по которым вы не можете использовать библиотеки с открытым исходным кодом, в которых встроенные функции не выполняют то, что вы хотите.
Чтобы ответить на ваш комментарий ниже:
В QuickTime (и QTKit) отдельные типы данных, такие как аудио и видео, представлены в виде дорожек. Может быть не сразу понятно, что QuickTime может открывать аудио, а также форматы видеофайлов. Обычный способ объединить аудио и видео:
- Создать
QTMovie
с вашим видео файлом - Создать
QTMovie
с вашим аудиофайлом. - Возьмите
QTTrack
объект, представляющий аудио и добавить его кQTMovie
с видео в нем. - Выровняйте фильм, чтобы он не просто содержал ссылку на другой фильм, но фактически содержал аудиоданные.
- Запишите фильм на диск.
Вот пример из Blender. Вы увидите, как осуществляется мультиплексирование аудио / видео в end_qt
функция. Там также есть некоторое использование Core Audio там (AudioConverter*
). (Там есть некоторый классический код экспорта QuickTime в quicktime_export.c
но это не похоже на звук.)