moviepy使用的坑

moviepy使用的坑

最近打算确定做多媒体跨模态方向,主要是视频和音频之间的生成问题,希望对我这个菜鸟友好一点。。。
由于拖延症晚期,最近终于开始了——数据集的下载orz
还是决定写博客来记录一下,毕竟我记性真的差,顺便督促一下自己,以下代码很多是从各个搜索出来的页面上找的,记不清具体都是哪里的了,所以如果有侵权的话请联系我删除

youtube-dl

首先,我们要有一个数据集(废话x
有些视频数据集是直接打包好的,对于我这种懒人来说十分友好;但也有许多数据集只提供了一个json文件,里面包含了对应的youtube视频id,对于一个编程极差记性又不好的人,我决定记录一下过程。

首先 import

import youtube_dl
import json

然后读取json文件

f = open("data.json","r")
contents = json.load(f)

contents是一个字典

#这里是两层,所以两个key,读取最里层的内容
#我的数据id1是一个列表,里面是这类视频的id列表

id1 = contents[key1][key2]

构造url,调用youtube-dl下载

url = 'https://www.youtube.com/watch?v='
for id in id1:
	url1 = url + str(id)
	print(url1)
	#防止列表里有的视频失效
	try:
		youtube_dl.YoutubeDL().download([url1])
	except:
		print('no video')

moviepy

下载下来的视频一般时长差别很大,我想要把它们剪辑拼接成等长的片段,手工的话实在太耗时,于是搜一搜发现python有现成的视频操作的库moviepy,本来就在我开心地以为胜利就在前方的时候,我的代码又不断报错,瑟瑟发抖,不会写bug的自己就不是真正的自己了,人生艰难
首先记录一下基本操作

  1. 视频拼接
L = []
video1 = VideoFileClip(filePath1)
L.append(video1)
video2 = VideoFileClip(filePath2)
L.append(video2)
final_clip = concatenate_videoclips(L, method='compose')
  1. 视频截取
clip = clip.subclip(start, end)
  1. 获取视频时长(s)
file_time = clip.duration
  1. 写入视频
final_clip.to_videofile(str(file), fps=30, remove_temp=True)

接下来是坑。。。

  1. 报错OSError: [WinError 6] The handle is invalid
    可能是进程的问题,对每一个写入的clip都要关闭相应的进程,具体原因是为啥emmm我不太懂,反正可以解决就ok啦
#在写完后关闭进程
for clip in L:
	close_clip(clip)

具体关闭的函数close_clip写法看这个链接:https://github.com/Zulko/moviepy/issues/823

2.报错 AttributeError: ‘NoneType’ object has no attribute 'stdout’
在解决完上一个问题后,我立马又获得了一个新问题耶/(ㄒoㄒ)/~~
这个问题解决方法请参考:https://github.com/Zulko/moviepy/issues/938
主要有两个解决方法:第一,把moviepy降成1.0.0版;第二,修改AudioFileClip.py文件,具体方法见链接

至此终于可以运行啦( •̀ ω •́ )y

### 使用 MoviePy 进行视频编辑 MoviePy 是一个功能强大的 Python 库,专门用于处理视频文件。它可以轻松实现视频剪辑、合并、转码以及其他复杂的多媒体操作[^1]。 #### 安装 MoviePy 要开始使用 MoviePy,首先需要通过 `pip` 工具将其安装到本地环境中: ```bash pip install moviepy ``` 这一步会自动下载并安装 MoviePy 及其依赖项。 #### 导入 MoviePy 在编写脚本之前,需先导入 MoviePy 的核心模块。以下是基本的导入语句: ```python from moviepy.editor import * ``` 这段代码引入了 MoviePy 中的核心类和函数,使后续的操作更加便捷。 #### 基础操作示例 ##### 1. 加载视频文件 加载视频文件是任何视频编辑任务的第一步。可以通过以下方式读取视频: ```python video = VideoFileClip("input_video.mp4") ``` 上述代码将指定路径中的 MP4 文件加载为可编辑的对象。 ##### 2. 裁剪视频片段 如果只需要提取视频的一部分,可以利用时间参数来裁剪视频: ```python clip = video.subclip(10, 20) # 截取第10秒至第20秒之间的部分 ``` 此方法允许精确控制所需的时间范围。 ##### 3. 合并多个视频 当有多个独立的视频片段时,可以按顺序连接它们形成一个新的连续视频: ```python final_clip = concatenate_videoclips([clip1, clip2, clip3]) ``` 这里展示了如何将三个不同的剪辑组合成单个输出文件。 ##### 4. 添加文字水印 为了增强视觉效果或者标注版权信息,在视频上叠加文本是一种常见做法: ```python text = TextClip("Sample Text", fontsize=70, color='white') result = CompositeVideoClip([video, text.set_position(('center', 'bottom'))]) ``` 该例子说明了创建静态文本标签并将之放置于画面底部的方法。 ##### 5. 输出最终结果 完成所有修改之后,保存新的视频文件以便进一步分享或分发: ```python final_clip.write_videofile("output_video.mp4", codec="libx264", audio_codec="aac") ``` 注意设置合适的编码器选项以确保兼容性和质量。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值