ffmpeg命令分析-t
本系列 以 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相关推荐
- ffmpeg命令分析【详细分析合集】
ffmpeg命令分析[内容包括]-vf/ac/b:v/r/re/segment/t/ss/output_ts_offset/vn/acc/print/yuv420p/yuv封装mp4/FFmpeg硬件 ...
- ffmpeg命令分析-vn
本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 本系列主要分析各种 ffmpeg 命令参数 在代码里是如何实现的.a.mp4下载链接:百度网盘,提取码:nl0s ...
- ffmpeg命令分析-re
本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 本系列主要分析各种 ffmpeg 命令参数 在代码里是如何实现的.a.mp4下载链接:百度网盘,提取码:nl0s ...
- ffmpeg命令分析-segment
本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 本系列主要分析各种 ffmpeg 命令参数 在代码里是如何实现的.a.mp4下载链接:百度网盘,提取码:nl0s ...
- ffmpeg命令分析-ac
本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 本系列主要分析各种 ffmpeg 命令 在代码里是如何实现的.a.mp4下载链接:百度网盘,提取码:nl0s . ...
- ffmpeg命令分析-pix_fmt
本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 本系列主要分析各种 ffmpeg 命令参数 在代码里是如何实现的.a.mp4下载链接:百度网盘,提取码:nl0s ...
- ffmpeg命令分析-r
本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 之前的文章分析 FFMpeg 工程的 do_video_out() 函数的时候,建议不关注 delta0,delt ...
- ffmpeg命令分析-tee输出多路流
本文 以 ffmpeg4.4 源码为准,a.mp4下载链接:百度网盘,提取码:nl0s . 早期 FFmpeg 在 转 码 后 输出 直播 流 时并 不支持 编码 一次 之后 同时 输出 多路 直播 ...
- FFMPEG命令汇总
1.ffmpeg使用语法 命令格式: ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件] ffmpeg [[options][`-i' input_file ...
最新文章
- python注解实现原理_Python3注解+可变参数实现
- API接口让呼叫中心渠道,变更加全面丰富
- Jquery jqXHR对象的属性和方法
- C语言用递归函数求1累加到100求和
- Android官方开发文档Training系列课程中文版:线程执行操作之线程间通讯
- php 日期时间运算的小结(计算当前时间之后(之前)的时间)
- python工作区是什么_在IPython中保存工作区
- 转-由12306.cn谈谈网站性能技术
- 分布式文件系统HDFS体系
- springcloud gateway介绍
- wakeup_in休眠唤醒
- 【论文阅读】Zero-Resource Knowledge-Grounded Dialogue Generation
- 51单片机数码管静态显示
- Python编写斗地主游戏(单机版)
- php跌涨算法,php砍价算法
- 【LearningChain】WhenMachineLearningMeetsBlockchainADecentralizedPrivacy-preserving and SecureDesign
- kubelet源码 删除pod pod_workers.go(三)
- Redis: Redis的主从复制(Master/Slave),一主二仆,薪火相传,反客为主,哨兵模式sentinel
- 知数堂郑松华:MySQL 8.0 SQL优化之CTE 、窗口函数的应用
- 获取下拉框select上次选择的值
热门文章
- 清华大学知识工程实验室招聘前端工程师
- python的运维开发课程_Python自动化运维开发实战课程方案
- excel模板文件下载与导入校验
- matlab获取选中的点_事件相关电位基础(二)——MATLAB中PSYCHTOOLBOX和EEGLAB的安装...
- 500拦截报错 axios_axios拦截设置和错误处理方法
- STM32物联网智能鱼缸智能家居系统(程序+原理图+PCB+图文教程)
- 【译】Spring Boot Features
- python基础案例:迅雷下载
- 新版Excel(完结版)
- Impinj GPIO快速上手指南