ChinaFFmpeg

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 8443|回复: 4

[Linux] 使用自定义代码生成自定义视频的帧率问题。

[复制链接]
发表于 2019-11-4 13:42:37 | 显示全部楼层 |阅读模式

现在我有使用代码视频。1.我每一帧去计算视频的位置和大小以及旋转和透明度, 最后把这些帧都合并到一起,做成视频。
2. 最后把视频overlay到背景视频上。


但是出现了问题,帧率和我设置的帧率对不上,这是为什么呢?

@孙悟空  大师兄,可以请教一下帧率不对的问题吗?

当时尝试的时候,用单独一张图片,使用concat命令拼接视频的时候,只能保留最近两个视频很奇怪。 因此就loop了一下,变成一个视频,然后concat一下,在setpts=0.5*PTS 就相当于*2 又 /2。  在25帧的时候正常, 但是变道15帧又出问题了。 求大师兄指导!

以下是实例:

./ffmpeg -y -i another_comp_org_000%1d.png -i head.png -vcodec libx264 -filter_complex `cat template.txt` final.mp4

cat template.txt

nullsrc=size=540*960[f1_0_1];[1:v]scale=w=iw*0.787:h=ih*0.787,loop=loop=1:size=1,fps=30[f1_0_2];[f1_0_2]colorchannelmixer=aa=1.00[f1_0_3];[f1_0_3]rotate=a=PI/180*0:c=0x00000000[f1_0_4];[f1_0_1][f1_0_4]overlay=x=113:y=4:shortest=1[f1_0_0];nullsrc=size=540*960[f1_1_1];[1:v]scale=w=iw*0.787:h=ih*0.787,loop=loop=1:size=1,fps=30[f1_1_2];[f1_1_2]colorchannelmixer=aa=1.00[f1_1_3];[f1_1_3]rotate=a=PI/180*0:c=0x00000000[f1_1_4];[f1_1_1][f1_1_4]overlay=x=113:y=4:shortest=1[f1_1_0];[f1_0_0][f1_1_0]concat=n=2,setpts=0.5*PTS[v1_1];[0:v]fps=15[v0_0];[v0_0][v1_1]overlay,fps=15




回复

使用道具 举报

发表于 2019-11-4 15:14:43 | 显示全部楼层
看上去调整比较混乱啊,是不是可以先设置帧率,然后设置帧对齐,然后overlay处理?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-5 14:24:46 | 显示全部楼层
孙悟空 发表于 2019-11-4 15:14
看上去调整比较混乱啊,是不是可以先设置帧率,然后设置帧对齐,然后overlay处理? ...

帧对齐是什么参数? 没有设置过呢。
原理是: 输入一张图片, 把这张图片依次经过 缩放->透明度->旋转->overlay到nullsrc上,得到某一帧的这个图像的变换后的帧。然后把所有的帧通过concat指令合成到一起。最后在使用overlay指令把这些合成到一起的帧,与背景融合在一起,生成最终的视频。

在生成结果中,出现了一些 drop 帧。  视频背景的输入是12秒一共有180张图片。 我使用fps设置了15帧,但是最后生成的却是6秒多(15帧), 看起来像是 输入成了25帧(6s多),然后drop掉了多出来的帧。

应该如何处理呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-11-5 14:43:29 | 显示全部楼层
孙悟空 发表于 2019-11-4 15:14
看上去调整比较混乱啊,是不是可以先设置帧率,然后设置帧对齐,然后overlay处理? ...

另外,可能是由于把一张图片 经过缩放->透明度->旋转->overlay到nullsrc上  处理后,在使用concat 过滤器合并到一起, 只剩下第一张和最后一张图片了, 这个也不明白为什么。 我只是loop=1:size=1 循环了一下,在concat一下,最后在setpts=0.5*PTS 就好了(只在fps=25有效)。  如何在不同fps下 能把这些图片合并到一起,也尝试了很多办法没有用呢。
回复 支持 反对

使用道具 举报

发表于 2019-11-5 21:36:21 | 显示全部楼层
huicpc0215 发表于 2019-11-5 14:43
另外,可能是由于把一张图片 经过缩放->透明度->旋转->overlay到nullsrc上  处理后,在使用concat 过滤器 ...

setpts是设置时间戳用的,拼接两组视频用这个比较合适
回复 支持 反对

使用道具 举报

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

本版积分规则

手机版|Archiver|ChinaFFmpeg

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

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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