为啥 AVAsset 轨道对于同一个视频文件有不同的 timeRange?

Posted

技术标签:

【中文标题】为啥 AVAsset 轨道对于同一个视频文件有不同的 timeRange?【英文标题】:Why AVAsset tracks has different timeRange for same video file?为什么 AVAsset 轨道对于同一个视频文件有不同的 timeRange? 【发布时间】:2017-09-13 11:20:27 【问题描述】:

为什么AVAsset 轨道对于同一个视频文件有不同的时间范围?

我已在AVAsset 中完全加载媒体文件。我打印该类的轨道属性并接收此信息。

▿ 2 elements
  - 0 : <AVAssetTrack: 0x17000fed0, trackID = 1, mediaType = vide>
  - 1 : <AVAssetTrack: 0x17000fe90, trackID = 2, mediaType = soun>

所以我有同一个媒体文件的一个视频和一个声音AVAssetTrack

所以我打印每个 AVAssetTrack 的 timeRange。

所以对于视频:

▿ CMTimeRange
  ▿ start : CMTime
    - value : 0
    - timescale : 1000
    ▿ flags : CMTimeFlags
      - rawValue : 1
    - epoch : 0
  ▿ duration : CMTime
    - value : 5000
    - timescale : 1000
    ▿ flags : CMTimeFlags
      - rawValue : 1
    - epoch : 0

还有声音。

▿ CMTimeRange
  ▿ start : CMTime
    - value : 0
    - timescale : 1000
    ▿ flags : CMTimeFlags
      - rawValue : 1
    - epoch : 0
  ▿ duration : CMTime
    - value : 5002
    - timescale : 1000
    ▿ flags : CMTimeFlags
      - rawValue : 1
    - epoch : 0

那么为什么声音AVAssetTrack 的持续时间比视频长呢?那是针对同一个视频文件。

【问题讨论】:

【参考方案1】:

请问文件是从哪里来的?也许它是由用户在单独编辑后将音频轨道和视频轨道合并到一个合成中创建的。在编辑文件时,他创造了这个小差异。通常,通过 AVMutableComposition,您可以合并任何您想要的资产,时间范围不必相同。所以我不会对你的发现感到惊讶。

【讨论】:

以上是关于为啥 AVAsset 轨道对于同一个视频文件有不同的 timeRange?的主要内容,如果未能解决你的问题,请参考以下文章

使用多个音频类型的 AVAsset 轨道切换 AVURLAsset 的音轨

更改 AVAsset 的首选数量

使用 AVAssetReader 读取多个轨道

将AVAsset视频文件拆分为块

使用 AVAsset/AVCaptureSession 裁剪视频

在 iOS 中为 AVAsset 检索 AVMetadataItem 上的键名