本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8

本系列主要分析各种 ffmpeg 命令参数 在代码里是如何实现的。a.mp4下载链接:百度网盘,提取码:nl0s 。


命令如下:ffmpeg -i a.mp4 -t 10 a2.mp4

-t 10 ,从开头截取10秒的视频数据。


命令行参数 -t 定义如下:

ffmpeg_opt.c 3404行
{ "t", HAS_ARG | OPT_TIME | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT,{.off = OFFSET(recording_time) },"record or transcode \"duration\" seconds of audio/video","duration" },

从上面定义可以看出,-t 10 会解析赋值 给 OptionsContext 的 recording_time 字段。

我刚开始搜索的时候,以为是 check_recording_time() 实现了上面那条命令的时间限制,断点调试下来发现不是,根本没跑进去 check_recording_time()。

一步一步加断点,发现到最后一帧的时候 av_buffersrc_add_frame_flags() 函数执行之后,avfilter_graph_request_oldest() 立即返回了 AVERROR_EOF,这个很奇怪。如图:

看ffmpeg的源码,函数说明,只有传递进 av_buffersrc_add_frame_flags() 函数 的AVFrame 是NULL,下次调 avfilter_graph_request_oldest() 才会返回 AVERROR_EOF。

最后一帧AVFrame 明明不是NULL,却也导致 avfilter_graph_request_oldest() 返回了 AVERROR_EOF。非常奇怪。

能让 filter 链返回结束,输入的AVFrame 又是正常的,我思索了30分钟,那只能在 初始化 filter那里搞了点事情。

重新看回 configure_input_video_filter() 函数,发现里面果然用了 recording_time 这个变量,请看下图。

总结:

能让 avfilter_graph_request_oldest() 返回了 AVERROR_EOF,有两种情况。

1,传递进 av_buffersrc_add_frame_flags() 函数 的AVFrame 是NULL。

2,初始化filter 的时候用了 trim filter,时间裁剪滤镜,到时间了,avfilter_graph_request_oldest() 也会返回了 AVERROR_EOF。


由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。

ffmpeg命令分析-t相关推荐

  1. ffmpeg命令分析【详细分析合集】

    ffmpeg命令分析[内容包括]-vf/ac/b:v/r/re/segment/t/ss/output_ts_offset/vn/acc/print/yuv420p/yuv封装mp4/FFmpeg硬件 ...

  2. ffmpeg命令分析-vn

    本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 本系列主要分析各种 ffmpeg 命令参数 在代码里是如何实现的.a.mp4下载链接:百度网盘,提取码:nl0s ...

  3. ffmpeg命令分析-re

    本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 本系列主要分析各种 ffmpeg 命令参数 在代码里是如何实现的.a.mp4下载链接:百度网盘,提取码:nl0s ...

  4. ffmpeg命令分析-segment

    本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 本系列主要分析各种 ffmpeg 命令参数 在代码里是如何实现的.a.mp4下载链接:百度网盘,提取码:nl0s ...

  5. ffmpeg命令分析-ac

    本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 本系列主要分析各种 ffmpeg 命令 在代码里是如何实现的.a.mp4下载链接:百度网盘,提取码:nl0s . ...

  6. ffmpeg命令分析-pix_fmt

    本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 本系列主要分析各种 ffmpeg 命令参数 在代码里是如何实现的.a.mp4下载链接:百度网盘,提取码:nl0s ...

  7. ffmpeg命令分析-r

    本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 之前的文章分析 FFMpeg 工程的 do_video_out() 函数的时候,建议不关注 delta0,delt ...

  8. ffmpeg命令分析-tee输出多路流

    本文 以 ffmpeg4.4 源码为准,a.mp4下载链接:百度网盘,提取码:nl0s . 早期 FFmpeg 在 转 码 后 输出 直播 流 时并 不支持 编码 一次 之后 同时 输出 多路 直播 ...

  9. FFMPEG命令汇总

    1.ffmpeg使用语法 命令格式:     ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]     ffmpeg [[options][`-i' input_file ...

最新文章

  1. python注解实现原理_Python3注解+可变参数实现
  2. API接口让呼叫中心渠道,变更加全面丰富
  3. Jquery jqXHR对象的属性和方法
  4. C语言用递归函数求1累加到100求和
  5. Android官方开发文档Training系列课程中文版:线程执行操作之线程间通讯
  6. php 日期时间运算的小结(计算当前时间之后(之前)的时间)
  7. python工作区是什么_在IPython中保存工作区
  8. 转-由12306.cn谈谈网站性能技术
  9. 分布式文件系统HDFS体系
  10. springcloud gateway介绍
  11. wakeup_in休眠唤醒
  12. 【论文阅读】Zero-Resource Knowledge-Grounded Dialogue Generation
  13. 51单片机数码管静态显示
  14. Python编写斗地主游戏(单机版)
  15. php跌涨算法,php砍价算法
  16. 【LearningChain】WhenMachineLearningMeetsBlockchainADecentralizedPrivacy-preserving and SecureDesign
  17. kubelet源码 删除pod pod_workers.go(三)
  18. Redis: Redis的主从复制(Master/Slave),一主二仆,薪火相传,反客为主,哨兵模式sentinel
  19. 知数堂郑松华:MySQL 8.0 SQL优化之CTE 、窗口函数的应用
  20. 获取下拉框select上次选择的值

热门文章

  1. 清华大学知识工程实验室招聘前端工程师
  2. python的运维开发课程_Python自动化运维开发实战课程方案
  3. excel模板文件下载与导入校验
  4. matlab获取选中的点_事件相关电位基础(二)——MATLAB中PSYCHTOOLBOX和EEGLAB的安装...
  5. 500拦截报错 axios_axios拦截设置和错误处理方法
  6. STM32物联网智能鱼缸智能家居系统(程序+原理图+PCB+图文教程)
  7. 【译】Spring Boot Features
  8. python基础案例:迅雷下载
  9. 新版Excel(完结版)
  10. Impinj GPIO快速上手指南