一、场景

需要将PPT中的gif图像转换为视频以便控制播放。

如果需要处理单个gif图像,可以使用以下命令:

ffmpeg -i input.gif -pix_fmt yuv420p output.wmv

其中-pix_fmt yuv420p指定了输出视频的像素格式为:yuv420pyuv420p是最常用的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"