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

Как я могу извлечь аудиофайл из видеофайла без использования 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, которые вы можете использовать.

  • Каков наиболее эффективный способ отображения CVImageBufferRef на iOS
  • iOS7 Embedded Video Video Issue только на iPad - нужно несколько раз нажать кнопку воспроизведения
  • UIImagePickerController позволяет Editing = YES, получение необработанного видео после обрезки
  • IOS AVPlayer не будет воспроизводить видео
  • Как играть в видео с использованием среды Mediaplayer в ios?
  • Событие Click / Tap не запускается в iframe на устройствах iOS
  • Почему байты моего изображения в строке больше, чем его байты на пиксель, умноженные на ширину?
  • MPMoviePlayerController обратное буферное видео снова
  • Как получить миниатюру видео HTML5 без использования плаката на сафари или iOS?
  • Видео не работает на GMSMarker
  • IOS - может ли UISaveVideoAtPathToSavedPhotosAlbum вернуть сохраненный путь к видео?
  • PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.