968 字
5 分钟
适应 Gemini 视频限制:用 FFmpeg 压成 1fps

问题 API 的视频限制让人头疼#

Google 的 Gemini API 对视频上传有几条硬性规定:

  • 文件大小不能超过 100MB
  • 视频时长不能超过 1 小时
  • 不能上传有版权的内容

前两条是技术限制,第三条是法律红线。如果你手上有个 200MB 的录屏或者 2 小时的会议记录,想让 Gemini 帮你分析,直接上传肯定过不去。

IMPORTANT

这些限制适用于 Gemini API 的文件上传功能。如果你用的是 Gemini 的其他接口或者 Google AI Studio,限制可能不一样。

有个简单粗暴的办法:把视频压小。

解决方案 降帧率#

FFmpeg 是个命令行工具,专门处理音视频。它能把视频的帧率降到 1fps(每秒 1 帧),把原本流畅的视频变成”幻灯片”模式。

最简单的命令#

Terminal window
ffmpeg -i input.mp4 -r 1 output.mp4

-r 1 就是把帧率设成 1fps。视频内容还在,只是动作变成了一帧一帧的静态画面。

批量处理多个视频#

如果你有一堆视频要处理,可以用 shell 循环:

Terminal window
for f in *.mp4; do
ffmpeg -i "$f" -r 1 "1fps_$f"
done

这会把当前目录下所有 .mp4 文件都转成 1fps 版本,文件名前面加上 1fps_

在 macOS 上用硬件加速(如果你有 M 系列芯片)#

macOS 的 M1/M2/M3/M4 芯片有硬件编码器,能让 FFmpeg 跑得更快。但你得用 Apple 的 VideoToolbox,不能用常见的 libx264

第一次尝试:复制了网上的命令结果报错#

我一开始试了这个:

Terminal window
for f in *.mp4; do
ffmpeg -y -i "$f" \
-r 1 \
-an \
-preset medium -crf 28 \
-c:v h264_videotoolbox \
"${f%.mp4}-1fps.mp4"
done

结果 FFmpeg 直接炸了:

Error setting bitrate property: -12900
Error while opening encoder - maybe incorrect parameters

问题在哪#

VideoToolbox 不认 -preset-crf。这俩是 libx264 的参数,硬件编码器根本不支持。

VideoToolbox 的规则很简单:

  • 不支持 CRF(恒定质量因子)
  • 不支持 x264 的 preset
  • 只能用码率(-b:v)或者质量模式(-q:v)

正确的命令(用码率控制)#

Terminal window
for f in *.mp4; do
ffmpeg -y -i "$f" \
-r 1 \
-an \
-c:v h264_videotoolbox \
-b:v 2M \
"${f%.mp4}-1fps.mp4"
done

-b:v 2M 是设定码率为 2Mbps。你可以根据需要调高或调低。

或者用质量模式#

Terminal window
for f in *.mp4; do
ffmpeg -y -i "$f" \
-r 1 \
-an \
-c:v h264_videotoolbox \
-q:v 50 \
"${f%.mp4}-1fps.mp4"
done

-q:v 50 是质量参数,范围大概是 30-60,数字越小质量越好。

如果你还想保留音频#

上面的命令都用了 -an,意思是”删掉音频”。如果你想保留音频,去掉 -an 然后加上 AAC 编码:

Terminal window
for f in *.mp4; do
ffmpeg -y -i "$f" \
-r 1 \
-c:v h264_videotoolbox -q:v 50 \
-c:a aac -b:a 128k \
"${f%.mp4}-1fps.mp4"
done

这样视频 1fps,音频正常。

NOTE

如果原视频本来就没音频,-c:a aac 不会报错,FFmpeg 会自动跳过。

实际效果#

假设你有个 200MB 的录屏,30fps,时长 10 分钟。降到 1fps 之后:

  • 文件大小可能降到 20-30MB(取决于码率)
  • 时长还是 10 分钟
  • 画面变成幻灯片,但信息还在

这样就能上传到 Gemini API 了。

注意事项#

  1. 版权问题 FFmpeg 管不了。如果视频内容本身有版权,压缩后还是不能上传。
  2. 1fps 会损失动作信息。如果你的视频需要分析动作(比如体育比赛、舞蹈教学),1fps 肯定不够用。
  3. 音频不受影响。降帧率只影响画面,音频该多长还是多长。

总结#

Gemini API 的视频限制确实麻烦,但用 FFmpeg 降帧率是个简单有效的办法。macOS 用户可以用 VideoToolbox 加速,但要注意参数兼容性。

如果你只是想让 Gemini 看看视频内容,不需要分析动作,1fps 够用了。


Works Cited#

Google. “Gemini API File Upload Documentation.” Google AI for Developers, Accessed 15 Jan. 2025. https://ai.google.dev/gemini-api/docs/vision

FFmpeg. “FFmpeg Documentation.” FFmpeg Official Website, Accessed 15 Jan. 2025. https://ffmpeg.org/documentation.html

适应 Gemini 视频限制:用 FFmpeg 压成 1fps
https://blog.lishuyu.top/posts/handlinggemini100mbvideosizelimit/
作者
猫猫魔女
发布于
2025-01-15
许可协议
CC BY-NC-SA 4.0