Python常用视频编辑操作——读取与保存视频、更改帧数、拼接视频、视频语音合并、视频与图像互转等

这篇具有很好参考价值的文章主要介绍了Python常用视频编辑操作——读取与保存视频、更改帧数、拼接视频、视频语音合并、视频与图像互转等。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.更改视频帧数

降低视频帧数,简单的操作只能降低视频帧数,如果要增加视频帧数,那就要使用深度学习进行插帧处理:

import cv2
from moviepy.editor import *
def change_fps(inpt_path,output_path,fps):
    # 加载视频
    video = VideoFileClip(inpt_path)

    # 将帧率降低为15帧/秒
    new_video = video.set_fps(fps)

    # 保存为新的文件
    new_video.write_videofile(output_path, codec="libx264")

def change_fps_dir(video_dir,fps):
    file_list = os.listdir(video_dir)

    for file in file_list:
        # 使用os.path.basename()获取文件名(包括后缀)
        file_name = os.path.basename(file)
        out_name = "F" + file_name

        input = os.path.join(video_dir,file_name)
        output = os.path.join(video_dir,out_name)

        change_fps(input,output,fps)

2.把视频拆分成帧保存

def split_video(video_path,save_path):
    # 创建输出目录
    os.makedirs(save_path, exist_ok=True)

    # 打开视频文件
    cap = cv2.VideoCapture(video_path)

    frame_count = 0

    # 读取视频帧并保存为图像
    while True:
        ret, frame = cap.read()

        if not ret:
            break

        # 生成输出图像文件名
        frame_filename = os.path.join(save_path, f'{frame_count:05d}.jpg')

        frame_count += 1

        # 保存帧图像
        cv2.imwrite(frame_filename, frame)

    # 释放视频文件
    cap.release()

    print(f"总共保存了 {frame_count} 帧图像")

3.把拆分图像合成视频

def img_video_merge(img_dir,video_path,frame_rate):
    file_list = os.listdir(img_dir)
    cv_src = cv2.imread(os.path.join(img_dir,file_list[0]))

    fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 使用H.264编解码器

    height, width, channels = cv_src.shape

    # 帧速率和帧大小
    frame_size = (width, height)
    # 创建VideoWriter对象
    out = cv2.VideoWriter(video_path, fourcc, frame_rate, frame_size)

    for file in file_list:
        cv_dst = cv2.imread(os.path.join(img_dir, file))
        out.write(cv_dst)

4.提取视频的音轨

def video_to_audio(video_path,audio_path):
    video = VideoFileClip(video_path)
    audio = video.audio
    audio_temp = "temp.wav"

    if os.path.exists(audio_path):
        os.remove(audio_temp)

    audio.write_audiofile(audio_temp)
    audio.close()

    if os.path.exists(audio_path):
        os.remove(audio_path)
    cmd = "ffmpeg -i " + audio_temp + " -ac 1 -ar 16000 " + audio_path
    subprocess.run(cmd,shell=True)

5.视频与音轨合并

from moviepy.editor import VideoFileClip, AudioFileClip

# 读取视频和音轨
video_clip = VideoFileClip('video.mp4')  # 替换为您的视频文件
audio_clip = AudioFileClip('audio.mp3')  # 替换为您的音轨文件

# 将音轨添加到视频
video_clip = video_clip.set_audio(audio_clip)

# 保存合并后的视频
output_video_path = 'output_video.mp4'
video_clip.write_videofile(output_video_path, codec='libx264')

# 关闭视频和音轨文件
video_clip.close()
audio_clip.close()

print(f"已将音轨成功合并到视频并保存为 {output_video_path}")

6.视频合并

def image_stitching(images,stack):
    height, width, channels = images[0].shape
    # 遍历所有图像,如果尺寸不同,将它们调整为相同的尺寸
    for i in range(1, len(images)):
        if images[i].shape != (height, width, channels):
            images[i] = cv2.resize(images[i], (width, height))
    if stack == 0:
        result = np.hstack(images)
    else:
        result = np.vstack(images)

    return result

#stack为0是水平合并,等于1是垂直合并
def video_stitching(video_path_1,video_path_2,output_path,stack):
    cap1 = cv2.VideoCapture(video_path_1)
    cap2 = cv2.VideoCapture(video_path_2)

    if stack == 0:
        frame_width = int(cap1.get(3)) * 2
        frame_height = int(cap1.get(4))
    elif stack == 1:
        frame_width = int(cap1.get(3))
        frame_height = int(cap1.get(4)) * 2

    fourcc = cv2.VideoWriter_fourcc('m', 'p', '4', 'v')

    out = cv2.VideoWriter(output_path, fourcc, 25, (frame_width, frame_height))

    while (True):
        ret1, frame1 = cap1.read()
        ret2, frame2 = cap2.read()
        if ret1 and ret2 == True:
            images = [frame1, frame2]
            dst = image_stitching(images,stack)
            out.write(dst)
        else:
            break
    cap1.release()
    cap2.release()
    out.release()

