如何用ffmpeg截取视频片段 以及 截取时间不准确的坑

news2024/11/14 18:34:38

在这里插入图片描述

   之前在工作中,有遇到需要程序化截取视频片段的场景,这里使用ffmpeg命令行就可以很容易实现,这里也记录下我们使用过程中遇到的坑,希望对大家也有所帮助。
   举个例子,当我们要截取视频文件中input.mp4的第15秒到第98秒时,ffmpeg命令行可以这么写:

ffmpeg -ss 15 -to 98 -i input.mp4 -c:v copy output.mp4

   这里的参数-c:v copy 指的是复用原始视频的编码格式,如果想切换视频编码也可以直接指定,比如-c:v libx264 (关于修改视频和音频编码的问题,后续会继续出一篇博客)。另外-ss和-to后面也可以写成时:分:秒的格式,比如要截取视频00:12:01开始到00:15:21的视频,命令行就可以写成如下:

ffmpeg -ss 00:12:01 -to 00:15:21 -i input.mp4 -c:v copy output.mp4

   如果先从某个时间点开始,截取之后的多少秒视频,我们可以将-to参数替换为-t参数,比如我想从视频的00:12:01开始截取之后的60秒视频,命令行就也这么写:

ffmpeg -ss 00:12:01 -t 60 -i input.mp4 -c:v copy output.mp4

  这里需要注意的是如果你同时使用了-t和-to参数,那么ffmpeg会优先使用-t参数的值,也就是说-to参数无效 。

-ss指定起始时间点不准确的问题

   这里再补充一个我们使用中遇到的坑,就是视频截取时间点不准确的问题,以上命令行在我们生产环境中开始还能正常使用,但随着我们输入的视频时长越来越长,我们发现截取出来的视频越来越不对,比如我想从第5分钟截取到第10分钟,结果上面命令行给截出来的是第3分钟到第6分钟的视频。
   后来查阅ffmpeg官网发现,-ss参数有坑,其放在-i前和后的效果不一样,官网是这么介绍-ss参数的:

-ss position (input/output)
When used as an input option (before -i), seeks in this input file to position. Note that in most formats it is not possible to seek exactly, so ffmpeg will seek to the closest seek point before position. When transcoding and -accurate_seek is enabled (the default), this extra segment between the seek point and position will be decoded and discarded. When doing stream copy or when -noaccurate_seek is used, it will be preserved.
When used as an output option (before an output url), decodes but discards input until the timestamps reach position.
position must be a time duration specification, see (ffmpeg-utils)the Time duration section in the ffmpeg-utils(1) manual.

   官方还特意提醒了下,当-ss放在-i参数前,其搜索到的时间点位置是不准确的,ffmpeg只能检索到目标时间点之前最近的某个点。当-ss参数在-i参数之后,ffmpeg会将视频重新解码,然后丢弃目标起始时间点之前的视频,这样截取的视频起始时间点才是准确的,但貌似执行速度会慢很多(可能是涉及到视频解码)。
   所以以上几条命令,要想在任何输入下拿到预期结果,就应该这么写:

ffmpeg -i input.mp4 -ss 15 -to 98 -c:v copy output.mp4 
ffmpeg -i input.mp4 -ss 00:12:01 -to 00:15:21 -c:v copy output.mp4  
ffmpeg -i input.mp4 -ss 00:12:01 -t 60 -c:v copy output.mp4

参考资料

  1. ffmpeg 命令行参数

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

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

相关文章

【C语言练习】逻辑分析题

目录题目一:求名次题目详情:解题思路:题目二:找凶手题目详情:解题思路:题目一:求名次 题目详情: 5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果: A…

(02)Cartographer源码无死角解析-(52) 2D点云扫描匹配→ceres扫描匹配:CeresScanMatcher2D→栅格地图残差

讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录_最新无死角讲解:https://blog.csdn.net/weixin_43013761/article/details/127350885 文末…

上海洲邦携手图扑建设数字孪生工厂,获 2022 智能制造优秀场景

前言 12 月 2 日,工信部公示了 2022 年度智能制造示范工厂揭榜单位和优秀场景名单。图扑软件和上海洲邦合作建设的宁波甬友数字孪生工厂被评为优秀场景,全国共有 369 个智能制造典型场景入选。 《智能制造试点示范行动实施方案》包括智能制造优秀场景和…

ESP-IDF:快速排序测试

