我正在寻找一种方法来接收任何视频(在 iOS 上受支持)作为输入,并在设备上保存具有新每秒帧率的新视频。这样做的动机是减小视频大小,并尽可能降低其权重。
- 尝试从命令行使用 ffmpeg 库(需要它直接从应用程序运行)
- 尝试使用 SDAVAssetExportSessionDelegate,但只能每秒更改位(每帧质量较低)
虽然使用 OpenCV - 但更喜欢更轻量级的东西并尽可能内置
Objective-C : '''
compressionEncoder.videoSettings = @ { AVVideoCodecKey: AVVideoCodecTypeH264, AVVideoWidthKey: [NSNumber numberWithInt:width], //Set your resolution width here AVVideoHeightKey: [NSNumber numberWithInt:height], //set your resolution height here AVVideoCompressionPropertiesKey: @ { AVVideoAverageBitRateKey: [NSNumber numberWithInt:bitRateKey], // Give bitrate for lower size low values AVVideoProfileLevelKey: AVVideoProfileLevelH264High40, // Does not change - quality setting and not reletaed to playback framerate! //AVVideoMaxKeyFrameIntervalKey: @800, }, }; compressionEncoder.audioSettings = @ { AVFormatIDKey: @(kAudioFormatMPEG4AAC), AVNumberOfChannelsKey: @2, AVSampleRateKey: @44100, AVEncoderBitRateKey: @128000, };
'''
预期每秒帧数较少的视频,每个帧的质量相同。类似于视频的简短缩略图摘要
最佳答案
您正在进行的转换类型会在移动设备上耗费时间和电量,但我猜您已经意识到这一点。
鉴于您的最终目标是减小大小,同时大概保持合理的质量,您可能会发现您想在编码中尝试不同的设置等。
对于这种类型的视频操作,ffmpeg 是一个不错的选择,您可能从命令行用法中看到了这一点。要从应用程序中使用 ffmpeg,一种常见的方法是使用支持良好的“ffmpeg 包装器”——这可以有效地从您的应用程序中运行 Ffmpeg 命令行命令。
优点是所有常用语法都应该有效,您可以利用网络上有关 ffmpeg 命令行语法的大量信息。缺点是 ffmpeg 并非设计为像这样包装,因此您可能会看到一些问题,尽管使用支持良好的包装器您应该找到帮助或其他人已经解决了这些问题。
流行的 iOS ffmpeg 包装器的一些示例:
关于c++ - 是否有一个 API 可以在 iOS 上运行以更改现有视频的每秒帧数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58414631/