ffmpeg命令分析-ss

《FFmpeg原理》的社群来了,想加入社群的朋友请购买 VIP 版,VIP 版有更高级的内容与答疑服务。


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

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


命令如下:ffmpeg -ss 3 -i a.mp4 a2.mp4

-ss 3 ,seek 到输入文件的第三秒开始提取视频


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

ffmpeg_opt.c 3412行
{ "ss",HAS_ARG | OPT_TIME | OPT_OFFSET | OPT_INPUT | OPT_OUTPUT,{ .off = OFFSET(start_time) }, "set the start time offset", "time_off" },

从上面定义可以看出,-ss 3 会解析赋值 给 OptionsContext 的 start_time 字段。

在前面文章《FFmpeg源码分析-命令行》,分析过命令行参数的类别,主要有3类。

1,作用于 输入文件 的参数。

2,作用于 输出文件 的参数。

3,全局参数。

因为 -ss 是在 -i 前面,所以 现在的 -ss 是作用于输入文件的参数。


下面就来看看 OptionsContext 的 start_time 最后用在哪里,如下截图

在 ffmpeg_opt.c 1161行使用了 o->start_time。然后判断如果文件封装格式 AVFMT_SEEK_TO_PTS 是否置位,如果没置位 seek_timestamp 会减少 3*AV_TIME_BASE / 23 的值。

AVFMT_SEEK_TO_PTS 在源码的注释是 Seeking is based on PTS,是否基于 PTS 进行seek。

可以看到 FFmpeg 里面其实处理了非常多的兼容性问题。对不同的格式都进行了处理,自身项目如果要调 avformat_seek_file 这个函数,最好把上面的AVFMT_SEEK_TO_PTS 判断 也照抄进去项目。


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Loken2020

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值