使用FFmpeg Android的Instagram等快速准确的视频剪辑

使用FFmpeg Android的Instagram等快速准确的视频剪辑,android,video,ffmpeg,instagram,mp4,Android,Video,Ffmpeg,Instagram,Mp4,我知道以前有人问过这个问题,但我还没有找到一个快速准确的解决方案,我想用15秒的最大长度来剪辑视频。以下是我到目前为止所做的尝试,我以这段视频为例: 最快的方法 这是迄今为止最快的方法,因为它不需要对视频进行重新编码,但在本视频中非常不准确,因为关键帧每5-10秒一次: ffmpeg -i SampleVideo_1280x720_30mb.mp4 -ss 30 -to 50 -c copy -y out.mp4 以下是我如何检查此视频中的关键帧: ffprobe -select_stream

我知道以前有人问过这个问题,但我还没有找到一个快速准确的解决方案,我想用15秒的最大长度来剪辑视频。以下是我到目前为止所做的尝试,我以这段视频为例:

最快的方法

这是迄今为止最快的方法,因为它不需要对视频进行重新编码,但在本视频中非常不准确,因为关键帧每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
问题在于,在三星galaxy s6 edge plus中,该命令需要20秒以上的时间才能完成超快预设的使用,而在其他设备中,超快预设可能要多得多

尽管如此,如果我在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是怎么做的,基本上没有办法更快地修剪视频。因此,为了向用户显示预览,我执行了以下操作:

  • 当用户移动拇指以设置新的切割位置时,我会拍摄视频播放器显示的当前图像的屏幕截图

  • 使用微调器将与视频播放器大小相同的图像视图放在其顶部,使视频播放器不再可见

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

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

  • 隐藏图像视图并取消视频静音

在我用的视频中,第一个关键帧在0秒,第二个关键帧在8秒。假设用户希望在第二个3中进行剪切,然后我在第二个0处搜索关键帧并等待3秒钟,然后取消静音并显示视频。这样,用户只需等待3秒钟即可看到预览


真正的修剪是在后面的背景过程中进行的,当用户接受预览时。

您在哪里查看Instagram修剪过的文件?我没有检查,但当我用应用程序修剪视频时,需要2秒钟,修剪是否准确我不知道他们是否真的在修剪,但使用seek to也不起作用,因为同样的原因,您如何知道修剪是否准确?您在哪里查看修剪过的文件?我可以在预览中看到它,但在Instagram中看不到文件预览?是的,我不认为这些文件真的被删减了。你介意看看我的问题吗?我想你可以帮我。链接-