当前位置: 首页 > 编程日记 > 正文

利用FFmpeg切割视频

关键词:FFmpeg,seek,ss,t,to,搜索,定位


介绍

如果你想要从输入文件中切割一部分,需要用到ss选项。

快速定位

需要将ss放在输入文件的前面(即-i的前面)

ffmpeg-ss 00:03:00 -i Underworld.Awakening.avi -frames:v 1 elesos1.jpg

上面的命令会将大约3分钟处的画面生成一帧, 这种基于关键帧的搜索会非常快,但缺点是只能定位到关键帧,而不一定是指定的时间00:03:00,因此不太精确。

[编辑]精确定位

需要将ss放在输入文件的后面(即-i的后面)

ffmpeg-i Underworld.Awakening.avi -ss 00:03:00 -frames:v 1 elesos2.jpg

上面的命令会精确地定位到3分钟,并将该处的画面生成一帧图像。

注意上面2张图片左下角的时间,第一张为"00:02:05:05" ,第2张为 "00:02:05:06".

输入文件会一帧一帧地进行解码直到到达ss所指定的位置,因此会非常慢。而且随着指定时间越长,需要等待的时间也会越长。

[编辑]快速并且精确定位

需要在输入文件前后同时指定ss参数

ffmpeg-ss 00:02:30-i Underworld.Awakening.avi -ss 00:00:30 -frames:v 1 elesos3.jpg

这种方法综合了上面2种方法的优点。

首先快速定位到3分钟之前的某个时间点,然后从该时间点开始一帧一帧地慢慢解码到3分钟。

FFmpeg会首先快速定位到00:02:30附近的关键帧处,然后开始慢慢往后搜索30秒。结果与“精确定位”相同(左下角也是00:02:05:06),但是速度更快。

对于上面2个ss时间点(00:02:30和00:00:30)的设置依赖于关键帧的间隔(即GOP的大小),

X264默认GOP大小为250(即如果输入帧率为25fps,则每10秒一个关键帧)。


切割片断

如果想要从中间切割一段视频,可以将ss和t参数联合使用,其中t参数指定时长,例如“-ss 60 -t 10”将切割一段从60秒到70秒的片断;

或者使用to选项指定结束时间点,如“ -ss 60 -to 70”也一样切割一段从60秒到70秒的片断;选项t和to不能同时使用,如果你同时指定,默认会使用参数t。

[编辑]注意

如果你仅仅在输入文件之前(-i之前)指定了ss选项,那么时间戳会被重置为0,此时选项t和选项to产生的效果一样。

ffmpeg-ss 00:01:00 -i video.mp4 -to 00:02:00 -c copy cut.mp4 ffmpeg-i video.mp4 -ss 00:01:00 -to 00:02:00 -c copy cut.mp4

上面例子中,第一个命令会得到从00:01:00 到 00:03:00的片断,而第二个命令会真正得到从00:01:00 到 00:02:00的片断。

如果你切割的时候使用了流拷贝stream copy (-c copy),并且想用 concat demuxer来合并你切割出来的片断,你需要指定`-avoid_negative_ts 1`:

ffmpeg-ss 00:03:00 -i video.mp4 -t60-c copy -avoid_negative_ts 1 cut.mp4

[编辑]时间格式

你可以使用[HH:MM:SS]格式或者以秒为单位,如00:02:30 或者 150。如果你使用了小数,如02:30.05,小数点后面的05表示1秒*5%,即50毫秒(注:1秒=1000毫秒ms =106微秒µs)而不是帧数,如02:30.5表示2分钟,30秒,500毫秒(即半秒)。

[编辑]

如果将-c:v copy与-ss同时使用,生成的文件可能不能播放,或者出现音视频不同步的问题,因为FFmpeg是强制基于关键帧进行切割的。

[编辑]艺搜参考

http://trac.ffmpeg.org/wiki/Seeking%20with%20FFmpeg

相关文章:

哪些人适合参加软件测试培训?

想要进入互联网行业也不是一句两句那么简单的,近几年,很多人都想要学习软件测试技术,通过做软件测试岗位进入到互联网行业,那么所有人都可以学习这个技术吗?我们下面就来详细的了解一下哪些人适合参加软件测试培训? 哪些人适合参…

Linux的su命令,sudo命令和限制root远程登录

3.7 su命令: su命令是用来切换用户的,例如我要从root用户切换到user2用户: 这个 - 选项是彻底切换用户的意思,如果不加 - 选项也可以,但是切换得不彻底,例如当前的家目录还是root,环境变量也还是…

MongoDB 标准连接字符串

