C# 中 WaitForExit 卡死,当 Process.Start 调用 FFMPEG 解码 高清视频 时出现

目录

目的

问题

视频属性

FFMPEG 版本

不同电脑配置

不同方式比对

发现规律

正确的条件 


目的

这篇文章的意义,不在于解决问题本身,因为这次问题发生在一种错误的使用条件之下,但是在这个过程中发现了一些有趣的现象,有一些感悟,进行记录。


插入几句话:运行在客户端的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 测试手动模式 运行模式 两种 。

详细测试数据汇总到了如下的表格图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值