Ios 使用AVAssetWriter而不是AVAssetExportSession导出AVMutableVideoComposition

Ios 使用AVAssetWriter而不是AVAssetExportSession导出AVMutableVideoComposition,ios,avfoundation,Ios,Avfoundation,我有一个AVMutableVideoComposition,我想把它导出到一个视频文件中 不幸的是,AVAssetExportSession无法进行剪切,因为我需要对输出视频设置(比特率、关键帧等)进行精细控制 如何从AVMutableVideoComposition中提取图像以将其提供给AVAssetWriterInput 到目前为止,我研究了AVVideoCompositionRenderContext和AVAsynchronousVideoCompositionRequest,但两者似乎都

我有一个
AVMutableVideoComposition
,我想把它导出到一个视频文件中

不幸的是,
AVAssetExportSession
无法进行剪切,因为我需要对输出视频设置(比特率、关键帧等)进行精细控制

如何从
AVMutableVideoComposition
中提取图像以将其提供给
AVAssetWriterInput


到目前为止,我研究了
AVVideoCompositionRenderContext
AVAsynchronousVideoCompositionRequest
,但两者似乎都是死胡同,因为我找不到一个API来呈现我的
AVMutableComposition

,现在我认为这是不可能的

此限制有两种解决方法:

  • 放弃
    AVMutableVideoComposition
    ,使用
    avassetrader
    avassetradertrackoutput

    =>如果你只想观看一些视频,这就是你应该做的

  • 两次通过。使用
    AVMutableVideoComposition
    导出视频一次,然后再次读写

    =>不是最优的,因为我的视频太小,所以我可以侥幸逃脱。 =>如果有转换、
    CIFilters
    和其他复杂操作,编写起来就容易多了


希望下次我能找到一个更干净的解决方案:

现在我认为这是不可能的

此限制有两种解决方法:

  • 放弃
    AVMutableVideoComposition
    ,使用
    avassetrader
    avassetradertrackoutput

    =>如果你只想观看一些视频,这就是你应该做的

  • 两次通过。使用
    AVMutableVideoComposition
    导出视频一次,然后再次读写

    =>不是最优的,因为我的视频太小,所以我可以侥幸逃脱。 =>如果有转换、
    CIFilters
    和其他复杂操作,编写起来就容易多了


希望下次我能找到一个更干净的解决方案:

设置一个
avassetrader
AVMutableVideoComposition
中“读取”视频帧,然后将它们交给
AVAssetWriterInput
。您可以使用
avassetradervideompositionoutput
设置资产读取器,设置
videoComposition
,如果需要,还可以设置
customVideoCompositor
。自定义视频合成器是您可以使用自己的CIFILTER和任何您想要的东西的地方。

设置一个
avassetrader
,从
AVMutableVideoComposition
中“读取”视频帧,然后将其交给
AVAssetWriterInput
。您可以使用
avassetradervideompositionoutput
设置资产读取器,设置
videoComposition
,如果需要,还可以设置
customVideoCompositor
。自定义视频合成器是您可以使用自己的CIFILTER和任何您想要的东西的地方。

哦,天哪,我不知道我怎么会错过它
AVMutableVideoComposition
是AVAsset的一个子类!等等,我说得太快了,把我的
AVMutableComposition
错当成了我的
AVMutableVideoComposition
。虽然
AVMutableComposition
AVAsset
的一个子类,但
AVMutableVideoComposition
不是。因此,
avassetrader
无法使用。您的评论令人费解。是的,你12月12日的评论错误地说AVMVC是AVAsset的一个子类,实际上它是AV[可变]组合,但这不是问题。。。我所说的一切都是正确的。你还有什么不明白的吗?对不起,又是我的错。我重新检查了两次,看起来你是对的,尽管我还不能实现。天哪,我不知道我怎么会错过
AVMutableVideoComposition
是AVAsset的一个子类!等等,我说得太快了,把我的
AVMutableComposition
错当成了我的
AVMutableVideoComposition
。虽然
AVMutableComposition
AVAsset
的一个子类,但
AVMutableVideoComposition
不是。因此,
avassetrader
无法使用。您的评论令人费解。是的,你12月12日的评论错误地说AVMVC是AVAsset的一个子类,实际上它是AV[可变]组合,但这不是问题。。。我所说的一切都是正确的。你还有什么不明白的吗?对不起,又是我的错。我重新检查了两次,看起来你是对的,尽管我还不能实现。