目录
目的
这篇文章的意义,不在于解决问题本身,因为这次问题发生在一种错误的使用条件之下,但是在这个过程中发现了一些有趣的现象,有一些感悟,进行记录。
插入几句话:运行在客户端的CS架构的软件,比WBE网页应用,有一个很大的不同点:浏览器本身解决了对很多客户端的兼容性问题,尽管网页开发时仍然需要根据浏览器类型的不同来进行兼容区分处理,但是针对的浏览器类型的数量是有限的,数量非常少;但是CS架构类型的客户端软件(窗口程序)可能会运行在各种不同的操作系统上,或者操作系统相同但是系统的版本号不同,或者系统版本号相同但是硬件配置不同,因此相同的代码运行的功能,都可能会有不同的表现。软件开发的工作,不仅仅在于编码完成,而在于能够在五花八门的客户机上以良好的兼容性稳定运行,所以会有很多的时间是在处理 由于设备不同 带来的麻烦问题。
问题
我们经常会有需求使用 ffmpeg 来对 视频 文件进行解码 ,正常情况下 把非透明通道的 mp4 视频解码为 JPG 图片序列帧是非常高效的 ,但是 此处对 mp4 视频进行了 png 解码 ,导致 出现了很多问题 ,出现了缓慢、卡死,并且在不同电脑有不同表现, 过程中有一些有趣的发现。
视频属性
在解码的视频是佳能相机录制的原生高清MP4视频, 视频属性信息如下:
大小:40.0 MB (41,965,096 字节)
总帧数:326
时长:00:00:10
帧宽度:1920
帧高度:1080
数据速率:30167kbps
总比特率:30417kbps
帧速率:29.97 帧/秒
比特率:250kbps
频道:2(立体声)
音频采样频率:48.000kHz
FFMPEG 版本
使用的 ffmpeg.exe (83.5MB), 版本信息如下:
FFMPEG 版本信息:
ffmpeg version 7.1-essentials_build-www.gyan.dev Copyright (c) 2000-2024 the FFmpeg developers
built with gcc 14.2.0 (Rev1, Built by MSYS2 project)
configuration: --enable-gpl --enable-version3 --enable-static --disable-w32threads --disable-autodetect --enable-fontconfig --enable-iconv --enable-gnutls --enable-libxml2 --enable-gmp --enable-bzlib --enable-lzma --enable-zlib --enable-libsrt --enable-libssh --enable-libzmq --enable-avisynth --enable-sdl2 --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxvid --enable-libaom --enable-libopenjpeg --enable-libvpx --enable-mediafoundation --enable-libass --enable-libfreetype --enable-libfribidi --enable-libharfbuzz --enable-libvidstab --enable-libvmaf --enable-libzimg --enable-amf --enable-cuda-llvm --enable-cuvid --enable-dxva2 --enable-d3d11va --enable-d3d12va --enable-ffnvcodec --enable-libvpl --enable-nvdec --enable-nvenc --enable-vaapi --enable-libgme --enable-libopenmpt --enable-libopencore-amrwb --enable-libmp3lame --enable-libtheora --enable-libvo-amrwbenc --enable-libgsm --enable-libopencore-amrnb --enable-libopus --enable-libspeex --enable-libvorbis --enable-librubberband
libavutil 59. 39.100 / 59. 39.100
libavcodec 61. 19.100 / 61. 19.100
libavformat 61. 7.100 / 61. 7.100
libavdevice 61. 3.100 / 61. 3.100
libavfilter 10. 4.100 / 10. 4.100
libswscale 8. 3.100 / 8. 3.100
libswresample 5. 3.100 / 5. 3.100
libpostproc 58. 3.100 / 58. 3.100
不同电脑配置
在2台不同的电脑上进行测试,现在把这2台电脑分别定义为 “电脑A” , "电脑B",后面将用这2个名称代指。
电脑A:
处理器 Intel(R) Core(TM) i9-14900HX 2.20 GHz
机带 RAM 32.0 GB (31.7 GB 可用)
系统类型 64 位操作系统, 基于 x64 的处理器
笔和触控 没有可用于此显示器的笔或触控输入版本 Windows 11 家庭中文版
版本号 24H2
操作系统版本 26100.3775
体验 Windows 功能体验包 1000.26100.66.0
电脑B:
处理器 Intel(R) Core(TM) i5-8350U CPU @ 1.70GHz 1.90 GHz
机带 RAM 16.0 GB (15.9 GB 可用)
系统类型 64 位操作系统, 基于 x64 的处理器
笔和触控 为 10 触摸点提供笔和触控支持版本 Windows 10 专业版
版本号 22H2
操作系统内部版本 19045.3324
体验 Windows Feature Experience Pack 1000.19041.1000.0
不同方式比对
将要执行的解码任务命令是:
-i "D:\1.mp4" -vf \"format=rgba\" -f image2 -pix_fmt rgba "D:\1\frame_%05d.png"
分别从 是否出现黑色窗口 、解码时长 、内存占用 这3个方面,来在 电脑A 测试手动模式、调试模式、和运行模式 三种, 在 电脑B 测试手动模式 和 运行模式 两种 。
详细测试数据汇总到了如下的表格图:

最低0.47元/天 解锁文章
4977

被折叠的 条评论
为什么被折叠?



