linux有效裁剪视频的方式(基于ffmpeg,不改变分辨率,帧率,视频质量,不需要三方软件)
就是在Linux上使用OBS Studio录制一个讲座或者其他视频,可能总有些时候会多录制一段时间,但是如果使用剪映或者PR这样的工具在导出的时候总需要烦恼导出的格式和参数,比如剪映就不支持mkv格式的导出,导出成mp4格式的视频就会变得很大,有很方便的处理办法,使用ffmpeg
一. 最终效果
!!!注意!!!:还是有一点我不知道原因的问题,发现新视频虽然可以播放,但是在Linux下总是有前几秒的黑屏,在NAS端的网页播放时也加载的很慢,还是有问题的
处理前:
处理后:
二. 处理代码
2.1 读取视频或者图片信息的代码
import os
import cv2
from PIL import Imagedef get_image_info(image_path):try:with Image.open(image_path) as img:info = {"类型": "图片","文件名": os.path.basename(image_path),"格式": img.format,"模式": img.mode,"分辨率": img.size, # (宽, 高)"色深": img.bits if hasattr(img, 'bits') else "未知","通道数": len(img.getbands()),"文件大小(字节)": os.path.getsize(image_path)}return infoexcept Exception as e:return {"错误": f"无法读取图片信息: {e}"}def get_video_info(video_path):try:cap = cv2.VideoCapture(video_path)if not cap.isOpened():return {"错误": "无法打开视频文件"}info = {"类型": "视频","文件名": os.path.basename(video_path),"分辨率": (int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)), int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))),"帧率(FPS)": cap.get(cv2.CAP_PROP_FPS),"总帧数": int(cap.get(cv2.CAP_PROP_FRAME_COUNT)),"时长(秒)": cap.get(cv2.CAP_PROP_FRAME_COUNT) / cap.get(cv2.CAP_PROP_FPS) if cap.get(cv2.CAP_PROP_FPS) > 0 else "未知","编码格式": cap.get(cv2.CAP_PROP_FOURCC),"文件大小(字节)": os.path.getsize(video_path)}cap.release()return infoexcept Exception as e:return {"错误": f"无法读取视频信息: {e}"}def print_info(info):for k, v in info.items():print(f"{k}: {v}")def main(file_path):if not os.path.isfile(file_path):print("文件不存在!")returnext = os.path.splitext(file_path)[1].lower()image_exts = ['.jpg', '.jpeg', '.png', '.bmp', '.tiff', '.gif', '.webp']video_exts = ['.mp4', '.avi', '.mov', '.mkv', '.flv', '.wmv', '.webm', '.mpeg', '.mpg']if ext in image_exts:info = get_image_info(file_path)elif ext in video_exts:info = get_video_info(file_path)else:# 尝试用PIL打开,失败再尝试用cv2.VideoCapturetry:with Image.open(file_path) as img:info = get_image_info(file_path)except Exception:info = get_video_info(file_path)print_info(info)if __name__ == "__main__":# path = input("请输入图片或视频文件路径:").strip()path = "/home/tipriest/output.mkv"main(path)
2.2 截取视频的代码
ffmpeg -i "深蓝学院-YY硕-访谈.mkv" -ss 00:00:00 -to 02:05:11 -c:v copy -c:a copy output.mkv
三. ffmpeg命令详细说明
要裁剪视频并保持分辨率、帧率不变,可以使用ffmpeg工具实现。具体步骤如下:
方法一:指定结束时间点裁剪(推荐)
ffmpeg -i "深蓝学院-YY硕-访谈.mkv" -ss 00:00:00 -to 01:30:00 -c:v copy -c:a copy output.mkv
参数说明:
-to 01:30:00
:裁剪到1小时30分钟(按需替换时间)-c:v copy -c:a copy
:直接复制音视频编码流,避免重新编码- 支持精确到毫秒的格式:
00:10:30.500
方法二:指定持续时间裁剪
ffmpeg -i input.mkv -t 5400 -c copy output.mkv
参数说明:
-t 5400
:保留前5400秒(即1.5小时)- 总时长10631秒≈2小时57分,若需保留前2小时则
-t 7200
关键注意事项:
- 保持原画质参数:使用
-c copy
直接复制编码流,分辨率/帧率自动继承 - 时间精度优化:
- 添加
-avoid_negative_ts 1
防止时间戳错误 - 添加
-copyts
保留原始时间戳
ffmpeg -ss 00:09:50 -i input.mkv -ss 00:10:00 -to 00:20:00 -copyts -c copy -avoid_negative_ts 1 output.mkv
- 添加
- MKV格式兼容性:MKV容器支持流复制,无需转码
验证输出信息
执行后可运行 ffprobe output.mkv
检查输出视频的时长、分辨率、帧率是否与需求一致
注:若裁剪位置不在关键帧,ffmpeg会自动跳到前一关键帧,可能导致头尾有数秒误差。如需帧级精准需重新编码(不推荐,会降低质量)
相关文章:

linux有效裁剪视频的方式(基于ffmpeg,不改变分辨率,帧率,视频质量,不需要三方软件)
就是在Linux上使用OBS Studio录制一个讲座或者其他视频,可能总有些时候会多录制一段时间,但是如果使用剪映或者PR这样的工具在导出的时候总需要烦恼导出的格式和参数,比如剪映就不支持mkv格式的导出,导出成mp4格式的视频就会变得很…...

服务器密码安全运维解决新思路:凭据管理SMS+双因素SLA认证结合的方案
引言:云服务器安全成本困局 在云计算渗透率突破60%的今天,中小企业正面临严峻的安全悖论:某权威机构数据显示,72%的云上数据泄露事件源于凭据管理不当,而传统安全解决方案的采购成本往往超过中小企业年利润的8%。这种…...

论文阅读笔记——In-Context Edit
ICEdit 论文阅读笔记 指令图像编辑现有方法的局限: 微调类方法(InstructPix2Pix、Emu Edit、 Ultra Edit):需要大规模数据和算力、精度高但效率低且泛化性低;免训练方法(Prompt-to-Prompt、 StableFlow&am…...
Debian 系统 Python 开发全解析:从环境搭建到项目实战
Debian 系统 Python 开发全解析:从环境搭建到项目实战 在当今数字化时代,Python 凭借其简洁易读的语法和强大的功能,成为了最受欢迎的编程语言之一。Debian 作为一款稳定、安全且开源的 Linux 操作系统,为 Python 开发提供了理想的环境。本文将详细介绍在 Debian 系统上进…...
Next.js 15 与 Apollo Client 的现代集成及性能优化
Next.js 15 与 Apollo Client 的现代集成及性能优化 目录 技术演进集成实践性能优化应用案例未来趋势 技术演进 Next.js 15 核心特性对开发模式的革新 Next.js 15 通过引入 App Router、服务器组件(Server Components)和客户端组件(Clie…...

【后端高阶面经:MongoDB篇】41、MongoDB 是怎么做到高可用的?
一、MongoDB高可用核心架构:副本集(Replica Set)设计 (一)副本集角色与拓扑结构 1. 三大核心角色 角色职责描述资源占用选举权重数据存储Primary唯一接收写请求的节点,将操作日志(Oplog&…...
IO Vs NIO
一、IO(传统阻塞式) 全称:Input/Output(输入/输出) 定义:Java 1.0 引入的基础 I/O 模型,基于流(Stream)的同步阻塞操作,线程在读写数据时会阻塞直到操作完成。 二、NIO(新式非阻塞式) 全…...
offset 家族和 client 家族
在前端开发中,offset 家族和 client 家族是用于获取元素尺寸和位置的重要属性集合。以下是对这两个家族相关知识点的系统总结: 一、offset 家族 核心属性 offsetWidth / offsetHeight 含义:元素的总尺寸,包含内容区、内边距、边…...

DMBOK对比知识点整理(4)
1.常见数据质量维度 常见数据质量维度(DMBOK-P353)质量维度...

day12 leetcode-hot100-21(矩阵4)
240. 搜索二维矩阵 II - 力扣(LeetCode) 1.暴力法O(m*n) 思路:两层for循环即可。 2.二分查找O(m*logn) 思路:每行都用二分查找,因为每行都是排好序的 class Solution {public boolean searchMatrix(int[][] matrix, int targe…...
Java基础 Day24
一、进程和线程 1、进程 (1)概念 进程 (Process) 是计算机中的程序关于某数据集合上的一次运行活动 是系统进行资源分配的基本单位 简单理解:程序的执行过程(正在运行的应用程序) (2)特性…...

提问:鲜羊奶是解决育儿Bug的补丁吗?
在育儿这个"系统工程"中,过度提醒就像冗余代码:"快写作业"(重复调用)、"多穿衣服"(异常捕获)、"别玩手机"(进程阻断)。羊大师技术育儿实验…...

关于数据仓库、数据湖、数据平台、数据中台和湖仓一体的概念和区别
我们谈论数据中台之前, 我们也听到过数据平台、数据仓库、数据湖、湖仓一体的相关概念,它们都与数据有关系,但他们和数据中台有什么样的区别, 下面我们将围绕数据平台、数据仓库、数据湖和数据中台的区别进行介绍。 一、相关概念…...
Hive 分桶(Bucketing)深度解析:原理、实战与核心概念对比
一、分桶的意义:比分区更细的粒度管理 1.1 解决分区数据不均匀问题 分区的局限性:分区基于表外字段(如时间字段)划分数据,但可能导致部分分区数据量过大,部分过小,无法进一步细化。 分桶的定…...
网络协议DHCP
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一种网络协议,用于自动给网络中的设备分配 IP 地址、子网掩码、默认网关、DNS 服务器等网络配置参数。 ✅ 一、DHCP 的作用 自动为客户端分配网络信息,…...

什么是可重组机器人?
可重组机器人是一种具有高度灵活性和适应性的新型机器人系统,能够根据不同任务需求,快速改变自身结构和功能。下面我从概念、结构、特点、应用领域、发展趋势等方面,为你详细介绍: 概念:可重组机器人是由多个标准化、模…...

4、docker compose
1、介绍 Docker Compose 是 Docker 官方提供的容器编排工具,用于简化多容器应用的开发、部署和管理。它通过声明式配置文件(YAML格式)定义容器化应用的服务、网络、存储等组件及其依赖关系,使用户能够通过单一命令快速启动、停止…...
Node.js全局对象详解:console、process与核心功能
在Node.js开发中,全局对象是一类无需引入即可直接访问的对象,它们为开发者提供了与运行时环境、系统交互和调试相关的核心功能。本文将深入解析Node.js中两个最常用的全局对象 console 和 process,并简要介绍其他全局对象的作用。通过代码示例…...
测试策略:AI模型接口的单元测试与稳定性测试
测试策略:AI模型接口的单元测试与稳定性测试 在构建支持AI能力的系统中,开发者不仅要关注业务逻辑的正确性,也必须保障AI模型接口在各种环境下都能稳定运行。这就要求我们在开发阶段制定清晰的测试策略,从功能验证到性能保障,逐步推进系统可用性、可维护性与可扩展性的提…...

SQL里几种JOIN连接
数据信息: 员工表EMP 部门表DEPT 一、INNER JOIN(内连接) 作用:只返回两个表中完全匹配的行,相当于取交集。 场景:查询「有部门的员工信息」。 示例: SELECT 员工.姓名, 部门.部门名称 FR…...

基于通义千问的儿童陪伴学习和成长的智能应用架构。
1.整体架构概览 我们的儿童聊天助手将采用典型的语音交互系统架构,结合大模型能力和外部知识库: 2. 技术方案分解 2.1. 前端应用/设备 选择: 移动App(iOS/Android)、Web应用,或者集成到智能音箱/平板等硬件设备中。技术栈: 移动App: React Native / Flutter (跨平台…...
生产环境Mysql推荐配置参数
以下是针对生产环境的 MySQL 配置(my.cnf 或 mysqld.cnf)推荐配置及说明。请根据实际硬件资源(如内存、CPU、磁盘类型)和应用场景调整参数。 核心配置模板(InnoDB 优化) [mysqld] #---------------------- 基础设置 ---------------------- datadir = /var/lib…...

LVS-DR 负载均衡群集
目录 一、LVS-DR集群 1、LVS-DR 工作原理 2、数据包流向分析 3、LVS-DR 模式特点 二、直接路由模式(LVS-DR) 1、准备案例环境 2、配置负载调度器(101) (1)配置虚拟IP 地址(VIPÿ…...
理解并解决高丢包率问题,构建清晰流畅的实时音视频通话
丢包作为数字通信中的重要干扰因素,常常潜伏在表面之下,却严重影响性能,将清晰的对话变的模糊不清,将连贯的演示变的断断续续。因此,对音视频通话相关应用的开发者来说,理解丢包率非常重要。 什么是丢包&am…...
Ubuntu系统Todesk进度卡在100%
1 : 修改配置文件,关闭wayland sudo nano /etc/gdm3/custom.conf2 : 把#WaylandEnablefalse前的#号删掉 按图片删除注释 3 : 按Ctrl X ,离开(会问你要不要保存,输入 Y 回车保存) 4 : 重启系统 或在命令行输入 r…...

[Dify] 如何应对明道云API数据过长带来的Token超限问题
在集成明道云与大型语言模型(LLM)如ChatGPT或本地部署的Dify时,开发者经常会面临一个核心问题:API获取的数据太长,超出LLM支持的Token数限制,导致无法直接处理。本文将深入探讨这个问题的成因,并提供几种可行的解决方案,包括分段处理、外部知识库构建等策略。 明道云AP…...
Axure动态面板学习笔记
一、动态面板概述 动态面板(Dynamic Panel)是Axure中一个强大的交互组件,它本质上是多页面的集合,可以实现更丰富的页面交互功能。 主要特点: 可以包含多个状态(State),每个状态相当于一个独立页面 支持在不同状态间切换&#…...

eNSP企业综合网络设计拓扑图
1.拓扑图 2.拓扑配置 此拓扑还有一些瑕疵,仅做参考和技术提升使用。 想要配置的可以关注下载 大型网络综合实验拓扑图(eNSP)资源-CSDN文库...
工程化架构设计:Monorepo 实战与现代化前端工程体系构建
三、核心架构实践:从模块管理到微前端落地 1. Monorepo 进阶:依赖治理与性能优化 痛点深化 依赖提升冲突:不同包对同一依赖的版本要求冲突幽灵依赖治理:未声明依赖被非法引用巨型仓库构建慢:全量构建耗时随项目增长线…...

BugKu Web渗透之备份是个好习惯
启动场景后,网页显示一段字符串。 看起来像md5值,但是又过长了。 步骤一:右键查看源代码,没有发现任何异常。 步骤二:使用dirsearch去查看是否有其他可疑文件。 在终端输入: dirsearch -u http://117.72.…...