gpt4 book ai didi

ios - 将 AVI 视频转换为 MP4 视频(用于在 iOS 上播放)

转载 作者:行者123 更新时间:2023-12-01 16:21:58 26 4
gpt4 key购买 nike

我有一个视频文件,它是由第三方库生成的,它正在从远程摄像机录制视频。此 API 以 4fps 的速度生成 AVI 格式的视频文件,我的示例为 352x288px

我一直在尝试转换视频以便在 iOS 中播放。我知道 iOS 只支持有限范围的视频格式,我一直在努力让一切正常。

我尝试使用以下内容,它基于 iOS Convert AVI to MP4 Format programatically ...

import UIKit
import AVFoundation

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}

@IBAction func convert(_ sender: Any) {
makeItSo()
}

func makeItSo() {

guard let inputUrl = Bundle.main.url(forResource: "DVR8-4580V, Channel 7", withExtension: "avi") else {
print("Could not find video source")
return
}

let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
let documentsDirectory = paths[0]
let filePath = URL(fileURLWithPath: documentsDirectory).appendingPathComponent("MyVideo.mp4").absoluteString
let outputURL = URL(fileURLWithPath: filePath)
print("OutputURL = \(outputURL)")
convertVideoToLowQuailty(withInputURL: inputUrl, outputURL: outputURL, handler: { exportSession in
guard let exportSession = exportSession else {
print("No export session")
return
}
print("exportSession.status = \(exportSession.status)")
if exportSession.status == .completed {
// Video conversation completed
print("Video converstion completed")
} else {
print("Error = \(exportSession.error)")
}
})
}

func convertVideoToLowQuailty(withInputURL inputURL: URL?, outputURL: URL?, handler: @escaping (AVAssetExportSession?) -> Void) {
if let anURL = outputURL {
try? FileManager.default.removeItem(at: anURL)
}
var asset: AVURLAsset? = nil
if let anURL = inputURL {
asset = AVURLAsset(url: anURL, options: nil)
}
var exportSession: AVAssetExportSession? = nil
if let anAsset = asset {
exportSession = AVAssetExportSession(asset: anAsset, presetName: AVAssetExportPresetPassthrough)
}
exportSession?.outputURL = outputURL
exportSession?.outputFileType = .mp4
exportSession?.exportAsynchronously(completionHandler: {
handler(exportSession)
})
}

}

还有其他几个变体,但都失败了。上面的代码失败了:

Error = Optional(Error Domain=AVFoundationErrorDomain Code=-11822 "Cannot Open" UserInfo={NSLocalizedFailureReason=This media format is not supported., NSLocalizedDescription=Cannot Open, NSUnderlyingError=0x283244bd0 {Error Domain=NSOSStatusErrorDomain Code=-16976 "(null)"}})

所以我假设要么我没有向转换器提供正确的选项/建议,要么只是 AVFoundation 不支持这种类型的操作。

下面是MediaInfo生成的信息

General
Complete name : /Users/swhitehead/Downloads/DVR8-4580V, Channel 8.avi
Format : AVI
Format/Info : Audio Video Interleave
File size : 361 KiB
Duration : 28s 500ms
Overall bit rate : 104 Kbps

Video
ID : 0
Format : AVC
Format/Info : Advanced Video Codec
Format profile : Baseline@L2
Format settings : 1 Ref Frames
Format settings, CABAC : No
Format settings, ReFrames : 1 frame
Format settings, GOP : M=1, N=4
Codec ID : H264
Duration : 28s 500ms
Bit rate : 101 Kbps
Width : 352 pixels
Height : 288 pixels
Display aspect ratio : 1.222
Frame rate : 4.000 fps
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : Progressive
Bits/(Pixel*Frame) : 0.249
Stream size : 351 KiB (97%)

问题

有什么方法可以将这种类型的视频文件转换为支持 iOS 播放的 mp4 格式?

nb:我明白这可能是一个广泛的问题,因为可能不存在简单的解决方案,但即使是一些建议或提示也会受到赞赏,因为它让我发疯

最佳答案

使用没有“格式设置,GOP:M=1,N=4”的视频。

当我使用没有设置GOP格式的视频时,可以成功导出。

关于ios - 将 AVI 视频转换为 MP4 视频(用于在 iOS 上播放),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55945346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com