ESP-IDF:快速排序测试 /快速排序测试/ void printArray(int arr[], int len) { for (int i 0; i < len; i) { cout << arr[i] << " "; } cout << endl; } void QuickSort(int arr[], int start, int end) { int i start; int j end; // 找…

【IoT】蔽障智能车设计:带有无线调试系统的蔽障小车

说明 近年来随着计算机在社会领域的渗透和大规模集成电路的发展&#xff0c;单片机的应用正在不断地走向深入&#xff0c;由于它具有功能强&#xff0c;体积小&#xff0c;功耗低&#xff0c;价格便宜&#xff0c;工作可靠&#xff0c;使用方便等特点&#xff0c;因此越来越广…

Activiti7工作流-使用idea插件actiBPM设计请假流程---工作流工作笔记005

首先我们看一下我们之前写的测试类, ProcessEngine 这个流程引擎,打开 看源码可以看到有几个常用的, HistoryService就是用来管理之前_hi表的,关于历史的 TaskService用来管理任务的 RuntimeService用来管理_run那些运行时的表的 然后我们还可以通过,上面定义的processEngi…

程序员的成长离不开哪些软技能?

道破一个残忍的真相&#xff1a;一个程序员的成长往往是软技能&#xff1e;硬技能&#xff0c;想纯靠技术能力一路挺过35岁基本是不可能的任务&#xff0c;作为一个优秀的程序员&#xff0c;离不开以下这些软技能。 较真 所有在技术上的较真都是一次专业技能的提升&#xff0…

Ruoyi-Cloud框架学习-【07 新增功能模块】

根据该博客新建模块后&#xff0c;在添加具体的数据表实现增删改查 在ruoyi-cloud中建立数据表 新建business_device表中【与gen_table、gen_table_column在一个库】 CREATE TABLE business_device (id bigint NOT NULL AUTO_INCREMENT COMMENT 主键,name varchar(255) COLLA…

USB转双串口芯片 CH342 兼容替代CP2105

概述CH342是一个USB总线的转接芯片&#xff0c;实现USB转两个异步串口。每个串口都支持高速全双工&#xff0c;支持奇偶校验&#xff0c;提供了常用的MODEM联络信号&#xff0c;用于为计算机扩展异步串口&#xff0c;或者将普通的串口设备或者MCU直接升级到USB总线。特点全速US…

PySpark数据分析基础:核心数据集RDD原理以及操作一文详解(一)

目录 前言 一、RDD概念 二、RDD与DataFrame之间的区别 特性区别 本质区别 三、PySpark中RDD的操作 1.aggregate 2.aggregateByKey 3.map 4.mapPartitions 5.getNumPartitions 6. glom() 点关注&#xff0c;防走丢&#xff0c;如有纰漏之处&#xff0c;请留言指教&am…

< 每日算法 - JavaScript解析:用两个栈实现队列 >

每日算法 - JavaScript解析&#xff1a;用两个栈实现队列一、任务描述&#xff1a;拓展知识二、问题解析三、解决方案&#xff1a;参考文献往期内容 &#x1f4a8;一、任务描述&#xff1a; 用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和…

JS扩展运算符(...)的用法

参考链接&#xff1a; 本文可以说是完全抄写的参考链接的内容&#xff0c;本文的目的只用于自己进行记录&#xff0c;加深理解。原文参考链接 一、定义&#xff1a; 扩展运算符(...)是ES6的新增语法&#xff0c;用于取出参数对象中的所有可遍历属性&#xff0c;然后拷贝到当前…

vue移动端适配方案

一、基于rem的适配方案 rem是什么&#xff1f; rem是指相对于根元素的字体大小的单位&#xff0c;在日常开发过程中我们通常把根元素&#xff08;html/body&#xff09;的字体设置为10px,方便于我们计算&#xff08;此时子元素的1rem就相当于10px&#xff09;。 适用场景 不…

开学季,给上小学的孩子送什么比较好?小学生比较实用的礼物

很快来临开学的日子&#xff0c;对于上小学的孩子们&#xff0c;送写学习用具之类&#xff0c;或者是孩子自身喜欢的玩具也可以的&#xff0c;但是因为大部分小朋友在学习时都会眨眼睛&#xff0c;也有些近视的现象了&#xff0c;所以我会选择送护眼的用具比较合适的&#xff0…

DBCO-SS-NHS;CAS NO:1435934-53-4 二苯并环辛炔-二硫键-活性酯,科研实验用试剂

DBCO-SS-活性酯|DBCO-SS-NHS酯 名称;二苯并环辛炔-二硫键-活性酯&#xff1b;DBCO-SS-NHS CAS NO&#xff1a;1435934-53-4 分子量&#xff1a;565.66 分子式&#xff1a;C28H27N3O6S2 含 量&#xff1a;>95% 用 途&#xff1a;仅供科研实验使用&#xff0c;不用于诊治…

Kettle(三)数据写入错误如何处理?

Kettle作为数据治理工具&#xff0c;总是会涉及到数据的搬迁&#xff0c;在原始数据过大、种类过多时写入肯定会出现一些错误&#xff08;缺少必填项、数据格式错误、主键冲突等等&#xff09;&#xff0c;那么Kettle如何解决&#xff1f;其实Kettle与我们自己写程序的思维不会…

从零开发一个非常有意思的 Python 项目:手势识别

最近开发了一个手势处理的项目&#xff08;零基础也可以学&#xff0c;就是针对零基础的&#xff09;&#xff0c;我在这儿简单的复述一下原理&#xff0c;总体来说还是比较简单的&#xff0c;主要运用的知识就是opencv&#xff0c;python基本语法&#xff0c;图像处理基础知识…

OCR文字识别技术

OCR全称是optical character recognition&#xff0c;中文光学字符识别。主要技术是&#xff1a;把图像形状转变为文本字符。简单来说&#xff0c;OCR技术就是通过图像处理和模式识别技术对光学的字符进行识别&#xff0c;即&#xff0c;对文本资料进行扫描&#xff0c;然后对图…

呕心沥血保姆级Fiddler移动端抓包

本篇文章&#xff0c;博主想使用通俗易懂的话语&#xff0c;让大家明白以下内容&#xff1a;什么是抓包哪些场景需要用到抓包Fiddler抓包的原理怎样使用Fiddler进行移动端抓包抓包包 (Packet) 是TCP/IP协议通信传输中的数据单位&#xff0c;一般也称“数据包”。我们平常测试过…

PCI设备的访问方法_非桥设备(type0)

PCI设备的访问方法_非桥设备(type0) 文章目录PCI设备的访问方法_非桥设备(type0)一、硬件结构二、 PCI本地总线的信号三、 访问PCI设备3.1 怎么访问PCI设备3.1 PCI设备的地址空间3.2 访问PCI设备的步骤3.3 示例&#xff1a;配置PCI Agent设备致谢一、硬件结构 PCI系统框图&…