【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 表示如果目标文件已存在,会被覆盖。
相关推荐
电脑修复X5 小时前
如何有效修复ffmpeg.dll错误:一站式解决方案指南
ffmpeg·dll文件·dll·dll修复·dll丢失
飞飞-躺着更舒服6 小时前
【FFmpeg 教程】给视频加字幕
ffmpeg·音视频
熬了夜的程序员17 小时前
在 Go 中利用 ffmpeg 进行视频和音频处理
golang·ffmpeg·音视频
ZVAyIVqt0UFji1 天前
如何使用whisper+ollama+ffmpeg为视频添加中文字幕
ffmpeg·whisper·音视频
YRr YRr1 天前
解决 OpenCV 与 FFmpeg 版本不兼容导致的编译错误
人工智能·opencv·ffmpeg
cuijiecheng20181 天前
音视频入门基础:MPEG2-TS专题(19)——FFmpeg源码中,解析TS流中的PES流的实现
ffmpeg·音视频
ts小陈2 天前
多音轨视频使用FFmpeg删除不要音轨方法
ffmpeg·音视频
hunandede3 天前
FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.3,RTCP协议, RTCP协议概述,RTCP协议详情
ffmpeg·音视频
hunandede3 天前
FFmpeg 4.3 音视频-多路H265监控录放C++开发二十一.2,RTP协议-RTP协议概述,协议详情
c++·ffmpeg·音视频