type
status
date
slug
summary
tags
category
icon
password
本文介绍了如何使用ffmpeg将长视频拆分成多个小片段。提供了指定拆分节点的代码和随机拆分的代码。指定拆分节点的代码需要在数组中传入想要拆分的时间节点,而随机拆分的代码则直接生成随机的拆分片段。同时提到了在拆分视频时需要使用特定的命令来避免出现黑屏情况。
背景
前面写了好几篇通过ffmpeg来操作视频的文章,写到了用ffmpeg给视频添加高斯模糊,用moviepy给视频添加标题,视频的分辨率格式转换等话题,这一篇呢,来讲一讲,如何将一个比较长的视频,拆分成你想要的多段视频小片段。相信还是有点用的,当然了,你也可以通过剪映等视频剪辑软件来操作,也很好的。
具体的代码(指定拆分)
在罗列代码前,先说下思路,本文提供的代码,是需要你指定具体的拆分节点的,比如第30秒,第1分40秒,第5分钟等等。节点需要你提供。这样拆分的更加精准,如果说,你不在乎,想要随机拆分,那么本文会在文章的最后部分也给出一个简单的随机拆分片段的python代码.
这里先讲,指定拆分节点的代码。
脚本名:
split_video_by_time_intervals.py
还是跟前面的一样,将需要拆分的mp4格式的视频,放在跟这个脚本所在的目录下,也可以拆分非mp4的视频,可能相应的代码细节上需要调整,具体的请仔细阅读代码。
在
time_intervals = ["0:00", "0:08","0:57"]
这个数组里面,传入你想要拆分的节点,这个节点,就只能你自己看一遍你的目标视频,然后记录下要拆分的时间节点就好了。还有传入这个视频名称以及输入的视频片段的目录名称.以上三个就是传入的参数了,接着说一下
split_video_by_time_intervals
函数的逻辑。可以看到有一个for循环的逻辑,在这个循环里面,会取出每一个拆分的片段起始时间以及结束时间,用上面的time_intervals
数组的值为例来举例。第一次循环,拆分的事从第0秒到第8秒,ffmpeg会把视频的0-8秒给拆分出来。这里还有一个关键的东西,需要提一下,
使用 -avoid_negative_ts make_zero 选项:这种方法可能会导致输出视频在拆分点之前开始,但可以让所有播放器正确播放这些文件
ffmpeg里面的命令需要加上这个东西,不加容易出现拆分出来的视频第一个画面是黑的,加上这个,会导致时长节点不是特别精准,但是可以保证播放的画面正常。不会一开始就出现黑的情况。第二次循环从第8秒到第57秒,拆分的就是8-57秒的片段,最终程序运行完毕,会得到两个拆分的片段。
随机拆分
代码其实是有些类似的,这里就不跟上面的一步步解释了,直接看代码。
脚本名称:
split_video_random.py
总结
最开始剪映不太会用,也不想学习视频剪辑,就用代码的方式取巧规避,也算是达到了效果呢,不过最好都要会,这样才是最棒的,哈哈😄。