之前在工作中,有遇到需要程序化截取视频片段的场景,这里使用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 命令行参数

如何用ffmpeg截取视频片段截取时间不准确的坑相关推荐

  1. ffmpeg 截取视频片段 - python

    ffmpeg -i plutopr.mp4 -vcodec copy -acodec copy -ss 00:00:10 -to 00:00:15 cutout1.mp4 参数解析 -vcodec c ...

  2. FFmpeg:截取视频片段转成GIF动画

    前段时间写过一篇文章,介绍了FFmpeg的几个常用的命令行.最近,项目里需要做一个把视频片段转成GIF动画的功能,便于用户分享到微博.惊奇地发现,原来强大的FFmpeg是支持的! 可以简单地执行下面的 ...

  3. 日常技巧之使用FFmpeg进行快速视频压缩和视频片段截取

    1 引言 最近由于工作需要,做了很多汇报材料.为了展示算法效果,大多神经网络开发人员都直接将模型跑出来的结果做成视频,但是生成的视频文件往往很大,在PPT插入时显得异常臃肿,真让人脑壳大 >_& ...

  4. 视频格式转换器如何截取视频片段

    2019独角兽企业重金招聘Python工程师标准>>> 电影中某个片段很精彩想截取出来,甚至时间精确到秒,毫秒,我用狸窝全能视频转换器(下载)如何实现截取视频片段.除了视频片段截取还 ...

  5. 如何截取视频片段 批量截取片段的方法

    如何截取视频片段 多个视频批量截取片段的方法?截取视频片段的操作很常用到,尤其是喜欢在网上分享小视频的朋友们,看到某电视剧或电影等视频的某个精彩片段就会想截取下来分享到网络.怎么操作呢? 各位用户朋友 ...

  6. windows+python+opencv截取视频片段

    import cv2 # OpenCV import tkinter.filedialog # Python文件对话框filename = tkinter.filedialog.askopenfile ...

  7. 如何截取视频片段 批量截取片段的方法 1

    如何截取视频片段 多个视频批量截取片段的方法?截取视频片段的操作很常用到,尤其是喜欢在网上分享小视频的朋友们,看到某电视剧或电影等视频的某个精彩片段就会想截取下来分享到网络.怎么操作呢? 各位用户朋友 ...

  8. moviepy截取视频片段的两种方法

    截取视频片段是比较常用的操作,也是必须要会操作. 使用成员函数subclip 截取视频片段为内存对象: import time from moviepy.editor import *if __nam ...

  9. 怎么截取视频片段?截取视频片段其实很好操作

    怎么截取视频片段?不知道小伙伴们平时有没有看到一些影视剧的混剪视频,这类视频主要就是将影视剧中的一些好看好玩的片段做一个整合.那么在剪辑的过程中,不可避免地需要对视频片段进行截取.下面小编就来给大家介 ...

最新文章

  1. 爱立信:用什么保持全球老大的地位?
  2. ElementUI中el-select请求springboot后台数据显示下拉项并在el-table中格式化显示
  3. html5 楚汉争,楚汉争霸的起关键作用的五个人 这五人都有着不可忽视的影响
  4. 产品经理思维模型:怎么理解MVP、PMF
  5. C语言学习:malloc()函数
  6. STM32H743+CubeMX-定时器TIM输出PWM(Output Compare模式)
  7. 为什么 Linux 默认页大小是 4KB
  8. [python]python jieba 模块
  9. 机器学习实战8-Apriori算法
  10. C语言中结构化数据(变量,指针,数组,字符串,结构体和联合)的内存表示
  11. bzoj 3872 [ Poi 2014 ] Ant colony —— 二分
  12. 交流有功功率、无功功率、视在功率计算
  13. ERP系统具有哪些功能?
  14. 现在买基金的人很多,我用Python写了个快速追踪基金的收益情况!所以说没有它做不了的事!
  15. 用python画奥特曼_你都用 Python 来做什么?
  16. 文本匹配-bimpm
  17. 论文中的结果分析怎么写?
  18. Linux网络编程基础:listen函数
  19. 如何把产品打造成有生命的品牌
  20. opencv遍历像素的方式

热门文章

  1. cocos creator微信小游戏截图
  2. 【微机原理与接口技术】
  3. 高质量的CAD练习图纸在线分享
  4. 双足竞走机器人的意义_双足竞走机器人设计1
  5. threejs使用精灵图添加图片贴图
  6. node内存溢出问题 Javascript Heap out of memory
  7. 51单片机驱动ESP8266
  8. Review (Homography+Camera calibration) and others(Week 7 + Week 8)
  9. 东软睿驰与联合电子达成战略合作,抢占国产化基础软件市场新风口
  10. xlsx VLOOKUP 怎么用