Gif图像转为视频
一、场景
需要将PPT中的gif图像转换为视频以便控制播放。
如果需要处理单个gif图像,可以使用以下命令:
ffmpeg -i input.gif -pix_fmt yuv420p output.wmv
其中-pix_fmt yuv420p指定了输出视频的像素格式为:yuv420p;yuv420p是最常用的8-bit 4:2:0采样格式,兼容性最好。
二、实现
1、提取GIF图像
-
将PPT复制一份并将后缀改为
xxx.zip -
在解压后的
ppt\media目录中找出所有的gif文件

2、编写批处理脚本
@echo off
setlocal enabledelayedexpansion
set INPUT_DIR=./input
set OUTPUT_DIR=./out
if "%INPUT_DIR%"=="" set INPUT_DIR=.
if "%OUTPUT_DIR%"=="" set OUTPUT_DIR=%INPUT_DIR%
for %%i in ("%INPUT_DIR%\*.gif") do (
ffmpeg -i "%%i" -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -pix_fmt yuv420p -b:v 5000k -maxrate 5000k -bufsize 1000k -c:v wmv2 "%OUTPUT_DIR%\%%~ni.wmv"
echo 转换完成: %%i → %OUTPUT_DIR%\%%~ni.wmv
)
运行此脚本,即可将input目录下的gif文件全部转换为wmv视频文件。
三、问题及解决办法
1、在PPT中插入视频时提示无法插入

处理方式:
将输出文件改为wmv格式,命令由:
ffmpeg -i input.gif -pix_fmt yuv420p output.mp4
改为
ffmpeg -i input.gif -pix_fmt yuv420p output.wmv
2、部分转换时提示缓冲区下溢
部分gif文件转换时提示:
[wmv2 @ 00000000005288c0] rc buffer underflow
[wmv2 @ 00000000005288c0] max bitrate possibly too small or try trellis with large lmax or increase qmax

处理方式:
调整命令中的参数,命令由:
ffmpeg -i "%%i" -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -pix_fmt yuv420p -b:v 5000k -maxrate 5000k -bufsize 1000k -c:v wmv2 "%OUTPUT_DIR%\%%~ni.wmv"
调整为(调整目标码率-b:v、最大码率maxrate和缓冲区bufsize大小):
ffmpeg -i "%%i" -vf "scale=trunc(iw/2)*2:trunc(ih/2)*2" -pix_fmt yuv420p -b:v 8000k -maxrate 12000k -bufsize 16000k -c:v wmv2 "%OUTPUT_DIR%\%%~ni.wmv"