MongoDB 标准连接字符串mongodb://[username:password]host1[:port1][,host2[:port2],…[,hostN[:portN]]][/[database][?options]]注:并非所有MongoDB驱动都支持完整的连接字符串,不支持此格式连接字串的驱动会有替代连接方案,具体请参照驱…

谢文睿:西瓜书 + 南瓜书 吃瓜系列 3. 对数几率回归

Datawhale南瓜书是经典机器学习教材《机器学习》(西瓜书)的公式推导解析指南,旨在让在学习西瓜书的过程中,再也没有难推的公式,学好机器学习。 以往内容: 西瓜书公式推导讲解来了!0. 导学1. 一…

零基础ui设计培训一定要知道字体设计规则

作为一名UI设计师,最最重要的就是字体设计这方面,很多UI设计工作中,字体是必不可缺的,下面小编就为大家详细的介绍一下零基础ui设计培训一定要知道字体设计规则。 零基础ui设计培训一定要知道字体设计规则: 在计算机普…

centos 脚本基础练习1

1,写一个脚本:判断当前系统上是否有用户的默认shell 为bash;如果有,就显示有多少个这类用户;否则就显示没有这类用户;[rootlocalhost mscripts]# cat lx1.sh #!/bin/bashgrep "bash$" /etc/passw…

【组队学习】【26期】图神经网络

图神经网络 论坛版块: http://datawhale.club/c/team-learning/27-category/26 开源内容: https://github.com/datawhalechina/team-learning-nlp/tree/master/GNN 学习目标 我们的组队学习将带领大家入门图神经网络,为大家今后在学习和…

as3回调方法模拟事件监听

//Client.as package callback{import flash.display.Sprite;public class Client extends Sprite{public function Client() {//调用Seriver类的callFun方法,并把clientFun方法传给callFun方法var server : Server new Server();server.callFun(clientFun);}//定义一个回调方…

java培训教程:什么是匿名内部类?怎样创建匿名内部类?

本期java教程要为大家分享的是关于java中的匿名内部类,相信很多同学在学java技术的时候有了解过,下面我们就来详细的看一下。 java培训教程:什么是匿名内部类?怎样创建匿名内部类?匿名内部类是没有名称的内部类。在Java中调用某个方法时&am…

lvs后端realserver的vip管理脚本lvs-realsvr.sh

lvs后端realserver的vip管理脚本lvs-realsvr.sh 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667#!/bin/bash# # 2015/3/27# lvs real server## chkconfig: - 85 15# description: contro…

【组队学习】【26期】Linux教程

Linux教程 论坛版块: http://datawhale.club/c/team-learning/27-category/27 开源内容: https://github.com/datawhalechina/team-learning-program/tree/master/Linux 学习目标 Linux组队学习形式主要为理论代码实践的方式,学习结束后…

java培训机构如何选择适合自己的

java培训机构如今在市面上是越来越多了,主要还是大多数人想要进入到互联网行业,都会先选择学习java技术,那么下面我们就来详细的了解一下java培训机构如何选择适合自己的吧。 java培训机构如何选择适合自己的?结合以往学长学姐们的反馈及总结…

黑马程序员5 多线程

------- android培训、java培训、期待与您交流! ---------- 创建线程的第一种方式:继承Thread类。步骤:1,定义类继承Thread。2,复写Thread类中的run方法。 目的:将自定义代码存储在run方法。让线程运行。 3…

解决 mac ox 终端显示bogon 的问题

方法一. 将DNS设置为Google的DNS服务器地址 8.8.8.8 方法二. 在终端进行设置 sudo hostname yourname 转载于:https://www.cnblogs.com/yshuai/p/7911869.html

【组队学习】【26期】编程实践(Django网站开发)

编程实践(Django网站开发) 论坛版块: http://datawhale.club/c/team-learning/28-category/28 开源内容: https://github.com/datawhalechina/team-learning-program/tree/master/Django 学习目标 从零开始搭建一个属于自己…

asp.net 防注入

http://www.cnblogs.com/zxlin25/archive/2009/03/09/1407237.html转载于:https://www.cnblogs.com/alwayscainiao/archive/2012/10/23/2735011.html

ui设计师要懂哪些B端设计原则?

UI设计师是一个非常广泛的职位,它所接触的工作内容是非常多的,其中B端的设计内容就是一种,产品设计对于不同行业、不同公司、不同决策者都会有很大的差异,没有最好的设计原则,只有最适合你产品的原则。今天小编就为大家…

StartOS 5.0 正式版发布

