快速剪辑长视频片段

时间:2020-01-30 00:50:02

标签: ffmpeg

假设我有一个名为Concert.mp4的视频。我想以最少的重新编码快速从中提取性能。我想这样做,但速度更快:

ffmpeg -i "Concert.mp4" -ss 00:11:45 -to 00:18:15  -preset veryfast -y artist.mp4

这需要17秒,对于我们的需求来说太长了。

现在,事实证明11:45和18:15不会落在iframe上,因此,如果您尝试这样做,则会在视频播放开始时出现3秒钟的延迟:

ffmpeg -i "Concert.mp4" -ss 00:11:45 -to 00:18:15 -c copy -y artist.mp4

运行此命令,我们可以看到需要切割的地方:

ffprobe -read_intervals "11:00%19:00" -v error -skip_frame nokey -show_entries frame=pkt_pts_time -select_streams v -of csv=p=0 "Concert.mp4" > frames.txt

因此,我们需要对前3.708秒进行编码,复制中间的内容,然后对后5.912秒进行编码。

我可以使这3个片段看起来完全完美(单独):

ffmpeg -ss 698.698 -i "Concert.mp4" -ss 6.302 -t 3.708 -c:v libx264 -c:a copy -c:s copy -y clipbegin.mp4

ffmpeg -ss 708.708 -to 1089.088 -i "Concert.mp4" -c copy -y clipmiddle.mp4

ffmpeg -ss 1089.088 -i "Concert.mp4" -t 5.912 -c:v libx264 -c:a copy -c:s copy -y clipend.mp4

ffmpeg -f concat -i segments.txt -c copy -y artist.mp4

segments.txt当然包含以下内容:

file 'clipbegin.mkv'
file 'clipmiddle.mkv'
file 'clipend.mkv'

我在这里看到了此解决方案,但是没有任何调整使其对我有用:

https://superuser.com/a/1039134/73272

据我所知,这种方法根本不起作用。无论我尝试什么,都会使VLC崩溃。

3秒后,合并的视频继续出现故障,可能是因为PTS时间不同或有所不同(使用某些选项,我已经看到了有关此效果的警告消息)。我可以在上述命令中添加任何内容以使其正常工作吗?唯一的要求是,中间命令不得重新编码视频,而必须进行快速复制。

谢谢。

1 个答案:

答案 0 :(得分:0)

好的,所以答案只是最新的VLC似乎有问题。我在上方所做的操作在ffplaymplayerPotPlayer的切入点处稍有停顿就可以了。

按照@Gyan的建议,我将配置文件和级别设置为与原始匹配(使用-profile:v main -level:v 4),甚至略微停顿也消失了。

ffmpeg -ss 698.698 -i "Concert.mp4" -ss 6.302 -t 3.708 -c:v libx264 -c:a copy -c:s copy -profile:v main -level:v 4 -y clipbegin.mp4
ffmpeg -ss 708.708 -to 1089.088 -i "Concert.mp4" -c copy -y clipmiddle.mp4
ffmpeg -ss 1089.088 -i "Concert.mp4" -t 5.912 -c:v libx264 -c:a copy -c:s copy -profile:v main -level:v 4 -y clipend.mp4
ffmpeg -f concat -i segments.txt -c copy -y artist.mp4