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

关键注意事项:

  1. 保持原画质参数:使用 -c copy 直接复制编码流,分辨率/帧率自动继承
  2. 时间精度优化
    • 添加 -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
    
  3. MKV格式兼容性:MKV容器支持流复制,无需转码

验证输出信息

执行后可运行 ffprobe output.mkv 检查输出视频的时长、分辨率、帧率是否与需求一致

注:若裁剪位置不在关键帧,ffmpeg会自动跳到前一关键帧,可能导致头尾有数秒误差。如需帧级精准需重新编码(不推荐,会降低质量)

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

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

相关文章

SystemVerilog—Interface语法(一)

SystemVerilog中的接口(interface)是一种用于封装多模块间通信信号和协议的复合结构,可显著提升代码复用性和维护效率。其核心语法和功能如下: 一、接口的基本定义 1. 声明语法 接口通过interface关键字定义,支持信…

android binder(四)binder驱动详解

ref: Android10.0 Binder通信原理(五)-Binder驱动分析_binder: 1203:1453 ioctl 40046210 77004d93f4 return-CSDN博客 https://juejin.cn/post/7214342319347712057#heading-0 第6课第1节_Binder系统_驱动情景分析_数据结构_哔哩哔哩_bilibili

QT/c++航空返修数据智能分析系统

