ChinaFFmpeg

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 14110|回复: 8

[Windows] image2 muxer 的 -frame_pts 选项 输出不正确

[复制链接]
发表于 2018-1-19 09:43:05 | 显示全部楼层 |阅读模式
求助:
我正在用去年 T-bagwell 给 image2 muxer添加了  -frame_pts 的功能,link: https://github.com/FFmpeg/FFmpeg ... 3040da7ac06387970f0

但是在运行的时候,我发现输出不对。我用的命令如下:
ffmpeg.exe -i bear.mp4 -t 10 -f image2 -frame_pts true "images\image-%d.jpg"

输出总是:
image-0.jpg
image-1.jpg
image-2.jpg
image-3.jpg
........
连续的 0, 1,2,。。。序列。


求助,是不是我哪里弄错了?

回复

使用道具 举报

发表于 2018-1-19 12:06:03 | 显示全部楼层
好巧,这个就是我提交的

这个是因为从pkt->pts拿到的pts就是这样的了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-19 12:51:20 | 显示全部楼层
孙悟空 发表于 2018-1-19 12:06
好巧,这个就是我提交的

这个是因为从pkt->pts拿到的pts就是这样的了

其实我就是根据 你github里面的link 才找到这个网站的。

你说得对, pkt->pts 的确就是这个值,我有设断点看过。
但是我比较不理解为什么 pts会是这样,presentation time stamp 怎么会是 0, 1, 。。。 ?
能麻烦您稍微给解释一下么? 我的理解pts应该是以timescale为单位的、显示时间?

谢谢!
回复 支持 反对

使用道具 举报

发表于 2018-1-19 13:16:04 | 显示全部楼层
junli1026 发表于 2018-1-19 12:51
其实我就是根据 你github里面的link 才找到这个网站的。

你说得对, pkt->pts 的确就是这个值,我有设 ...



并没有问题:

[AppleScript] 纯文本查看 复制代码
demuxer -> ist_index:0 type:video next_dts:2067334 next_dts_time:2.06733 next_pts:1933867 next_pts_time:1.93387 pkt_pts:186060 pkt_pts_time:2.06733 pkt_dts:186060 pkt_dts_time:2.06733 off:0 off_time:0
demuxer+ffmpeg -> ist_index:0 type:video pkt_pts:186060 pkt_pts_time:2.06733 pkt_dts:186060 pkt_dts_time:2.06733 off:0 off_time:0
decoder -> ist_index:0 type:video frame_pts:174048 frame_pts_time:1.93387 best_effort_ts:174048 best_effort_ts_time:1.93387 keyframe:0 frame_type:1 time_base:1/90000
filter -> pts:58 pts_time:1.93527 exact:57.958046 time_base:1001/30000
encoder <- type:video frame_pts:58 frame_pts_time:1.93527 time_base:1001/30000
encoder -> type:video pkt_pts:54 pkt_pts_time:1.8018 pkt_dts:54 pkt_dts_time:1.8018



从这段内容可以看到,通过与time_base计算之后的时间是正确的
回复 支持 反对

使用道具 举报

发表于 2018-1-19 14:03:14 | 显示全部楼层
可以通过debug_ts 看到过程
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-24 03:03:19 | 显示全部楼层
孙悟空 发表于 2018-1-19 14:03
可以通过debug_ts 看到过程

谢谢你的帮忙。

好像看上去这个 frame_pts 用的 muxer 出来的pts, 所以永远都是 0, 1, 2, 3 ....
我原以为它会用  demuxer 的pts(在视频中某一帧的pts)。

不知道我这样的理解对不对?
回复 支持 反对

使用道具 举报

发表于 2018-1-24 11:02:09 | 显示全部楼层
junli1026 发表于 2018-1-24 03:03
谢谢你的帮忙。

好像看上去这个 frame_pts 用的 muxer 出来的pts, 所以永远都是 0, 1, 2, 3 ....

不对,是demuxer之后的pts 与时间基处理之后,在与muxer的时间基换算之后得到的muxer的pts

你可以尝试-ss 去seek到某一帧,用-copyts,然后就会得到对应的pts,不是从0开始的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-3-7 09:21:45 | 显示全部楼层
不好意思,时隔这么久,才看到回复。多谢大师兄。

后来我又试了几次,我把time_base(基准时间)   设成跟输入的rtsp视频的基准时间一样,从debug_ts里面看到的值就比较容易理解了。


所以最终我的理解是这样的,
demuxer的时候, 基于time_base 和sample 的时间戳,生成 pkt_time,  这个值可以认为是从0开始
decoder的时候,计算出 frame_pts
encoder的时候,frame_pts 不变,但是time_scale会变化,这个取决于用户命令行参数
muxer的时候,基于用户参数和frame_pts 算出 pkt_pts


不知道上面理解对不对,能力所限,没有能够从代码理解出来,完全是从debug_ts的输出猜的。 希望大师兄解惑。
PS: 书写的真好,正在学习中。多谢大师兄。
回复 支持 反对

使用道具 举报

发表于 2019-3-7 17:52:49 | 显示全部楼层
理解的没有问题,就是要配合debug_ts理解才好
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|Archiver|ChinaFFmpeg

GMT+8, 2024-12-27 12:19 , Processed in 0.049745 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表