之前本人写过ffmpeg 64位静态库编译,没计划再写关于ffmpeg动态库的编译,今天用ffmpeg命令行录制桌面视频,指定h264编码格式,结果失败,需要将x264库编译进ffmpeg。
先编译x264,本人直接下载的是master分支的x264代码,官网地址如下:
https://www.videolan.org/developers/x264.html
编译前进行配置,用的是如下命令
./configure --host=x86_64-w64-mingw32 --enable-static --disable-asm --disable-opencl --disable-cli -–prefix=/usr/local/x264
注意,这个–host=x86_64-w64-mingw32是一定要带的
然后make和make install。
接着编译ffmpeg,首先是配置,如下所示:
./configure --arch=x86_64 --disable-debug --enable-shared --disable-static --enable-gpl --enable-libx264 --extra-cflags=-I/usr/local/x264/include --extra-ldflags="-L/usr/local/x264/lib -static" --pkgconfigdir=/usr/local/x264/lib/pkgconfig --prefix=/home/ffmpeg_x264_dll
接着make和make install,编译完成后,用ffmpeg进行录屏测试,在命令行(cmd)中执行如下语句
ffmpeg -f gdigrab -i desktop -vcodec libx264 -f mp4 h264out.mp4
录制一段时间后,按q键停止录制,注意,此处不要用ctrl+c停止录制,否则最终生成的视频文件无法播放。
此时用qq影音播放,如下显示:
很明显存在问题,接着用迅雷影音播放,效果如下
很明显,都存在着问题,接着将视频拖入到chrome浏览器播放,如下所示:
chrome浏览器播放正常。
下面排查下问题原因,在命令行(cmd)中输入录屏命令(上面有提到)后,可以观察下命令行。
可以看出图片的格式yuv444p格式,一般而言,图片的存储格式多是yuv420p格式。
应该是qq影音和迅雷影音对yuv444p格式的视频处理不够好导致,ffmpeg在录屏时,可以指定图片存储格式,此次指定为yuv420p,命令如下:
ffmpeg -f gdigrab -i desktop -pix_fmt yuv420p -vcodec libx264 -f mp4 h264out.mp4
这次生成的视频文件,用qq影音和迅雷影音播放时,是ok的,当然,用chrome浏览器播放时,也正常。