如何用ffmpeg截取视频片段&截取时间不准确的坑_ffmpeg -ss 时间不准-程序员宅基地

技术标签: 音视频  ffmpeg  

在这里插入图片描述

   之前在工作中,有遇到需要程序化截取视频片段的场景,这里使用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 命令行参数
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/xindoo/article/details/128810451

智能推荐

Java代码实现SOAP和REST接口工具类_使用java实现soap接口调用的工具类-程序员宅基地

文章浏览阅读1.1k次。SOAP(Simple Object Access Protocol)和REST(Representational State Transfer)是两种不同的Web服务通信协议,因此它们的接口工具类实现也有一些差异。需要注意的是,这些示例代码只实现了最基本的功能,实际使用时可能需要根据具体情况进行修改和扩展。同时还需要注意安全性和性能等方面的问题,例如SSL证书验证、连接池管理和结果缓存等。_使用java实现soap接口调用的工具类

linux raw socket 原始套接字_linux raw通信-程序员宅基地

文章浏览阅读344次。TCP socket,UDP socket只能处理传输层数据,而原始套接字raw socket绕过传输层直接获取网络链路层的数据包。我们平时用的tcpdump, libpcap都是基于raw socket实现的。一般使用方法如下: // raw socket int rawsock = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_IP)); if (rawsock < 0) { perror("SOCK_RAW err_linux raw通信

梯度下降优化算法总结-程序员宅基地

文章浏览阅读1.7w次,点赞14次,收藏74次。本次介绍梯度下降优化算法。主要参考资料为一篇综述《An overview of gradient descent optimization algorithms》_梯度下降优化算法

scanner java重新输入_关于java中scanner对象重复使用的问题-程序员宅基地

文章浏览阅读1.3k次。Scannerscanner=newScanner(System.in);inti=scanner.nextInt();System.out.println(i);intj=scanner.nextInt();System.out.println(j);这样是通过一个scanner对象两次输入分别给两个变量赋值,没有问题,执行后一切正常。Scannerscanner=new..._scanner重复使用

【矢量图】PyEcharts导出图片并矢量化_echarts 导出矢量图-程序员宅基地

文章浏览阅读3.3k次,点赞10次,收藏17次。前言图是门面,但朦胧美并不是文章所需要的问题处理导出图片(JPEG、PNG)的方式,网上很多就不再赘述了,这里咱还是矢量化下吧。网上说用phantomjs-prebuilt.js,我也试了没太整明白。然后 <a id="download" href="">下载</a> <script> const a = window.document.querySelector('#download') a.addEventListener('cl_echarts 导出矢量图

有关大数据的误区:数据统计≠大数据_大数据是不是是以经发生过的事情-程序员宅基地

文章浏览阅读545次。关于大数据的误区:数据统计是已经发生的事情,而大数据往往被用于还没有发生的事情预测或者推荐中,二者不能划等号。不过,无论数据统计也好,大数据也罢,都是为了使工作变得更为有效,让决策更为理性而准确。大数据太火了,被广泛应用到各行各业,而近阶段又有着明显的过热迹象。大数据到底是一个营销词汇,还是一个方法论?本文作者老李正是一家大数据服务提供商的资深员工,他所做的项目就是针对不同行业_大数据是不是是以经发生过的事情

随便推点

Python 进程+协程并发小练习 假设10w个url地址每个请求1秒尝试用4个进程每个进程开启1000个协程去请求统计运行时间_python每秒并发1000个请求-程序员宅基地

文章浏览阅读8.5k次,点赞9次,收藏12次。练习题目进程+协程实现并发小练习假设一个队列中有100000个url地址,每个请求需要1秒钟,尝试用4个进程每个进程开启1000个协程去请求,统计运行时间示例代码# -*- coding: utf-8 -*-# @Time : 2020/12/22 1:49 下午# @Author : Benjamin# @File : testGevent.py# @Software: PyCharmfrom gevent import monkey;mon..._python每秒并发1000个请求

微信小程序在线考试系统 毕业设计(1)首页_考试小程序首页代码-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏25次。wxml代码<view> <!--广告图片 mode="widthFix" 设定高度随宽度自动变化--> <image class="ad01" src="/img/1.png" mode="widthFix"></image></view><view class="chaxun"> <input class="chaxun_zuo" type="text" name="cx_neirong" .._考试小程序首页代码

Java实现“扑克牌游戏”底层逻辑_利用数组随机生成扑克牌-程序员宅基地

Java实现“扑克牌游戏”底层逻辑,包括纸牌类的元素、构造方法和牌堆类的实现。

JavaScript循环_js用户登录验证限制次数while循环做法-程序员宅基地

文章浏览阅读819次。循环是重复性做一件事外面没办法控制每次循环的时间长度循环会增大您的程序时间复杂度(不建议无限循环嵌套 一般情况下不会超过两次)死循环是不会停止的 回导致内存溢出 从而蓝屏循环很多种 常见的三种:while,do while,forwhile循环写法是定义初始值while(布尔类型表达式){循环体 (迭代 初始值变化 操作)var i = 0//初始值定义while (i<5){i++ //不迭代会导致死循环conlose.log(i)//操作 123.._js用户登录验证限制次数while循环做法

图像分割FCN全卷积神经网络_cloudfcn-程序员宅基地

文章浏览阅读1.4k次。FCN全卷积神经网络是图像分割的基础网络FCN实现了端到端的网络,输入mxm图像,输出为mxmxc的图像,其中c代表种类。思想概述FCN叫做全卷积神经网络,顾名思义所有曾都是卷积层!也就是抛掉了全连接层,这是第一个改变;再者卷积神经网络卷到最后特征图尺寸越来越少,分辨率比较小,不适合我们做图像分割,好,这里引入一个上采样的做法,卷积完之后再上采样到大尺寸图;网络又考虑层数不断叠加后原图的信息..._cloudfcn

前端页面制作思路_前端页面设计的思路-程序员宅基地

文章浏览阅读3.7k次,点赞2次,收藏5次。项目中css的页面布局,需要屡顺一下思路,在继续下面的学习。温故而知新!W3C标准:是万维网制定的一系列标准,包括结构化标准语言(html、xml),表现标准语言(css),行为标准语言(DOM,ECMAScript)组成。这个标准倡要将结构,样式,行为分离。在网页制作中,面对设计图,网页制作人员一般要遵循的原则:先考虑设计图中的文字内容和内容模块之间的关系,重点放在编写html..._前端页面设计的思路

推荐文章

热门文章

相关标签