【问题标题】:Use two AVAssetWriters simultaneously to create two version of same video input同时使用两个 AVAssetWriters 创建两个版本的相同视频输入
【发布时间】:2016-02-06 23:27:41
【问题描述】:

如果您想创建相同视频输入的两个版本,一个已过滤,一个未处理,同时使用两个 AVAssetWriters 是否有缺点?

根据this SO post,不可能(至少在 2011 年)将 AVCaptureVideoDataOutput 与 AVCaptureMovieFileOutput 一起使用,因此希望将两个 AVAssetWriters 一起使用可以解决问题。只是想知道是否有不明显的问题需要注意。

【问题讨论】:

    标签: swift avfoundation avassetwriter avasset


    【解决方案1】:

    我们使用了两个 AVAssetWriters 没有问题。我想不出真正的“陷阱”,但有一些注意事项:

    • 很明显,硬件越旧,就越困难(我们使用的是 iPhone 6 及更高版本,完全没有问题)。
    • 输出文件的大小会影响性能,因此为了实现最快的编译速度,请考虑使用更小的分辨率。
    • 不清楚您是在实时合成还是后期处理。如果您在进行后期处理,则应该不会有任何问题(除了会稍微慢一些),但如果您正在实时编写,那么如果性能受到影响,您可能会看到丢失的缓冲区。

    根据我的尝试经验,看不出有任何理由不尝试解决方案,它应该可以正常工作。

    【讨论】:

    • 酷,谢谢!你是如何将输出视频与视频预览相匹配的?换句话说,如果您在 5S 上使用 1920x1080 的捕获分辨率,它会使用 AVLayerVideoGravityResizeAspectFill 显示清晰的 320x568 预览,但是当缩小视频时,最终版本就不那么清晰了。你的输出和预览一样清晰吗?谢谢!
    • BTW Mixbit 是一个很棒的应用程序!
    • 我会调查您作为 AVAssetWriterInput 的 outputSettings 传递的内容。这就是您控制要写出的质量的地方。通过 AVCaptureVideoPreviewLayer 显示缓冲区的方式和写入磁盘的内容应该是两件不同的事情。在使用 CMSampleBuffer 上的过滤器之前,请确保您对获得的未过滤输出感到满意,这样您就会知道是您的操作降低了质量,而不是写入管道。
    • 谢谢!是的,理解预览层和输出是不同的东西,问题就在这里:将输出与预览匹配。不幸的是,在预览层中很难模仿 AVLayerVideoGravityResizeAspectFill 的锐度。您是否使用高分辨率进行捕捉/预览,并且能够生成与预览一样清晰的视频?
    • 检查您在使用 AVAssetWriterInput 的设置。我们正在使用这个: let videoSettings: [String : AnyObject] = [ AVVideoCodecKey : AVVideoCodecH264, AVVideoWidthKey : captureSize.width, AVVideoHeightKey : captureSize.height, ] 我不能说我注意到 Capture 之间的质量有任何差异和编译的输出(它可能在那里,但它从未引起我的注意)。
    猜你喜欢
    • 2016-04-03
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多