Уменьшение размера видео, экспортируемого с помощью AVAssetExportSession - iOS Swift - PullRequest
0 голосов
/ 28 мая 2018

В настоящее время я экспортирую видео следующим образом:

   let exporter = AVAssetExportSession.init(asset: mixComposition, presetName: AVAssetExportPreset1280x720)
   exporter?.outputURL = outputPath
   exporter?.outputFileType = AVFileType.mp4
   exporter?.shouldOptimizeForNetworkUse = true
   exporter?.videoComposition = mainCompositionInst

Видео 15 с потребляет около 20 МБ данных.Сравнивая это с 2-мегабайтными видео Snapchat, этот номер кажется совершенно неприемлемым.

Я уже снизил качество сеанса экспорта и захвата (1280x720).

Видео снято на пользовательскую камеру.UIImagePickerController не используется.

AVAssetExportSession используется с настройками по умолчанию.

Можно ли как-нибудь уменьшить размер моих видео?Большое спасибо!

РЕДАКТИРОВАТЬ 1: Я попытался использовать эту библиотеку: https://cocoapods.org/pods/NextLevelSessionExporter

К сожалению, это создает проблемы с размерами и удаляет мое аудио:

// Creating exporter
    let exporter = NextLevelSessionExporter(withAsset: mixComposition)
    exporter.outputURL = outputPath
    exporter.outputFileType = AVFileType.mp4
    exporter.videoComposition = mainCompositionInst

    let compressionDict: [String: Any] = [
        AVVideoAverageBitRateKey: NSNumber(integerLiteral: 2500000),
        AVVideoProfileLevelKey: AVVideoProfileLevelH264BaselineAutoLevel as String,
        ]

        exporter.videoOutputConfiguration = [
            AVVideoCodecKey: AVVideoCodecType.h264,
            AVVideoWidthKey: NSNumber(integerLiteral: 1280),
            AVVideoHeightKey: NSNumber(integerLiteral: 720),
            AVVideoScalingModeKey: AVVideoScalingModeResizeAspectFill,
            AVVideoCompressionPropertiesKey: compressionDict
        ]

        exporter.audioOutputConfiguration = [
            AVFormatIDKey: kAudioFormatMPEG4AAC,
            AVEncoderBitRateKey: NSNumber(integerLiteral: 128000),
            AVNumberOfChannelsKey: NSNumber(integerLiteral: 2),
            AVSampleRateKey: NSNumber(value: Float(44100))
        ]

enter image description here

Ответы [ 2 ]

0 голосов
/ 25 июля 2019

Я наконец-то взломал это.

Использование exportSession.fileLengthLimit = 1048576 * 10 //10 MB

10MB - жестко закодированное число.Используйте в соответствии с требуемым битрейтом.

fileLengthLimit / * Указывает длину файла, которую выходные данные сеанса не должны превышать.В зависимости от содержимого исходного ресурса, возможно, что вывод немного превысит ограничение длины файла.Длина выходного файла должна быть проверена, если требуется соблюдение строгого предела перед использованием выходных данных.Смотрите также maxDuration и timeRange.* /

0 голосов
/ 01 июня 2018

Чтобы уменьшить размер файла, попробуйте эти свойства для настройки HEVC кодека (используйте какао-стручок NextLevelSessionExporter):

let compressionDict: [String: Any] = [
AVVideoAverageBitRateKey: NSNumber(integerLiteral: 2500000), //lower it if you wish
AVVideoProfileLevelKey: AVVideoProfileLevelH264BaselineAutoLevel as String,
]
exporter.videoOutputConfiguration = [
    AVVideoCodecKey : AVVideoCodecType.hevc,
    AVVideoWidthKey : NSNumber(integerLiteral: 1280),
    AVVideoHeightKey: NSNumber(integerLiteral: 720),
    AVVideoScalingModeKey: AVVideoScalingModeResizeAspectFill,
    AVVideoCompressionPropertiesKey: compressionDict
]

Вам необходимо обновить до macOS High Sierra и iOS 11, чтобыиспользуйте HEVC видеокодек.Но если по какой-то причине вы не можете использовать HEVC, используйте обычный H.264 с меньшим битрейтом.

AVVideoCodecKey : AVVideoCodecType.h264:

enter image description here

Кроме того, посмотрите на этот ТАК пост о битрейте видео в iOS .

...