跳至内容

视频作为输入

虽然大多数大型语言模型(LLM)本身不支持视频处理,但可以通过渲染帧并将其作为图像添加到提示中来集成到脚本中。这个过程可能很繁琐,而GenAIScript提供了高效的辅助工具来简化这一流程。

ffmpeg配置

视频渲染和分析功能依赖于 ffmpegffprobe

在Linux系统上,您可以尝试

终端窗口
sudo apt-get update && sudo apt-get install ffmpeg

请确保这些工具已本地安装并在您的PATH环境变量中可用, 或者配置FFMPEG_PATH / FFPROBE_PATH环境变量指向ffmpeg/ffprobe可执行文件。

提取帧

如上所述,多模态大语言模型通常支持将图像作为一系列帧(或屏幕截图)来处理。

ffmpeg.extractFrames 会从视频文件中提取帧画面,并将其作为文件路径数组返回。您可以直接将结果用于 defImages

  • 默认情况下,提取关键帧(内部帧)
const frames = await ffmpeg.extractFrames("path_to_video")
defImages(frames)
  • 使用count指定帧数
const frames = await ffmpeg.extractFrames("...", { count: 10 })
  • 使用timestamps(或times)以秒数或视频时长的百分比来指定时间戳
const frames = await ffmpeg.extractFrames("...", {
timestamps: ["00:00", "05:00"],
})
  • 指定由transcribe函数计算的转录文本。GenAIScript将在每个片段的开始处提取一帧。
const transcript = await transcribe("...")
const frames = await ffmpeg.extractFrames("...", { transcript })
  • 指定场景阈值(介于0和1之间)
const transcript = await transcribe("...", { sceneThreshold: 0.3 })

提取音频

ffmpeg.extractAudio 会从视频文件中提取音频并保存为 .wav 文件。

const audio = await ffmpeg.extractAudio("path_to_video")

使用transcribe时,视频会自动转换为音频。

提取片段

你可以使用ffmpeg.extractClip从视频文件中提取片段。

const clip = await ffmpeg.extractClip("path_to_video", {
start: "00:00:10",
duration: 5,
})

视频探测

您可以使用ffmpeg.probe从视频文件中提取元数据。

const info = await ffmpeg.probe("path_to_video")
const { duration } = info.streams[0]
console.log(`video duration: ${duration} seconds`)

自定义ffmpeg选项

您可以通过传递outputOptions进一步自定义ffmpeg配置。

const audio = await ffmpeg.extractAudio("path_to_video", {
outputOptions: "-b:a 16k",
})

或者直接与ffmpeg命令构建器交互 (这是原生的fluent-ffmpeg命令构建器)。 请注意,在这种情况下,您还应提供一个缓存"hash"以避免重新渲染。

const custom = await ffmpeg.run(
"src/audio/helloworld.mp4",
(cmd) => {
cmd.noAudio()
cmd.keepDisplayAspectRatio()
cmd.autopad()
cmd.size(`200x200`)
return "out.mp4"
},
{ cache: "kar-200x200" }
)

CLI

cli 支持多种命令来运行视频转换。

终端窗口
genaiscript video probe myvid.mp4