【FFmpeg 教程 一】截图

本章使用 ffmpeg 实现观影中经常会用到的功能,截图。

以下给出两种方式。

复制代码
课程需具备的基础能力:Python 

1. 使用 subprocess 调用 FFmpeg 命令

python 复制代码
import subprocess
def extract_frame(video_path, output_image_path, timestamp="00:00:05")
	"""
	从视频中截取指定时间点的帧作为图片
	:param video_path: 输入视频文件路径
	:param output_image_path: 输出图片文件路径
	:param timestamp: 截取时间点,格式为 'HH:MM:SS', 默认为 00:00:05
	"""
	try:
		# 调用 ffmpeg 命令
		command = [
			'ffmpeg',
			"-i", video_path,		# 输入视频文件
			"-ss", timestamp,		# 截取的时间点
			"-vframes", "1",		# 截取一帧
			output_image_path,		# 输出图片文件路径
			"-y"
		]
		suprocess.run(command, check=True)
		print(f"成功截取帧: {output_image_path}")
	except subprocess.CalledProcessError as e:
		print(f"错误:{e}")

// 使用
video_file = "example.mp4"
output_image = "screenshot.jpg"
timestamp = "00:01:00" # 截取 1 分钟时的帧
extract_frame(video_file, output_image, timestamp)

2. 使用 ffmpeg-python

示例代码:

python 复制代码
import ffmpeg

def extract_frame_ffmpeg(video_path, output_image_path, timestamp=5.0):
    """
    使用 ffmpeg-python 从视频中截取指定时间点的帧并保存为图片。
    
    :param video_path: 输入视频文件路径
    :param output_image_path: 输出图片文件路径
    :param timestamp: 截取的时间点,单位秒
    """
    try:
        # 使用 ffmpeg-python 提取帧
        ffmpeg.input(video_path, ss=timestamp).output(output_image_path, vframes=1).run(overwrite_output=True)
        print(f"成功截取帧并保存到 {output_image_path}")
    except ffmpeg.Error as e:
        print(f"错误: {e.stderr.decode()}")

# 使用示例
video_file = "example.mp4"
output_image = "screenshot2.jpg"
timestamp = 60.0  # 截取 60 秒时的帧
extract_frame_ffmpeg(video_file, output_image, timestamp)

解释

  1. ffmpeg.input(video_path, ss=timestamp)

    • input() 函数用来指定输入视频路径。
    • ss 参数指定截取的时间戳,可以是秒数(例如 60.0)或者 HH:MM:SS 格式。
  2. output(output_image_path, vframes=1)

    • output() 用于指定输出文件路径。
    • vframes=1 表示我们只提取视频中的一帧。
  3. run(overwrite_output=True)

    • run() 执行 FFmpeg 命令,overwrite_output=True 表示如果目标文件已存在,会被覆盖。
相关推荐
用户96715113916725 小时前
Rust 如何轻松实现 RTMP 流媒体推送?深入解析直播推流场景与解决方案
rust·ffmpeg
小小码农Come on5 小时前
ffmpeg命令整理
ffmpeg
暮云星影6 小时前
三、FFmpeg学习笔记
linux·ffmpeg
都非拉得1 天前
FFmpeg命令详解
ffmpeg
cuijiecheng20181 天前
音视频入门基础:MPEG2-TS专题(26)——通过FFmpeg命令使用RTP发送TS流
ffmpeg·音视频
Yeauty1 天前
Rust 中的高效视频处理:利用硬件加速应对高分辨率视频
开发语言·rust·ffmpeg·音视频·音频·视频
winfredzhang1 天前
Python视频标签工具详解:基于wxPython和FFmpeg的实现
python·ffmpeg·音视频·视频标签
Yeauty3 天前
从0到1:Rust 如何用 FFmpeg 和 OpenGL 打造硬核视频特效
rust·ffmpeg·音视频
witton3 天前
MinGW下编译ffmpeg源码时生成compile_commands.json
ffmpeg·json·makefile·mingw·调试·compile_command·remake