用 ffmpeg 实现批量剪切视频

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/miao9999/article/details/79189534

一直对编辑视频很有兴趣,上大学的时候学了一些视频剪辑的软件,已经好久没用了,现在也都忘的差不多了。前段时间弄了个头条号,想发一些视频,就又想做视频这回事了,要不还真快忘记自己曾经做过一些小视频了(捂脸)。其实现在想要做的视频,不需要做很多特效,也不需要做配字幕等这些内容,所以不是很难,但是要做的量比较多,算起来要花费的时间也不算少,但是又不想在这件事上浪费太多的时间,嗯,这个时候懒的特质就该展示它的作用了。既然自己不想做,那就只好想办法让机器做了,于是就发现还真不是我一个人这么懒(哈哈)。我用的是 mac,就以这个系统为例记录一下这个过程,至于 windows 怎么办,自己试吧,因为我懒得试那个了。

既然是用 ffmpeg,当然第一步就是要下载 ffmpeg 。使用 Homebrew 。 Homebrew 用法

brew install ffmpeg

下载好之后就可以开始了

ffmpeg -i “input.mp4” -ss 2 -to 3 -acodec copy -vcodec copy “output.mp4”

-i ,-ss,-to 等等都是 ffmpeg 的命令,详解可以参考这篇文章

这样一条命令只能操作一次,如果想要剪辑多条,这样的命令就要重复多次,显然不能用剪一次换个参数再输入一次这条命令,这样效率太差了不是我们想要的,那么该用什么方法呢?多次执行一个操作,我们第一个想到的就是循环, 但如何在终端里循环呢,这又是个问题。首先想到既然要写循环,那么就需要使用一种语言来写,面这种语言在运行时可以控制 terminal 执行循环里的命令。这时就想到用 shell 来写,shell 的教程可以参考菜鸟教程

startTime=0
endTime=0
length=3697
i=0
while [ $endTime -le $length ]; do
    #statements
    i=$[$i+1]
    endTime=$[$startTime+280]
    ffmpeg -i /Users/dddd/Downloads/S01.E01.mp4  -ss $startTime -to $endTime -acodec copy -vcodec copy $i.mp4
    startTime=$[endTime]


done

这是我写一个每隔 280s 切割一个视频的脚本,一个多小时的视频切成 14 个视频也就只用了不到 5 分钟,速度还是可以的,时间也很精确。对于视频时间的问题,这几天一直在遇到,在项目中也遇到了处理视频的功能,有几个功能需要根据一定的条件定位到相应的时间点去播放,但是由于视频关键帧的问题,定位的时候,它总是会寻找与当前位置最近的关键帧,然后跳到关键帧的位置,这就会出现定位不准的问题,如果用过格式工厂的朋友肯定也遇到过这样的问题,目前对于截视频找到了这种方法,但是对于在项目中定位不准的问题还是没能好的解决方法。在网上也找过一些资料,大多都是通过添加视频关键帧的方法解决的,但这不是我想要的方法,还在寻找当中。。。

猜你喜欢

转载自blog.csdn.net/miao9999/article/details/79189534