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_nameinput = 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.audioaudio_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_pathsubprocess.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)) * 2frame_height = int(cap1.get(4))elif stack == 1:frame_width = int(cap1.get(3))frame_height = int(cap1.get(4)) * 2fourcc = 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:breakcap1.release()cap2.release()out.release()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/111641.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python实现TCPclient

python实现TCPclient是一件简单的事情,只要通过socket这个模块就可以实现。 一、实现步骤 1、导入模块: 首先,你需要导入Python的socket模块。 import socket2、创建Socket对象: 使用socket.socket()函数创建一个新的socket对…

Flink学习---15、FlinkCDC(CDC介绍、案例实操)

星光下的赶路人star的个人主页 未来总是藏在迷雾中让人胆怯,但当你踏入其中,便会云开雾散 文章目录 1、CDC简介1.1 什么是CDC1.2 CDC的种类1.3 Flink-CDC 2、FlinkCDC案例实操2.1 开启MySQL Binlog并重启MySQL2.2 FlinkSQL方式的应用2.2.1 导入依赖2.2.2…

Elasticsearch2.x Doc values

文档地址: https://www.elastic.co/guide/en/elasticsearch/reference/2.4/doc-values.html https://www.elastic.co/guide/en/elasticsearch/guide/2.x/docvalues-intro.html https://www.elastic.co/guide/en/elasticsearch/guide/2.x/docvalues.html https://ww…

【Java 进阶篇】HTML DOM 事件详解

当用户在网页上点击按钮、输入文本、鼠标移动到某个区域或执行其他互动操作时,这些动作都可以触发事件。HTML DOM(文档对象模型)允许我们使用JavaScript来捕获、处理和响应这些事件,以实现网页的交互和动态性。本篇博客将围绕HTML…

iOS原生、Android 原生, flutter 三种方式给照片流添加文字(水印)

