Python实现批量提取视频

news/2024/10/4 3:26:41

前言

最近在玩整nas,但是之前把视频和照片都上传到immich了,因为我可以直接在手机中上传照片,但是因为手机内存不够就把视频全删了的,现在只需要把视频下载下来上传到nas中就OK。但是现在问题是immich这东西不支持批量删选视频,只能全选照片和视频,而且一共有50个G的照片和视频,视频只有三百八十几个,手动提取未免太看得起我了。于是现在就有了下载全部内容,然后待会儿就用Python代码批量提取视频到指定文件夹。(前提:安装7.zip解压缩软件并且能够找到安装目录)

 

 Python代码批量提取指定格式的视频

import os
import subprocess
import glob# 7-Zip 可执行文件路径(请确认 7z.exe 的路径)
seven_zip_path = r"D:\APP\7.zip\7-Zip\7z.exe"# 定义包含多个压缩包的文件夹路径
zip_folder = r'D:\本地文件夹\桌面\视频'# 定义目标文件夹路径,用于保存所有视频文件
extract_folder = r'D:\本地文件夹\桌面\视频1'# 创建目标文件夹(如果不存在)
if not os.path.exists(extract_folder):os.makedirs(extract_folder)# 获取所有压缩包文件列表(.zip, .rar, .7z)
zip_files = glob.glob(os.path.join(zip_folder, '*.zip'))# 支持的视频文件扩展名
video_extensions = ['.mp4', '.avi', '.mov', '.wmv', '.flv', '.mkv', '.3gp', '.webm', '.mpeg', '.mpg']# 遍历每个压缩包文件
for zip_file in zip_files:print(f'正在处理压缩包: {zip_file}')try:# 通过 7-Zip 列出压缩包中的所有文件,并处理中文编码问题command = [seven_zip_path, 'l', zip_file]result = subprocess.run(command, capture_output=True, text=True, encoding='gbk')# 检查压缩包中是否有视频文件for line in result.stdout.splitlines():for ext in video_extensions:if ext in line:# 如果有视频文件,则解压command = [seven_zip_path, 'e', zip_file, f'-o{extract_folder}', f'*{ext}', '-y']  # '-y' 自动跳过覆盖提示extract_result = subprocess.run(command, capture_output=True, text=True, encoding='gbk')# 输出提取的文件信息if "Everything is Ok" in extract_result.stdout:print(f'已提取视频文件: {line} from {os.path.basename(zip_file)}')else:print(f'解压失败: {zip_file}')except subprocess.CalledProcessError as e:print(f'压缩包处理失败: {zip_file}, 错误: {str(e)}')print('所有压缩包中的视频文件提取完成。')

 

注:我的桌面是转移到了D盘,请勿照抄这部分内容

代码解释

  • 定义文件夹路径

    • zip_folder:指定包含多个压缩包文件的文件夹路径。
    • extract_folder:指定解压后保存所有视频文件的目标文件夹路径。
  • 创建目标文件夹

    • 如果指定的目标文件夹不存在,使用 os.makedirs() 创建它。
  • 获取压缩包列表

    • 使用 glob.glob() 获取 zip_folder 中所有以 .zip 结尾的文件。
  • 遍历压缩包

    • 对每个压缩包文件,使用 zipfile.ZipFile(zip_file, 'r') 打开压缩包。
  • 遍历文件

    • 使用 zip_ref.namelist() 获取压缩包中的所有文件列表。
    • 对于每个文件,提取文件名,并检查其扩展名是否属于视频文件的扩展名列表 (video_extensions)。
  • 解压视频文件

    • 使用 zip_ref.read(file) 读取压缩包中的文件内容。
    • 使用 open(video_file_in_zip, 'wb') 打开目标文件,在本地保存解压的视频文件内容。

实现效果

运行代码中文会乱码是因为编码问题,在网上找到了解决办法,在cmd里运行 set PYTHONIOENCODING=utf-8 再执行Python,执行一次就行了,运行别的代码也不会中文乱码了(通过 PYTHONIOENCODING 环境变量解决)。

 

结果

 一共389个视频,提取出来386个视频,一共23G,有3个没有提取到,不知道是不是格式问题,总的来说问题不大。

 


 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

边缘计算平台:为客户端提供更快、更可靠的应用响应!

边缘计算平台是一种基于云计算技术的辅助计算系统。它可以在数据源的边缘(例如传感器、IoT设备等)进行数据的处理和分析,从而为客户端提供更快、更可靠的应用响应。与传统的云计算模式相比,边缘计算平台更加灵活和实时,它通过在分布式的边缘设备上进行计算,可以大大减少由…

1-9Java数组

Java 数组 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。 Java 语言中提供的数组是用来存储固定大小的同类型元素。 你可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量 number0,number1,....,numbe…

VR虚拟现实解决方案在电商行业中的7大优势

从电子商务的角度来看,虚拟现实可以通过多种方式为在线卖家带来好处。VR 可带来身临其境、富有创意且令人难忘的客户体验,可以极大地提高转化率。VR 可以通过更多方式使卖家受益。从电子商务的角度来看,虚拟现实可以通过多种方式为在线卖家带来好处。VR 可带来身临其境、富有…

Mathematica 入门

前言 Wolfram Mathematica(简称 MMA),是由 Wolfram Research 开发的科学计算软件。本文我们将介绍 Mathematica 的界面、语法和基本应用。类似的软件还有 MATLAB 和 Maple 等。 MMA 官网:https://www.wolfram.com/mathematica/ MMA 的安装及激活:Mathematica安装激活极简教…

【算法笔记】位运算详解

0. 前言 突然想到位运算是个好东西,就来水一波文章了…… 注意:我把能想到的有关位运算的所有内容都放进来了,所以篇幅较长,请谅解!若有写的不清楚或者不够详细的地方欢迎在评论区补充,谢谢支持! 本文中参考代码均使用C++编写。 废话不多说,下面步入正题。1. 基本运算 …

【算法笔记】【专题】RMQ 问题:ST表/树状数组/线段树

0. 前言 好久没更算法笔记专栏了,正好学了新算法来更新…… 这也是本专栏的第一个专题问题,涉及到三种数据结构,如果写得有问题请各位大佬多多指教,谢谢! 1. 关于 RMQ 问题 RMQ 的全称是 Range Minimum/Maximum Query,即区间最大/最小值问题。 本文中,我们的算法以求最大…

js的对象

1.js有var开辟数组使用var a=[1,2,3,4,5,6]或者var a=new Array(1,1,1,1,1); 2.Array支持push添加操作,和indexof 查找,foreach遍历操作pop删除操作

【算法笔记】树形DP算法总结详解

0. 定义 树形DP,又称树状DP,即在树上进行的DP,是DP(动态规划)算法中较为复杂的一种。 1. 基础 令\(f[u]=~\)与树上顶点\(u\)有关的某些数据,并按照拓扑序(从叶子节点向上到根节点的顺序)进行\(\text{DP}\),确保在更新一个顶点时其子节点的dp值已经被更新好,以更新当前…