Извлечение аудио из видеофайла

Как я могу извлечь аудиофайл из видеофайла без использования FFmpeg ?

Я хочу использовать AVMutableComposition и AVURLAsset для решения it.eg-преобразования из .mov в файл .m4a.

2 Solutions collect form web for “Извлечение аудио из видеофайла”

Следующий код Swift 3 показывает, как извлечь аудиофайл из файла видео ( .mov ) и преобразовать его в звуковой файл ( .m4a ) с помощью AVURLAsset , AVMutableComposition и AVAssetExportSession :

 import UIKit import AVFoundation class ViewController: UIViewController { @IBAction func extractAudioAndExport(_ sender: UIButton) { // Create a composition let composition = AVMutableComposition() do { let sourceUrl = Bundle.main.url(forResource: "Movie", withExtension: "mov")! let asset = AVURLAsset(url: sourceUrl) guard let audioAssetTrack = asset.tracks(withMediaType: AVMediaTypeAudio).first else { return } let audioCompositionTrack = composition.addMutableTrack(withMediaType: AVMediaTypeAudio, preferredTrackID: kCMPersistentTrackID_Invalid) try audioCompositionTrack.insertTimeRange(audioAssetTrack.timeRange, of: audioAssetTrack, at: kCMTimeZero) } catch { print(error) } // Get url for output let outputUrl = URL(fileURLWithPath: NSTemporaryDirectory() + "out.m4a") if FileManager.default.fileExists(atPath: exportUrl.path) { try? FileManager.default.removeItem(atPath: outputUrl.path) } // Create an export session let exportSession = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetPassthrough)! exportSession.outputFileType = AVFileTypeAppleM4A exportSession.outputURL = outputUrl // Export file exportSession.exportAsynchronously { guard case exportSession.status = AVAssetExportSessionStatus.completed else { return } DispatchQueue.main.async { // Present a UIActivityViewController to share audio file guard let outputURL = exportSession.outputURL else { return } let activityViewController = UIActivityViewController(activityItems: [outputURL], applicationActivities: []) self.present(activityViewController, animated: true, completion: nil) } } } } 

Во всех мультимедийных форматах аудио кодируется отдельно от видео, а их фреймы чередуются в файле. Поэтому удаление видео из мультимедийного файла не требует использования кодеров и декодеров: вы можете написать парсер формата файла, который выведет видеодорожку без использования мультимедийных API на телефоне.

Чтобы сделать это без использования сторонней библиотеки, вам нужно написать парсер с нуля, что может быть простым или трудным в зависимости от формата файла, который вы хотите использовать. Например, FLV очень прост, так что отключение дорожки из него очень просто (просто перейдите по потоку, обнаружите начало кадра и опустите «0x09» = видеокадры). MP4 немного сложнее, его заголовок (MOOV) имеет иерархическую структуру, в которой у вас есть заголовки для каждой из треков (атомы TRAK). Вам необходимо отбросить видео TRAK, а затем скопировать перемеженный бит-бит (MDAT), который пропускает все кластеры видеоданных при копировании.

Существуют сторонние библиотеки, которые вы можете использовать, кроме ffmpeg. Один из них имеет значение GPAC MP4BOX (лицензия LGPL). Если LGPL является проблемой, есть много коммерческих SDK, которые вы можете использовать.

  • Как получить полную продолжительность видео и текущее время воспроизведения?
  • Обрезка видео AVAsset с AVFoundation
  • как скачать m3u-видео в приложении IOS?
  • Загрузка видео в YouTube с использованием NSURLRequest
  • Устранение размытости при начале и конце видео (даже после использования setPreferredVideoStabilizationMode: AVCaptureVideoStabilizationModeAuto)?
  • MPMoviePlayerController изменение скорости видео
  • Загрузка видео с HTML + UIWebView
  • Как изменить ориентацию видео AVCaptureMovieFileOutput во время сеанса работы?
  • Большинство видео не получают VideoUrl с YouTube
  • Каков наилучший способ реализовать видео в uitableviewcell?
  • AVPlayerItem не может быть связан с несколькими экземплярами AVPlayer '
  • Повторно использовать один и тот же AVPlayer и AVPlayerLayer или создавать новые каждый раз?
  • Interesting Posts

    Можете ли вы разбудить телефон из приложения WatchKit 1.0?

    Просмотр Html в приложениях ios / ipod

    Чувствительность / скорость прокрутки UIScrollView с подкачкой

    Как создать закругленные углы с помощью CAShapeLayer

    Дублирование проекта XCode 4

    Атрибут различного значения для переменной в зависимости от класса, из которого вы приходите (Swift)

    UIImage cv :: Преобразование Mat с альфа-каналом

    Получить дату создания файла или изменения даты

    Версия CLGeocoder Swift 2

    ARC и CFRelease?

    Как отклонить программно созданный UIView, когда пользователь нажимает на любую часть экрана iPhone

    Невозможно найти keyplane, который поддерживает тип 4 для клавиатуры iPhone-PortraitChoco-NumberPad

    Как получить список имен столбцов с помощью Sqlite.swift?

    Admob для межстраничного видео iOS запускается в фоновом режиме при загрузке

    Плохая производительность операции «Сохранить» основных данных в управляемом объекте

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.