效果图:三中代码实现的效果差不多 Swift:代码 import UIKitclass ImageWatermarking: NSObject {static func textToImage(drawText text: String, inImage initImage: UIImage, atPoint point: CGPoint) -> UIImage {let textColor = UIColor.whitelet textFont = UIFon…

ccpc2023秦皇岛F. Mystery of Prime(dp)

题目要求改变数组中的数字使相邻数字之和是质数,同时改变数字的次数最少 因为改变的数字可以无穷大 我假设当一个数改变为一个某一个偶数时,他周围的任意的奇数肯定能和他相加变成质数 当一个数变为某一个大于1的奇数时,他周围任意偶数肯定…

港联证券:资金融通构成强支撑 “一带一路”金融合作开新局

本年是共建“一带一路”主张提出十周年。经过十年打开,共建“一带一路”从夯基垒台、立柱架梁到落地生根、持久打开,已成为打开包容、互利互惠、协作共赢的国际协作途径。“资金融通”作为首份“一带一路”白皮书提出的“五通”之一,定位为“…

DPDK收发包流程分析

一、 前言 DPDK是intel工程师开发的一款用来快速处理数据包的框架,最初的目的是为了证明传统网络数据包处理性能低不是intel处理器导致的,而是传统数据的处理流程导致,后来随着dpdk的开源及其生态的快速发展,dpdk成为了高性能网络数据处理的优秀框架。本篇文章主要介绍DPDK…

Django实现音乐网站 ⒇

使用Python Django框架做一个音乐网站, 本篇音乐播放器-添加播放音乐功能实现。 目录 创建播放器数据表 设置表结构 执行创建表 命令 执行 数据表结构 添加单个歌曲 创建路由 加入播放器视图 模板处理 基类方法 子页面调用 优化弹窗 加入layui文件 基…

在URP管线中添加ShaderMaterial自定义GUI的方法

编写GUI面板 1. 新建GUI子面板 using UnityEngine; using UnityEngine.Rendering;namespace UnityEditor.Rendering.Universal.ShaderGUI {internal class CP_XXXOutLineGUI{public static class Styles{}public struct LitProperties{public LitProperties(MaterialProperty…

vxe-table添加排序

在 <vxe-column> 中添加sortable属性 <vxe-columnfield"longitude"sortabletitle"经度"></vxe-column><vxe-columnfield"latitude"sortabletitle"纬度"></vxe-column><vxe-columnfield"dateEst…

Cross decomposition交叉分解大比拼:性能、应用场景和可视化对比总结

交叉分解(Cross Decomposition)在机器学习中是一种用于分析两组变量之间关系的技术。它能够找出两组数据之间的线性关系,并将这些关系用于预测或分类。在本文中将探讨四种不同的交叉分解方法:CCA(典型相关分析)、PLSCanonical、PLSRegression和PLSSVD,并从五个方面进行详…

Spring Boot如何优雅实现动态灵活可配置的高性能数据脱敏功能

1.背景 在当下互联网高速发展的时代下&#xff0c;涉及到用户的隐私数据安全越发重要&#xff0c;一旦泄露将造成不可估量的后果。所以现在的业务系统开发中都会对用户隐私数据加密之后存储落库&#xff0c;同时还要求后端返回数据给前台之前进行数据脱敏。所谓脱敏处理其实就…

正则表达式的神奇世界:表达、匹配和提取

正则表达式的神奇世界&#xff1a;表达、匹配和提取 前言第一&#xff1a; 什么是正则表达式&#xff1f;第二&#xff1a; 字符匹配和量词&#xff1a;1. 字符匹配&#xff1a;2. 量词&#xff1a;3. 贪婪和非贪婪匹配&#xff1a; 第三&#xff1a;字符类和元字符1. 字符类&a…

TikTok Shop美国本土店VS跨境店,如何选择?有何区别?

TikTok不仅仅是一个用于分享有趣短视频的平台&#xff0c;它也逐渐成为了商家们极力推广自己品牌和产品的场所。 在TikTok的商业生态系统中&#xff0c;存在几种不同的商店类型&#xff0c;各有其独特性和适用场景。今天&#xff0c;我们就来深入探讨这些店的差异与特点。 一、…

判断两线段是否相交

我们做两次 每次把一条线段视为直线&#xff0c;判断另一条线段的两个点是否在直线的两侧 如果两次都符合&#xff0c;说明直线相交 struct Point {double x, y; Point operator - (const Point &A) const {Point B; B.xx-A.x; B.yy-A.y; return B; }double operator ^ …

Si24R2|2.4G单发射芯片 +7dBm可调功率 校讯通

Si24R2是一种通用、低功耗、高性能的2.4GHz无线射频发射芯片&#xff0c;主要用于单向通信系统&#xff0c;以降低系统成B&#xff0c;在运行中与si24r1兼容。 Si24r2具有低功耗和低成B。 它主要用于单向低功率传输系统&#xff0c;如无线控制系统、无线数据采集系统等。 Si2…

Android之自定义相册文件选择器

一、自定义FilePicker类 package com.custom.jfrb.util; //自己的包名位置import android.app.Activity; import androidx.fragment.app.Fragment;import com.luck.picture.lib.PictureSelector; import com.luck.picture.lib.config.PictureConfig; import com.luck.picture.…

在mysql8查询中使用ORDER BY结合LIMIT时,分页查询时出现后一页的数据重复前一页的部分数据。

这里写目录标题 问题描述&#xff1a;问题模拟&#xff1a;原因分析问题解释问题解决验证官方文档支持 问题描述&#xff1a; 在mysql8查询中使用ORDER BY结合LIMIT时&#xff0c;分页查询时出现后一页的数据重复前一页的部分数据。 问题模拟&#xff1a; 表table_lock_test&…

pytorch里面的 nn.Parameter 和 tensor有哪些异同点

简单来说&#xff0c;你可以把tensor看作是一个通用的数据结构&#xff0c;而nn.Parameter看作是一种特殊的tensor&#xff0c;这种tensor可以被优化以提高模型的性能。在创建模型参数时&#xff0c;你应该使用nn.Parameter而不是直接使用tensor&#xff0c;因为这样可以确保模…