我有一個項目目前使用H.264編碼器在iOS上錄製視頻。我想嘗試在iOS 11中使用新的HEVC編碼器來減小文件大小,但是發現使用HEVC編碼器會導致文件大小膨脹。 Here's a project on GitHub that shows the issue - it simultaneously writes frames from the camera to files using the H.264 and H.265 (HEVC) encoders, and the resulting file sizes are printed to the console.在iOS上使用HEVC編碼器輸出視頻大小
的AVFoundation類是設置這樣的:
class VideoWriter {
var avAssetWriterInput: AVAssetWriterInput
var avAssetWriter: AVassetWriter
init() {
if #available(iOS 11.0, *) {
avAssetWriterInput = AVAssetWriterInput(mediaType: AVMediaType.video, outputSettings: [AVVideoCodecKey:AVVideoCodecType.hevc, AVVideoHeightKey:720, AVVideoWidthKey:1280])
}
avAssetWriterInput.expectsMediaDataInRealTime = true
do {
let url = directory.appendingPathComponent(UUID.init().uuidString.appending(".hevc"))
avAssetWriter = try AVAssetWriter(url: url, fileType: AVFileType.mp4)
avAssetWriter.add(avAssetWriterInput)
avAssetWriter.movieFragmentInterval = kCMTimeInvalid
} catch {
fatalError("Could not initialize AVAssetWriter \(error)")
}
}
...
然後幀這樣寫的:
func write(sampleBuffer buffer: CMSampleBuffer) {
if avAssetWriter.status == AVAssetWriterStatus.unknown {
avAssetWriter.startWriting()
avAssetWriter.startSession(atSourceTime: CMSampleBufferGetPresentationTimeStamp(buffer))
}
if avAssetWriterInput.isReadyForMoreMediaData {
avAssetWriterInput.append(buffer)
}
}
,因爲他們進來的AVCaptureVideoDataOutputSampleBufferDelegate
。在我錄製的品質(720p或1080p)中,HEVC編碼視頻的文件大小應該是相同的H.264編碼視頻的40-60%,而我在使用默認相機應用時會看到這一點iOS,但是當我使用AVAssetWriter(或上面鏈接的項目)時,我看到HEVC的文件大小比使用H.264時的大三倍。要麼我做錯了什麼,或者HEVC編碼器工作不正常。我是否錯過了一些東西,或者有什麼解決方法讓HEVC通過AVFoundation工作?
我收到了類似的迴應蘋果。顯然,H.264的默認比特率是5mbit,HEVC是30mbit。如果我嘗試了這一點,它會起作用,我會報告並接受你的答案! – jpetrichsr