水平合并的效果:
python读取视频逐帧保存,智能算法,python,音视频,开发语言,视频编辑文章来源地址https://www.toymoban.com/news/detail-787999.html

到了这里,关于Python常用视频编辑操作——读取与保存视频、更改帧数、拼接视频、视频语音合并、视频与图像互转等的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python|OpenCV-读取视频,显示视频并保存视频(3)

    前言 本文是该专栏的第3篇,后面将持续分享OpenCV计算机视觉的干货知识,记得关注。 在使用OpenCV处理视频的时候,不论是摄像头画面还是视频文件,通常情况下都要使用VideoCapture类来进行每一帧图像的处理。对于OpenCV而言,只要使用视频文件作为参数,它就可以打开视频文

    2024年02月11日
    浏览(41)
  • 【Python】OpenCV读取视频帧并保存为图片

    vid = cv2.VideoCapture(0) VideoCapture()中参数是0,表示打开笔记本的内置摄像头 参数是视频文件路径则打开视频,如 vid= cv2.VideoCapture(\\\'video.mp4\\\') retval, frame = vid.read() vid.read()按帧读取视频 retval, frame是获vic.read()方法的两个返回值。其中retval是布尔值,如果读取帧是正确的则返回True,

    2023年04月12日
    浏览(41)
  • OpenCV中读取、显示、保存摄像头视频讲解与实战(附Python源码)

    需要源码请点赞关注收藏后评论区留言私信~~~ OpenCV不仅能够处理图像,还能够处理视频。视频是由大量的图像构成的,这些图像以固定的时间间隔从视频中获取。这样,就能够使用图像处理的方法对这些图像进行处理,进而达到处理视频的目的。要处理视频,需要先对视频进

    2024年02月05日
    浏览(48)
  • Python操作XML教程:读取、写入、修改和保存XML文档

    XML是一种常见的数据交换格式,在许多应用中都被广泛使用。通过掌握Python操作XML的基础知识,您将能够轻松地处理XML数据,从而实现数据的提取、修改和存储。 内容包括以下主要部分: 解析XML文档:学习如何使用Python解析XML文档,获取根元素和遍历子元素。 访问元素的内

    2024年02月13日
    浏览(44)
  • OpenCV保存摄像头视频和视频文件操作实战(附Python源码)

    需要源码和视频请点赞关注收藏后评论区留言私信~~~ 在实际开发过程中,很多时候希望保存一段视频,为此,OpenCV提供了VideoWriter类,下面先熟悉一下里面的各种方法 VideoWriter类的常用方法包括它的构造方法,write方法和release方法 语法如下 VideoWriter object=cv2.VideoWriter(filename

    2024年02月07日
    浏览(62)
  • unity 简单实现tilemap的保存和读取(以便用于关卡编辑器)

            最近在学习使用Tiledmap,用于制作地图确实很方便快捷,但总不能一个关卡就做一个prefab?还是必须将其保存为文本文件才行啊,于是有了以下的尝试:         先定义一个Tiledmap类,用于存储单个Tiledmap信息 tiles是保存的所有tile块。key为坐标值,value为使用的tile

    2024年02月13日
    浏览(34)
  • opencv从视频文件读取视频内容,从摄像头读取保存视频内容

    (1)argparse模块使编写用户友好的命令行接口变得容易。 (2)程序定义了它需要的参数,而argparse将找出如何从sys.argv中解析这些参数。 (3)argparse模块还会自动生成帮助和使用消息,并在用户给程序提供无效参数时发出错误信息。 import argparse # 导入库 parser = argparse.Argume

    2024年02月22日
    浏览(55)
  • 获取视频帧数和总帧数

    获取视频帧数和总帧数代码 其他 在三维重构或其他项目中,往往需要获取每一张图片的时间戳,这时可以使用如下代码: 1 2 demo: 04-应用

    2024年02月13日
    浏览(35)
  • OpenCV 实现读取摄像头、视频读取保存 (C++)

    重点语句:VideoCapture、imshow 原理:使用VideoCapture语句读取摄像头,再利用while一次次将VideoCapture所读取的数据利用imshow语句一帧帧地读取出来 重点语句:VideoWriter 原理:在摄像头读取完图之后,利用VideoWriter语句将图像保存为固定格式 通过加入一个循环语句,按空格将图片按

    2024年02月11日
    浏览(51)
  • cv2读取视频-并保存图像或视频

    @TOC cv2读取视频的一般流程 获取视频 cap = cv2.VideoCapture() 判断获取的视频是否成功,成功读取视频对象则返回True。 cap.isOpened() 按帧读取 ret, frame = cap.read() 展示图像 cv2.waitKey(1) 读取本地文件视频并展示

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包