简介 1、区分普通用户和管理员 2、界面精美 3、功能丰富 4、使用cppjieba分词分析数据 5、支持数据导入导出 6、echarts展示图表 效果展示 演示链接 源码获取 int main(){ //非白嫖 printf("📡:%S","joyfelic"); return 0; }

ToolsSet之:数值提取及批处理

ToolsSet是微软商店中的一款包含数十种实用工具数百种细分功能的工具集合应用,应用基本功能介绍可以查看以下文章: Windows应用ToolsSet介绍https://blog.csdn.net/BinField/article/details/145898264 ToolsSet中Number菜单下的Numeric Batch是一个数…

Ubuntu20.04 LTS 升级Ubuntu22.04LTS 依赖错误 系统崩溃重装 Ubuntu22.04 LTS

服务器系统为PowerEdge R740 BIOS Version 2.10.2 DELL EMC 1、关机 开机时连续按键盘F2 2、System Setup选择第一个 System BIOS 3、System BIOS Setting 选择 Boot Setting 4、System BIOS Setting-Boot Setting 选择 BIOS Boot Settings 5、重启 开启时连续按键盘F11 …

(javaSE)Java数组进阶:数组初始化 数组访问 数组中的jvm 空指针异常

数组的基础 什么是数组呢? 数组指的是一种容器,可以用来存储同种数据类型的多个值 数组的初始化 初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器中的过程。 数组初始化的两种方式:静态初始化,动态初始化 数组的静态初始化 初始化…

支持向量机(SVM)例题

对于图中所示的线性可分的20个样本数据,利用支持向量机进行预测分类,有三个支持向量 A ( 0 , 2 ) A\left(0, 2\right) A(0,2)、 B ( 2 , 0 ) B\left(2, 0\right) B(2,0) 和 C ( − 1 , − 1 ) C\left(-1, -1\right) C(−1,−1)。 求支持向量机分类器的线…

UE特效Niagara性能分析

开启Niagara调试器 开启显示概览 界面显示 🟩 上方绿色面板:Niagara DebugHud 这是 HUD(调试视图) 模式下的性能统计显示,内容如下: 项目含义SystemFilter: ShockWave_01当前选中的 Niagara 粒子系统名称…

碳中和新路径:铁电液晶屏如何破解高性能与节能矛盾?

一、显示技术困局:当 “高刷” 遭遇 “高耗” 在元宇宙、电竞产业蓬勃发展的当下,显示设备的刷新率与能耗成为行业痛点。传统液晶受 “边缘场效应” 制约,刷新率长期停滞在 300Hz 以下,动态画面拖影问题显著;同时&…

Vue3+SpringBoot全栈开发:从零实现增删改查与分页功能

前言 在现代化Web应用开发中,前后端分离架构已成为主流。本文将详细介绍如何使用Vue3作为前端框架,SpringBoot作为后端框架,实现一套完整的增删改查(CRUD)功能,包含分页查询、条件筛选等企业级特性。 技术栈介绍 前端&#xff1…

IBM 与嘉士伯(Carlsberg)携手推进 SAP S/4HANA 数字化转型,打造啤酒行业新范式

在啤酒酿造拥有悠久传统的同时,嘉士伯也在积极拥抱前沿技术,迈出数字化转型的坚实步伐。2025年,嘉士伯宣布与 IBM 建立多年的合作伙伴关系,在其西欧业务中全面部署 SAP S/4HANA,旨在提升企业的运营效率、敏捷性和创新能…

深度解析 Nginx 配置:从性能优化到 HTTPS 安全实践

引言 Nginx 作为高性能的 Web 服务器和反向代理,其配置灵活性和强大功能备受开发者青睐。本文基于一份生产环境的 Nginx 配置文件,详细拆解其核心配置逻辑,涵盖性能优化、HTTPS 安全配置、反向代理及静态资源处理等关键环节,帮助…

传送文件利器wormhole的使用方法

传送文件利器wormhole的使用方法 wormhole文件传送工具是基于python的一个快捷的传送工具,在安装此工具之前首先要部署好python环境。 安装的过程如下: 1.部署好python 环境 LINUX系统自带PYTHON环境,直接安装即可。 WINDOWS系统需要安装py…

LangChain输出格式化实践:提升测试工程师LLM开发效率的完整指南

引言 在基于LangChain的LLM测试开发中,输出格式化是连接大模型推理能力与自动化测试系统的关键环节。通过结构化输出(如JSON),测试工程师可快速将LLM生成的测试用例、缺陷报告等结果对接至CI/CD流水线。本文系统解析LangChain内置…

Go 语言 + Word 文档模板:WordZero 引擎如何让企业文档处理效率提升 300%?

前言 在企业级应用开发中,自动化生成Word文档一直是个令人头疼的需求。传统的方案要么依赖于复杂的Office COM组件,要么使用功能有限的第三方库。今天为大家介绍一个纯Go语言实现的Word操作库——WordZero,特别是其强大的模板引擎功能&#…

Eclipse 修改字符集

Eclipse 修改字符集 在软件开发过程中,字符集的设置对于代码的正确显示和运行至关重要。Eclipse 作为一款流行的集成开发环境(IDE),提供了方便的字符集修改功能。本文将详细讲解如何在 Eclipse 中修改字符集,以确保项目文件的正确处理。 1. 引言 在 Java 开发中,常见的…

C++ 游戏开发详细流程

🧠 第一阶段:项目规划与架构设计 关键词:系统性、模块化、可扩展性 1.1 目标明确 游戏类型:2D / 2.5D / 3D / VR平台选择:PC、主机、移动设备多人/单人:是否含网络模块(决定是否使用 socket、U…

使用Docker-NVIDIA-GPU开发配置:解决 Docker NVIDIA 运行时错误方法

问题描述 运行 Docker 命令时,系统提示 docker: Error response from daemon: unknown or invalid runtime name: nvidia,表明 Docker 无法识别 NVIDIA 运行时。这一错误通常出现在使用 --runtime=nvidia 和 --gpus 参数时,意味着 NVIDIA 容器运行时未正确安装或配置。NVID…

3516cv610在sample_aiisp上多创一路编码流,方法

3516cv610在sample_aiisp上多创一路编码流,方法 首先确保 vpss grp0有视频流 最好保证 已经有一路视频流能推出来 多创一路编码流思路为 将 vpss grp0又绑定给 vpss_chn1 vpss_chn1有绑定给 venc_chn1 这样我们就多创了一路视频流。 这里思路完全正确 可以实现…

【烧脑算法】不定长滑动窗口:从动态调整到精准匹配以灵活特性实现高效破题

目录 求最长/最大 2730. 找到最长的半重复子字符串 2779. 数组的最大美丽值 1838. 最高频元素的频数 2516. 每种字符至少取 K 个 2831. 找出最长等值子数组 求最短/最小 1234. 替换子串得到平衡字符串 2875. 无限数组的最短子数组 76. 最小覆盖子串 632. 最小区间 …