Python 将视频按照时间维度剪切 | Python工具

news2025/1/18 9:54:54

目录

前言

环境依赖

代码

总结


前言

本文提供将视频按照时间维度进行剪切的工具方法,一如既往的实用主义。

环境依赖

  ffmpeg环境安装,可以参考我的另一篇文章:windows ffmpeg安装部署_阿良的博客-CSDN博客

本文主要使用到的不是ffmpeg,而是ffprobe也在上面这篇文章中的zip包中。

ffmpy安装:

pip install ffmpy -i https://pypi.douban.com/simple

代码

不废话,上代码。

#!/user/bin/env python
# coding=utf-8
"""
@project : csdn
@author  : 剑客阿良_ALiang
@file   : cut_video.py
@ide    : PyCharm
@time   : 2022-12-27 10:22:48
"""

import os
import uuid
from ffmpy import FFmpeg


# 视频裁剪
# start_time格式样例:0:00,10:18
def cut_video_by_time(video_path: str, output_dir: str, start_time: str, duration: int):
    ext = os.path.basename(video_path).strip().split('.')[-1]
    if ext not in ['mp4', 'avi', 'flv']:
        raise Exception('format error')
    result = os.path.join(output_dir, '{}.{}'.format(uuid.uuid1().hex, ext))
    ff = FFmpeg(inputs={video_path: None},
                outputs={
                    result: '-ss {} -t {} -c:v copy -c:a copy -y'.format(start_time, duration)})
    print(ff.cmd)
    ff.run()
    return result


if __name__ == '__main__':
    print(cut_video_by_time(r'E:\360MoveData\Users\huyi\Desktop\3333333.mp4', r'E:\360MoveData\Users\huyi\Desktop',
                            '0:10', 5))

代码说明

1、cut_video_by_time方法参数分别为,输入视频地址、输出目录地址、剪切起始时间点、剪切持续时间。

2、起始时间的格式要注意,给了几个格式样式:0:01、10:11,前面为分钟后面为秒。

3、做了简单的视频格式校验,如需添加,可以自己看着来。

4、最终视频名使用uuid避免重复。

5、剪切的视频时长不能超过视频时间。

验证一下

准备的视频信息。

 

执行结果

