1、需求背景
因为最近接到项目上的一个需求,就是在MP4(H264编码)文件里叠加指定字符,于是就想到了使用FFMPEG来解决。
2、遇到的问题
从理论上完全是行得通的(FFMPEG 4.x):
- 对MP4文件解码 ;
- 将视频帧推入滤镜处理,获取输出视频帧;
- 编码写文件。
问题: - XP下不支持 FFMPEG 4.x,系统库报错,“无法定位程序输入点XXX于动态链接库KERNEL32.dll”,找了KERNEL32.dll并且用Depends看了能找到缺少的函数,拷贝到程序运行目录下也不能解决,拷贝到系统System32下也不能解决。最关键的是现在下载FFMPEG Shared的地方居然关掉了!!!难道要自己下源码编译?伸手党可不做这么麻烦的事情。
3、解决方法
- 找低版本的FFMPEG代替。找了一天才找到了一个FFMPEG 3.X版本的, 放到XP里面运行FFMPEG.exe,还是报错,发现可能是XP下的一些C++函数不适用,比如——vsnprintf_s,…,下载一个叫fixff.cmd的处理命令,放到DLL的目录下双击运行,发现其实就是修改DLL里面这些C++接口兼容到XP。
- 接下来又是运行FFMPEG.exe,还是报错,仍然有不兼容的C接口,按道理不应该啊,就怀疑是FFMPEG.exe本身使用了这些不兼容XP的C接口,fixff.cmd只修改了DLL的并没有动FFMPEG.exe,然后就自己做了一个DEMO,再运行,果然可以,至此已经十分接近成功了。
- 但是打开输入输出文件的时候,总是返回负数,结果发现3版本还是需要初始化操作(4.x已经不需要初始化了)。 然后在使用avfiter里面的avfilter_graph_create_filter时候,报错了,看了参数信息都没错,就像到上面fixff.cmd修改了DLL里面的一些C接口,可能是这个原因,就只把avfiter.dll这个动态库拷贝回来,完美解决。不容易,研究了一天。
下载链接
链接: https://download.csdn.net/download/qq_27731413/13189174.