StartOS 5.0正式版发布了。 StartOS —— 是由东莞瓦力网络科技有限公司发行的开源操作系统,符合国人的使用习惯,预装常用的精品软件,操作系统具有运行速度快,安全稳定,界面美观,操作简洁明快 等特点。Star…

【组队学习】【26期】编程实践(Python办公自动化)

编程实践(Python办公自动化) 论坛版块: http://datawhale.club/c/team-learning/29-category/29 开源内容: https://github.com/datawhalechina/team-learning-program/tree/master/OfficeAutomation 学习目标 了解通过pyth…

软件测试培训分享:性能测试的目的是什么

在软件测试培训中,讲师们会讲到关于性能测试这方面,很多人都不理解,性能测试的目的是什么?性能测试的目的是为了测试产品是否满足在需求说明书中规定的性能,是否达到用户的性能要求,发现产品存在的性能瓶颈&#xff0…

[Android Pro] 有关Broadcast作为内部类时注册的一些问题

很经常Broadcast都会写成一个Activity或者Service的内部类。这时候的注册和普通有点小区别。 有两种情况1、假如是再Manifest文件里面静态注册的话&#xff0c;需要注意。ex&#xff1a;<applicationandroid:icon"drawable/ic_launcher"android:label"string…

NCEPU:线下组队学习周报(008)

线下组队学习 经过一段时间的准备&#xff0c;我们组织的线下组队学习逐步进入正轨。欢迎华北电力大学保定校区的伙伴加入进来大家一起学习一起成长。 我们开展组队学习的内容为&#xff1a; &#xff08;1&#xff09;周志华的《机器学习》&#xff08;西瓜书&#xff09; …

shell脚本初级教学(从基本脚本开始学起)

shell脚本的意义就在于实现以后的自动化运维,Linux其实也是基于shell脚本的所以我今天给大家教两个简单的脚本,并且解释.第一个抽奖脚本:思路:首先创建一个vim文件[rootserver0 ~]# vim /root/choujiangjiaoben.sh // (sh结尾是给自己一个是shell脚本的注释) #!/bin/bash // (以…

UI设计培训分享:app图标设计要遵循哪些原则

APP图片设计是UI设计工作中经常会遇到的&#xff0c;一个好的APP产品&#xff0c;图标的设计是非常重要的&#xff0c;本期小编为大家分享的UI设计培训教程就是app图标设计要遵循哪些原则?来看看下面的详细介绍。 UI设计培训分享&#xff1a;app图标设计要遵循哪些原则? 一、…

如何使用netwokx进行复杂网络的中心性分析?

如何使用netwokx进行复杂网络的中心性分析&#xff1f; 这是本学期在大数据哲学与社会科学实验室做的第七次分享了。 第一次分享的是&#xff1a; 如何利用“wordcloudjieba”制作中文词云&#xff1f; 第二次分享的是&#xff1a; 如何爬取知乎中问题的回答以及评论的数据…

Redis 笔记系列(十一)——Redis的发布和订阅机制

2019独角兽企业重金招聘Python工程师标准>>> 本文说的redis功能没啥大用处&#xff0c;大家知道有这回事情就好&#xff0c;我一笔带过。 Redis的发布订阅 这是什么 进程间的一种消息通信模式&#xff1a;发送者(pub)发送消息&#xff0c;订阅者(sub)接收消息。 例如…

界面交互推荐-25个闪亮创意的404错误页面设计-你从中发现了什么

404错误页面是站长和用户都很不愿见到的页面&#xff0c;因为那意味着该网站不能访问。但404错误是没人能避免&#xff0c;如服务器出现问题&#xff0c;站内需要调整&#xff0c;收到攻击等,我们访问网站的时候&#xff0c;一旦遇到404提示&#xff0c;我们那时的感觉是相当差…

参加完Python培训可以做什么

大家都知道Python在互联网行业是很吃香的&#xff0c;但是参加完Python培训之后&#xff0c;很多人都不知道该从哪个职业方向做起&#xff0c;下面小编就为大家详细的介绍一下参加完Python培训可以做什么? 参加完Python培训可以做什么?目前来看&#xff0c;Python发展得还是不…

my domain

www.yyhcy.co.cc hcy.sourceforge.net转载于:https://www.cnblogs.com/nbalive2001/archive/2012/10/25/2738086.html

【青少年编程】【Scratch】04 事件模块

「青少年编程竞赛交流群」已成立&#xff08;适合6至18周岁的青少年&#xff09;&#xff0c;公众号后台回复【Scratch】或【Python】&#xff0c;即可进入。如果加入了之前的社群不需要重复加入。 微信后台回复“资料下载”可获取以往学习的材料&#xff08;视频、代码、文档&…