Python 之将小段视频合并

在手机上,或者电脑端,有时候我们看一个视频,网站为了保证页面流畅,总是以 hls 直播视频流的方式将一整段视频切割成一小段一小段的返回给前端。

而我们如果有下载的需求,并且通过该整个视频扒下来,会发现获取到的都是一个个小的视频片段(很多小电影网站都是如此)。
Python 之将小段视频合并_第1张图片
作为一个强迫症患者,我会希望将其整合成一个完整的视频,这是需求。

在网上搜索了一些资料之后,于是确认了使用 moviepy 这个第三方库作为我们的工具。
以下是使用步骤和方法:
注意: 如下操作皆是在 Ubuntu 18.0上操作。

1、安装依赖和 ffmpeg

我们用到的第三方库是 moviepy:

sudo pip3 install moviepy

moviepy 在后台还会调用 ffmpeg 这个东西。

ffmpeg 这玩意儿是个好东西,跟 vlc 一样好,都是用来处理视频的软件,感兴趣的可以多了解一下,这里我们只是需要安装一下:

sudo apt install ffmpeg
2、合并视频

假设我们有一个视频列表 video_list,内容是一个个的视频文件地址

from moviepy.editor import *
video_list = ['1.ts', '2.ts', '3.ts']

L = []
for video_path in video_list:
	video = VideoFileClip(video_path)
	L.append(video)
	
final_clip = concatenate_videoclips(L)
final_clip.to_videofile('./final.mp4', fps= 24, remove_temp=True)

其中 ‘./final.mp4’ 是最终生成的文件,
fps 是每秒钟传输的帧数,比如人眼一般一秒钟能看到的帧数大致就是 24,
而程序最终会生成一个临时文件,remove_temp=True 指的就是将这个临时文件删除。

注意:在我的电脑上,如果一次性合成的文件数过多,也就是 程序中 的 L 数量过大,我的程序就会崩溃,也不知道是电脑的问题,还是 Python 的问题,没研究过。

所以我一般都是十个十个小视频合并在一起,然后再将合成的小视频再十个十个合成,递归之后直到最后生成一个视频文件。

你可能感兴趣的:(python)