python处理多个视频,拼接成一个视频,ubuntu。

一、参考资料以及解决部分问题(imageio.ffmpeg.download() haa been deprecated)
在网上查阅了许多方法,大部分是直接使用moviepy库和imageio ,但是执行代码后,一直运行不了,报错如下:
在这里插入图片描述
查阅资料,说修改最新版本能解决,(这里附上解决方法,如果能帮到其他人的话,我更新了版本还是有这个问题,不知道怎么回事)。

pip install imageio==2.4.1

二、自己写的方法
1、配置环境:
ffmpeg
opencv

2、先对视频进行抽帧再拼接
由于视频前50帧读取不出来,所有写了个if判断条件,从第80帧开始读取(没有该问题的可以注释掉)。

3、video_size是输出的视频的尺寸,需要根据自己的电脑参数修改,’/media/Data/output.mp4’是输出视频的保存位置,

import subprocess
import cv2 as cv
import os

video_size = '1920x1080'
command = ['ffmpeg',
           '-y', '-an',
           '-f', 'rawvideo',
           '-vcodec', 'rawvideo',
           '-pix_fmt', 'bgr24',
           '-s', video_size,
           '-r', '25',
           '-i', '-',
           '-c:v', 'libx264',
           '-pix_fmt', 'yuv420p',
           '-preset', 'ultrafast',
           '/media/Data/output.mp4']          

pipe = subprocess.Popen(command, shell=False, stdin=subprocess.PIPE)

# 定义一个数组
L = []

# 访问 video 文件夹
for root, dirs, files in os.walk("/media/Data/"):
    # 按文件名排序
    files.sort()
    # 遍历所有文件
    for file in files:
        # 如果后缀名为 .mp4
        if os.path.splitext(file)[1] == '.mp4':
            # 拼接成完整路径
            filePath = os.path.join(root, file)
            # print(filePath)
            cap = cv.VideoCapture(filePath)
            counter = 0
            while True:
                try:
                    _, frame = cap.read()
                    counter += 1
                    print(files, counter, frame.shape)
                    if counter > 80:
                        pipe.stdin.write(frame.tostring())
                except:
                    break


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值