gpt4 book ai didi

android - 使用 FFmpeg Android 快速准确地修剪视频,如 Instagram

转载 作者:行者123 更新时间:2023-11-30 01:17:31 30 4
gpt4 key购买 nike

我知道之前有人问过这个问题,但我还找不到快速准确的解决方案,我想剪裁最长 15 秒的视频。到目前为止,这是我尝试过的方法,我正在使用此视频作为示例:http://www.sample-videos.com/video/mp4/720/big_buck_bunny_720p_30mb.mp4

最快的方法

这是迄今为止最快的方法,因为它不需要重新编码视频,但它在这个视频中非常不准确,因为关键帧是每 5-10 秒一次:

ffmpeg -i SampleVideo_1280x720_30mb.mp4 -ss 30 -to 50 -c copy -y out.mp4

以下是我如何检查此视频中的关键帧:

ffprobe -select_streams v -show_frames -show_entries frame=pict_type -of csv SampleVideo_1280x720_30mb.mp4 | grep -n I | cut -d ':' -f 1

通过这个命令,我发现第二个关键帧在第 211 帧,这意味着第一个关键帧和第二个关键帧之间有 210 帧,知道这是一个 25fps 视频,关键帧之间大约有 8 秒,所以1-8 秒之间的任何剪辑都会落入其中一个帧,这对于 15 秒的视频来说是一个巨大的差异。

准确的方法

这种方式是准确的,但需要重新编码视频:

ffmpeg -i SampleVideo_1280x720_30mb.mp4 -ss 30 -to 50 -preset ultrafast -y out.mp4

问题是这个命令需要超过 20 秒才能完成使用超快预设,在三星 Galaxy s6 edge plus 中,这在其他设备中可能会更多。

不过,如果我在 Instagram 中打开 SampleVideo_1280x720_30mb.mp4 并对其进行修剪,它们会在不到 2 秒的时间内得到准确的修剪。

我也尝试每秒强制关键帧,但它也需要重新编码视频并且会影响视频质量:

ffmpeg -i SampleVideo_1280x720_30mb.mp4 -force_key_frames "expr:gte(t,n_forced*1)" out.mp4

有人知道 Instagram 如何修剪视频或使用 FFMpeg 进行快速准确修剪的方法吗?

最佳答案

我想通了 Instagram 是做什么的,基本上没有办法更快更准确地修剪视频。因此,为了向用户展示预览,我执行了以下操作:

  • 当用户移动拇指以设置新的剪切位置时,我会截取视频播放器显示的当前图像。

  • 用微调器将一个与视频播放器大小相同的 ImageView 放在它上面,这样视频播放器就不再可见了。

  • 将视频播放器静音并在用户所需位置之前寻找最近的关键帧。

  • 从关键帧开始播放视频,并计算从关键帧到所需位置的时间。

  • 隐藏 ImageView 并取消视频静音。

因此,在我用作示例的视频中,第一个关键帧在第 0 秒,第二个关键帧在第 8 秒。假设用户想在第二个 3 进行剪辑,那么我会寻找到第二个 0 的关键帧并等待 3 秒,然后取消静音并显示视频。这样,用户只需等待 3 秒即可看到预览​​。

当用户接受预览时,真正的修剪稍后在后台进程中进行。

关于android - 使用 FFmpeg Android 快速准确地修剪视频,如 Instagram,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37626341/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com