ffmpeg version n4.3.1-20-g8a2acdc6da Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 9.3-win32 (GCC) 20200320
  configuration: --prefix=/ffbuild/prefix --pkg-config-flags=--static --pkg-config=pkg-config --cross-prefix=x86_64-w64-mingw32- --arch=x86_64 --target-os=mingw32 --enable-gpl --enable-version3 --disable-debug --enable-iconv --enable-zlib --enable-libxml2 --enable-libfreetype --enable-libfribidi --enable-gmp --enable-lzma --enable-fontconfig --enable-libvmaf --disable-vulkan --enable-libvorbis --enable-amf --enable-libaom --enable-avisynth --enable-libdav1d --enable-ffnvcodec --enable-cuda-llvm --disable-libglslang --enable-libass --enable-libbluray --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvpx --enable-libwebp --enable-libmfx --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-librav1e --enable-schannel --enable-sdl2 --enable-libsoxr --enable-libsrt --enable-libtwolame --enable-libvidstab --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg --extra-cflags=-DLIBTWOLAME_STATIC --extra-cxxflags= --extra-ldflags=-pthread --extra-libs=-lgomp
  libavutil      56. 51.100 / 56. 51.100
  libavcodec     58. 91.100 / 58. 91.100
  libavformat    58. 45.100 / 58. 45.100
  libavdevice    58. 10.100 / 58. 10.100
  libavfilter     7. 85.100 /  7. 85.100
  libswscale      5.  7.100 /  5.  7.100
  libswresample   3.  7.100 /  3.  7.100
  libpostproc    55.  7.100 / 55.  7.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'E:\360MoveData\Users\huyi\Desktop\3333333.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    creation_time   : 2022-09-08T12:04:43.000000Z
    Hw              : 1
                    : 
    bitRate         : 16000000
                    : 
    com.apple.quicktime.artwork: {"data":{"edittime":22,"infoStickerId":"","musicId":"","os":"windows","product":"lv","stickerId":"","videoEffectId":"","videoId":"245ba6f1-f2ab-4d70-bc77-c70ea30c171a","videoParams":{"be":0,"ef":0,"ft":0,"ma":0,"me":0,"mu":0,"re":0,"sp":0,"st":0,"te":0,"t
    maxrate         : 16000000
                    : 
    te_is_reencode  : 1
                    : 
    encoder         : Lavf58.76.100
  Duration: 00:00:26.91, start: 0.000000, bitrate: 11898 kb/s
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 11741 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Metadata:
      creation_time   : 2022-09-08T12:04:43.000000Z
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 156 kb/s (default)
    Metadata:
      creation_time   : 2022-09-08T12:04:43.000000Z
      handler_name    : SoundHandler
Output #0, mp4, to 'E:\360MoveData\Users\huyi\Desktop\7812f03a858f11ed8359e454e8bf1461.mp4':
  Metadata:
    major_brand     : isom
    minor_version   : 512
    compatible_brands: isomiso2avc1mp41
    te_is_reencode  : 1
                    : 
    Hw              : 1
                    : 
    bitRate         : 16000000
                    : 
    com.apple.quicktime.artwork: {"data":{"edittime":22,"infoStickerId":"","musicId":"","os":"windows","product":"lv","stickerId":"","videoEffectId":"","videoId":"245ba6f1-f2ab-4d70-bc77-c70ea30c171a","videoParams":{"be":0,"ef":0,"ft":0,"ma":0,"me":0,"mu":0,"re":0,"sp":0,"st":0,"te":0,"t
    maxrate         : 16000000
                    : 
    encoder         : Lavf58.45.100
    Stream #0:0(und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 11741 kb/s, 30 fps, 30 tbr, 15360 tbn, 15360 tbc (default)
    Metadata:
      creation_time   : 2022-09-08T12:04:43.000000Z
      handler_name    : VideoHandler
    Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 156 kb/s (default)
    Metadata:
      creation_time   : 2022-09-08T12:04:43.000000Z
      handler_name    : SoundHandler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #0:1 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=  150 fps=0.0 q=-1.0 Lsize=    6607kB time=00:00:04.97 bitrate=10875.7kbits/s speed= 329x    
video:6507kB audio:95kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.082792%
E:\360MoveData\Users\huyi\Desktop\7812f03a858f11ed8359e454e8bf1461.mp4

结果视频信息

 

总结

没啥好总结的,注意视频时长。

分享:

        行动似乎跟着感觉走,其实行动与感觉是并行的,如果意志控制行动,也就能间接控制感觉。——《人性的弱点》

如果本文对你有帮助的话,点个赞吧,谢谢!

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

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

相关文章

基于Vue.js+Node问卷调查系统的设计与实现

作者主页:Designer 小郑 作者简介:Java全栈软件工程师一枚,来自浙江宁波,负责开发管理公司OA项目,专注软件前后端开发(Vue、SpringBoot和微信小程序)、系统定制、远程技术指导。CSDN学院、蓝桥云…

ORM框架

ORM框架可以做的两件事: 创建、修改、删除数据库中的表(不用写SQL语句)。【无法创建数据库】操作表中的数据(不用写SQL语句) 1.安装第三方模块: pip3.9 install mysqlclient 2.创建数据库: 启动Mysql服务…

20221226编译Toybrick的TB-RK3588X开发板的Android12系统2-SDK预处理

20221226编译Toybrick的TB-RK3588X开发板的Android12系统2-SDK预处理 2022/12/26 16:40 结论: 1、风火轮技术团队的技术支持力度欠佳! 淘宝客服只能处理发货问题,发发SDK还可以,技术问题只能找联系方式 联系手机:18926…

一起从零开始学VUE(16)生命周期与组合式API

文章目录生命周期自定义hook函数toRef其他组合APIshallowReactive与shallowRefreadonly与shallowReadonllytoRaw 与 markRawcustomRefprovide与inject响应式数据的判断生命周期 除了直接写对应的钩子函数外,Vue3.0也提供了composition API形式的钩子函数&#xff0c…

【再学Tensorflow2】TensorFlow2的建模流程:电影评论分析

TensorFlow2的建模流程:电影评论分析词嵌入技术数据准备定义模型训练模型评估模型使用模型保存模型参考资料情感分析无处不在,它是一种基于自然语言处理的分类技术。其主要解决的问题是给定一段话,判断这段话是正面的还是负面的。情感分析的本…

KDE桌面环境下电源管理对应的文件及选项

在KDE桌面环境下,“系统设置”—>“电源管理”—>“高级电源设置”的界面如下: 点击界面中的“配置通知”选项,界面如下所示: 其中图形界面下的各项设置对应的文件为~/.config/powerdevil.notifyrc。上图状态下&#xff0c…

Elasticsearch8.X入门实战(七)Java API操作:员工信息

Elasticsearch本身使用Java开发,因此对Java的支持能力是最好的。本节通过对员工信息建立索引,并对索引数据进行添加、修改等,讲解Elasticsearch的相关Java客户端 API的操作。 1.新建项目 在Eclipse中新建Maven项目elasticsearch_demo,在pom.xml文件中加入项目的依赖库,…

vue2[webpack]中接入vue3[vite]的qiankun微前端服务

本文记录在 vue2[webpack]老项目中,使用qiankun.js微前端服务,接入vue3[vite]新项目。 纯vue2[webpack]技术项目可参考以前的文章: vue项目落地(qiankun.js)微前端服务-zhanghaoran’s blog vue2为基座主应用; vue3为子应用。 改造…

cursor:pin S wait on X故障诊分析

1. 故障概述 7:15,二节点出现大量的“cursor: pin S wait on X”等待事件,数据库性能下降,持续到7:19分恢复正常,持续时间4分钟左右。下面是详细的故障分析诊断过程。2. 故障分析 2.1. 故障现象 7:15,系统出现大量“curs…

Lexical Simplification with Pretrained Encoders 论文精读

Lexical Simplification with Pretrained Encoders 论文精读InformationAbstract1 Introduction2 Related Work3 Unsupervised Lexical Simplification3.1 The BERT model3.2 Simplification Candidate generation3.3 Substitution Ranking3.4 Simplification Algorithm4 Exper…

【半监督医学图像分割 ISBI】2022-ICT-MedSeg

【半监督医学图像分割 ISBI】2022-ICT-MedSeg 论文题目:AN EMBARRASSINGLY SIMPLE CONSISTENCY REGULARIZATION METHOD FOR SEMI-SUPERVISED MEDICAL IMAGE SEGMENTATION 中文题目:一种简单的一致性正则化半监督医学图像分割方法 论文链接:ht…

基于redis缓存查询店铺

基于redis缓存查询店铺 Overridepublic Result queryById(Long id) {//从redis中查询商铺缓存String shopJson stringRedisTemplate.opsForValue().get(CACHE_SHOP_KEY id);//判断缓存是否命中if (StrUtil.isNotBlank(shopJson)){//命中,则返回店铺信息Shop shop …

统计同成绩学生

目录 1038:统计同成绩学生 输入格式: 输出格式: 样例: 输入样例: 输出样例: 代码长度限制: 时间限制: 内存限制: 思路: 1.暴力法 1.1查找函数 1.1.2查找函数代码 1.2main函数 1.2.1main函数代码 1.3完整代码…

亚马逊云科技Build On - 使用Serverless搭建创新零售应用的惊喜体验

近日有幸参加了亚马逊云科技Build On第三季的学习培训,深刻感受到亚马逊在云服务方面技术的先进性。在培训后进行了实操体验,通过Serverless 的事件驱动架构搭建一个快消行业场景的应用——咖啡店的订餐系统。只用了短短的几小时,就完成了整个…

学生管理系统(Python实现)

文章目录学生管理系统介绍学生管理系统效果展示代码实现入口函数打印菜单新增学生信息显示学生信息查找学生信息删除学生信息实现存档读档打包成exe程序学生管理系统介绍 学生管理系统是为了对学校学生信息进行管理而开发的一款软件,下面我们来实现一个命令行版本的…

【UE4 第一人称射击游戏】12-全自动步枪并显示剩余弹药量

上一篇: 【UE4 第一人称射击游戏】11-武器跟随鼠标移动并添加开火音效 本篇效果: 步骤: 1.打开“Weapon_Base”,添加一个整数类型,名为“Ammo”的变量,用来表示弹药量。编译后默认值设为30 再添加一个浮点…

操作系统~Linux~线程控制,POSIX线程库的使用

1.POSIX线程库 与线程有关的函数构成了一个完整的系列&#xff0c;绝大多数函数的名字都是以“pthread_”开头的要使用线程库中的函数&#xff0c;要通过引入头文件<pthread.h>链接这些线程函数库时要使用编译器命令的“-lpthread”选项2.创建线程-pthread_create() 功…

在HTML页面中引用Markdown编辑器(Editor.md)

目录 1、下载Ediotor.md 2、引入Ediotor.md 3、确定Ediotor.md在哪里显示 最近写博客项目&#xff0c;用到了Markdown编辑器&#xff0c;这里介绍一款国内好用的Markdown编辑器&#xff1a;Editor.md&#xff0c;下面介绍一下该编辑器以及如果在页面中引用。 1、下载Edioto…

【TypeScript】类型兼容性与相关类型讲解

目录 类型兼容性 对象类型兼容性 接口类型兼容性 函数类型兼容性 索引签名类型 映射类型 索引查询类型 交叉类型 类型兼容性 在TS中&#xff0c;类型采用的是结构化类型系统&#xff0c;也叫做 duck typing&#xff08;鸭子类型&#xff09;&#xff0c;类型检查关注的…

电脑c盘备份怎么操作?备份C盘的6个步骤

电脑出现问题&#xff0c;想要修复又不知该怎么操作。可能你会想要重装电脑的系统&#xff0c;但是在操作之前&#xff0c;一定要对电脑重要的数据做好备份。尤其是电脑C盘里面存储着我们很多重要的数据&#xff0c;电脑c盘备份怎么进行&#xff1f;跟着下面6个操作步骤进行&am…