我正在努力使用expo-av
制作逐帧视频播放器。
我实际上是这样做的:
- 用
ffmpeg-kit-react-native
(FFprobeKit.getMediaInformation(src)
)解析视频信息 - 手动计算帧长
- 当按下"下一帧"按钮时,我用
video.setPositionAsync(position + frameRateLength, { toleranceMillisBefore: 0, toleranceMillisAfter: 0 })
更新视频位置
虽然这对于大多数30fps视频来说是ok的,但当读取从iPhone以高帧率拍摄的视频时,它实际上是非常错误的。我想这是因为他们有一个可变的帧率。
能够正确解析高帧率实际上是我想要我的应用程序做什么,所以是否有办法解决这个问题使用expo-av
或其他视频库的反应原生?
也许你可以尝试用expo-video-thumbnails
来生成缩略图,而不是使用ffmpeg,有一种方法可以让你在毫秒内提取缩略图,所以它是相当精确的,然后你可以将缩略图显示为图片,而不是使用AV播放器。
例如,如果你想每16毫秒(约60fps)一个帧
let thumbnailsArray =[];
for (let i=0, i<yourVideoLength/16, i++) {
const { uri } = await VideoThumbnails.getThumbnailAsync(yourVideoUrl,{time: 16*i});
thumbnailsArray.push(uri);
}