Сохранение фильмов из видеокадров AVCaptureVideoDataOutput

Благодаря новым функциям видео в AVFoundation, включенным в iOS4, можно получить доступ к необработанным видеокадрам, снятым камерой, с помощью AVCaptureVideoDataOutput.

Я хотел бы наложить текст и другую информацию поверх этих кадров, а затем вывести их в файл фильма, который в какой-то момент будет сохранен в библиотеке активов.

К сожалению, похоже, что Apple не предоставила нам простой способ сохранить эти кадры в файл фильма.

Каковы мои варианты сохранения кадров в файл фильма, который будет совместим с библиотекой ресурсов?

Есть ли способ сделать это, используя только iPhone SDK?

Если нет, то какие сторонние библиотеки совместимы с iPhone и могут быть использованы для достижения этой цели?


person Avalanchis    schedule 13.07.2010    source источник


Ответы (4)


Теперь вы можете использовать AVAssetWriter для сохранения кадров в AVCaptureVideoDataOutput

Вот пример использования AVAssetWriter в Swift 4:

assetWriter = AVAssetWriter()
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first
let outputURL = URL(fileURLWithPath: documentsPath!).appendingPathComponent("test.m4v")
assetWriter = try! AVAssetWriter(outputURL: outputURL, fileType: .mp4)
assetWriterInput = AVAssetWriterInput(mediaType: .video, outputSettings: videoOutput.recommendedVideoSettingsForAssetWriter(writingTo: .mp4))
assetWriterInput.expectsMediaDataInRealTime = true

if assetWriter.canAdd(assetWriterInput) {
    assetWriter.add(assetWriterInput)
    } else {
        print("no input added")
    }
assetWriter.startWriting()

Справочная документация находится здесь: AVAssetWriter

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

person Brody Higby    schedule 02.01.2019
comment
Пожалуйста, включите пример того, как его использовать, не требуя открытия ссылки - person Gibolt; 02.01.2019

Я не нашел включенных средств ни для кодирования кадров, захваченных с помощью AVCaptureVideoDataOutput, ни для записи их в файл Quicktime .mov.

Вы можете посмотреть на ffmpeg, чтобы убедиться, что он соответствует вашим потребностям — он может обрабатывать как формат контейнера, так и кодирование.

person Art Gillespie    schedule 13.07.2010
comment
Любые другие варианты, кроме ffmpeg, на которые я должен обратить внимание? - person Avalanchis; 15.07.2010

AVCaptureMovieFileOutput позволяет записывать данные в фильм QuickTime, возможно, это поможет...

person majestix508    schedule 15.07.2010
comment
Да, но если я использую AVCaptureMovieFileOutput, то я не могу использовать AVCaptureVideoDataOutput для управления данными кадра. - person Avalanchis; 16.07.2010

Привет! Если вам просто нужно сделать какие-то водяные знаки поверх вашего видео, то было бы легко просто снять фильм с помощью вашей камеры, а затем использовать AVVideoCompositionCoreAnimationTool из AVVideoComposition. Вы можете добавить любую анимацию, тексты в качестве оверлея для вашего видео.

person Steve    schedule 07.10.2010
comment
Я использую это, но это занимает много времени, если я создаю много анимаций за 1 минуту. Знаете ли вы, как я могу оптимизировать AVVideoCompositionCoreAnimationToo? stackoverflow.com/questions/41170456 / - person Carolina; 15.12.2016