是否有可以在iOS上运行的API来更改现有视频的每秒帧数?

Is there an API that will run on iOS in order to change the Frame Per Second of an existing video?

本文关键字:视频 API iOS 是否 运行      更新时间:2023-10-16

我正在寻找一种方法来接收任何视频作为输入(iOS 支持(,并在设备上保存具有新每秒帧数速率的新视频。动机是减小视频大小,并使其尽可能轻巧。

  • 尝试从命令行使用 ffmpeg 库(需要它直接从应用程序运行(
  • 尝试使用SDAVAssetExportSessionDelegate,但仅设法更改每秒位数(每个帧质量较低(
  • 虽然使用 OpenCV - 但更喜欢更轻的东西,如果可能的话,还可以内置

    目标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 命令行命令。

优点是所有常用语法都应该有效,您可以在 Web 上利用有关 ffmpeg 命令行语法的大量信息。缺点是 ffmpeg 并非不是设计为像这样包装的,因此您可能会看到一些问题,尽管使用支持良好的包装器,您应该找到帮助或其他人已经解决了这些问题。

一些流行的iOS ffmpeg包装器的例子:

  • https://github.com/tanersener/mobile-ffmpeg
  • https://github.com/sunlubo/SwiftFFmpeg

启动并运行 MobileFFMpeg: https://stackoverflow.com/a/59325680/1466453

一旦您可以在IOS代码中进行MobileFFMpeg调用,那么使用此代码更改帧速率非常简单:

[MobileFFmpeg execute: @"-i -filter:v fps=fps=30 "];