图片转mp4格式,帧数码率有问题,求大佬指点
ffmpeg吧
全部回复
仅看楼主
level 1
贴吧用户_515434M
楼主
转换出的视频一闪而过,设置帧数为30,查看输出视频帧数异常,求各位大佬指点
2025年03月25日 08点03分
1
level 7
贴吧用户_0E8MtUX
time_base.num=30000
time_base.den=1001
framerate.num=30
framerate.den=1
gop_size=3000;
2025年03月25日 10点03分
2
贴吧用户_515434M
仍然是一闪而过,大佬能不能再看看
2025年03月26日 00点03分
贴吧用户_515434M
time_base.num=30000 time_base.den=1001 framerate.num=30 framerate.den=1 gop_size=3000; 这几个参数来回都调过,并不起作用
2025年03月26日 02点03分
贴吧用户_0E8MtUX
@贴吧用户_515434M
发送帧进行编码外面写个循环,一秒钟视频循环发送30次
2025年03月26日 05点03分
贴吧用户_515434M
@贴吧用户_0E8MtUX
for(int i = 0; i<874; i++){ QImage mImg(tr("pic/%1.jpg").arg(i)); mWorker->encoder.encodeFrame(&mImg); QThread::msleep(1000/30); }
2025年03月26日 07点03分
level 1
贴吧用户_515434M
楼主
2025年03月26日 07点03分
5
贴吧用户_0E8MtUX
QImage应该是编码一帧就存盘。
2025年03月26日 07点03分
贴吧用户_0E8MtUX
我没调试过调试过ffmpeg源码,一般用CLI调用就能实现我的需要的功能。逻辑上大概是这样的 pts是帧时间戳。for(int i=0;i<30;i++){frame->pts+=1.0f/30.0avcodec_send_frame(codecCtx, frame)}
2025年03月26日 07点03分
贴吧用户_0E8MtUX
如果图片是序列。接收编码后的包 AVPacket 放到循环外面,内存缓冲调大一点,缓冲几百帧存一次盘
2025年03月26日 07点03分
贴吧用户_515434M
@贴吧用户_0E8MtUX
内存缓冲,pkt指针定义调到外边都试了,不起作用,查看帧参数,发现最后有报错[out#0/null @ 00000224e8b60280] video:107KiB audio:0KiB subtitle:0KiB other streams:0KiB global headers:0KiB muxing overhead: unknown
2025年03月26日 09点03分
level 7
贴吧用户_0E8MtUX
https:\\blog。csdn。net\weixin_42877471\article\details\140142540
我搜了下别人的代码片,把帧送入编码器的函数
for(int i=0;i<874;i++)
encode_receive_packet_internal(前面准备好的帧)
2025年03月26日 09点03分
6
level 7
贴吧用户_0E8MtUX
用命令行调用ffmpeg.exe转图片就能实现相同结果。
如果硬要学习源码死磕。加断点每行单步调试,看每个变量里存的什么数据,走一遍就学会了
2025年03月26日 09点03分
7
level 1
贴吧用户_515434M
楼主
我明天看看,实在不行就调命令行
2025年03月26日 14点03分
8
level 1
贴吧用户_515434M
楼主
流的时间基,没办法设置大于1/16438,设置为1/30,会在写入头的时候被修改为1/16438,1/60000就不会被改动,设置为1/90000,pts根据3000递增,播放时长就差不多了
2025年03月27日 06点03分
9
贴吧用户_0E8MtUX
好像x265编码器最大支持帧率240帧/秒,直接把yuv帧传递x265可以输入24000/1001,basetime、pts 都是基于秒为单位
2025年03月29日 10点03分
1