ffmpeg -ss 00:00:00 -t 00:00:30 -i test.mp4 -vcodec copy -acodec copy OUTPUT.mp4,下面我们就来说一说关于ffmpeg如何增加新功能:ffmpeg裁剪与合并命令?我们一起去了解并探讨一下这个问题吧!

ffmpeg如何增加新功能:ffmpeg裁剪与合并命令

ffmpeg如何增加新功能:ffmpeg裁剪与合并命令

剪切视频

ffmpeg -ss 00:00:00 -t 00:00:30 -i test.mp4 -vcodec copy -acodec copy OUTPUT.mp4

* -ss 指定从什么时间开始

* -t 指定需要截取多长时间

* -i 指定输入文件

这个命令就是从00秒开始裁剪到00 30=30秒结束,总共30秒的视频。这个命令执行很快,因为只是原始数据的拷贝,中间没有什么编码和解码的过程。执行这个命令后你能得到output.mp4这个输出文件。你可以用视频播放软件播放这个视频看看。可能有些视频裁剪后的效果,如期望一致,00秒开始,30秒结束,总共30秒的视频,但是有些视频裁剪后你会发现可能开始和结束都不是很准确,有可能是从00秒开始,33秒结束。这是为什么呢?因为这些视频里30秒处地方刚好不是关键帧,而ffmpeg会在你输入的时间点附近圆整到最接近的关键帧处,然后做接下来的事情。如果你不懂什么是关键帧,没关系,这也不影响你使用这个命令。

如果你的项目要求能够接受几秒的误差,那么这个命令完全就可以满足你的需要,接下来的内容你也没有必要往下看了。如果你的项目里要求很严格,一定要到确定的时间。那么就要用另外一种方式。上面的造成那样的原因是所选的时间不是关键帧,那如果我们将输入的视频先转换成所有的帧都为关键帧的视频,其实就是将所有的帧的编码方式转为帧内编码(不理解帧内编码也没关系,你就当没看见它,接着往下看),这个问题就有解了。ffmpeg也可以帮我们完成这个事情。ffmpeg -i INPUT -sameq -intra OUTPUT-i 输入,后面是空格,紧跟着就是输入视频文件;INPUT 输入文件;-sameq 表示保持同样的视频质量;-intra, 帧内编码;OUTPUT 输出文件名。

如:ffmpeg -i ./MyVideo.mpg -sameq -intra ./temp.mpg这个命令的结果文件就是./temp.mpg.这个文件的视频和./MyVideo.mpg是一样的,但是你会发现这个文件会比./MyVideo.mpg大很多倍,原因就是转换前一般采用的帧间编码,转换后变成了帧内编码。这里我们说是一般,原因是有些视频文件本身就采用了帧内编码。经过这样的处理后,我们就可以精确的剪切视频了。

注意

上面的命令在新版本中已经废弃,可以参考下面的命令

ffmpeg -i output.mp4 -strict -2 -qscale 0 -intra keyoutput.mp4

二 合并视频

上面我们可以将一个视频中感兴趣的部分裁剪出来,比如我们裁剪出3段视频,而裁剪出来的视频,我们不想它是一个一个的,而是一整个。总的需求就是给定一个视频,用户可以挑选出自己喜欢的一些时间段,然后开始裁剪,最后得到那些挑选的时间段组成的视频。

要完成这个任务,有了前面我们裁剪视频的基础就好办多了,利用前面的方法将各个感兴趣的视频裁剪出了,这样得到多个小视频,然后再用下面的方法就可以实现:

现在这里声明一下,下面红色的部分是我早之前的版本,是错误,因此误导了大家,非常的抱歉。

所以直接忽略红色的部分,看后面的内容

合并成一个完整的视频:

ffmpeg -i INPUT1 -i INPUT2 -f FORMAT -acodec AUDIOCODEC -vcodec VIDEOCODEC -sameq OUTPUT

这里的几乎所有用到的参数已经在上面做过解释,除了-f.

-f FORMAT, 表示视频的格式。如-f MP4, 那么我们的视频格式就是MP4。

另外,你几个想要的合并的视频就加入几个-i [Input file], 例如下面我有2个视频要合并.

ffmpeg -i D:/MyVideo1.avi -i D:/MyVideo2.avi -f mp4 -acodec libfaac -vcodec libx264 -sameq D:/Result.avi

这里的Result.avi, 你也可以改成是Result.mp4, 也没有问题。

如果你发现执行完上面的命令后,结果视频(result.avi)不是2个视频的合并,可能是前面你合并视频的时候2个视频的格式不一致导致,或者你所使用ffmpeg的版本有这个bug,你可以换下面的方法再尝试。

1. 将要合并的视频先转换成统一的格式,包括编码格式,帧率,尺寸。

ffmpeg -i [input] -f mpeg -r 25 [out]

2. 让后用copy或者cat命令合并。】

1. 首先将各个视频全部转换为mpeg格式:

ffmpeg -i INPUT -f mpeg OUTPUT

例如:

ffmpeg -i D:/temp1.avi -f mpeg D:/result1.mpg

ffmpeg -i D:/temp2.mp4 -f mpeg D:/result2.mpg

2. 通过copy或者cat命令合并视频

copy -b INPUT INPUT OUTPUT

例如:

copy /b "D:/result1.mpg" "D:/result1.mpg" "D:/result.mpge"

3. 将合并的视频进行编码生成最终的结果视频

ffmpeg -i INPUT -f FORMAT OUTPUT

例如:

ffmpeg -i "D:/result.mpge" -f mp4 "D:/result.mp4"

,