当前位置: 首页 > news >正文

【FFmpeg 教程 一】截图

本章使用 ffmpeg 实现观影中经常会用到的功能,截图。
以下给出两种方式。

课程需具备的基础能力:Python 

1. 使用 subprocess 调用 FFmpeg 命令

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

示例代码:

import ffmpegdef 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 表示如果目标文件已存在,会被覆盖。
http://www.lryc.cn/news/506695.html

相关文章:

  • 北邮,成电计算机考研怎么选?
  • 深入了解京东API接口:如何高效获取商品详情与SKU信息
  • C++常见内存泄漏案例分析以及解决方案
  • [LeetCode-Python版]206. 反转链表(迭代+递归两种解法)
  • 70 mysql 中事务的隔离级别
  • C语言二叉树
  • 智能工厂的设计软件 三种处理单元(NPU/GPU/CPU)及其在深度学习框架中的作用 之1
  • iOS swift开发系列--如何给swiftui内容视图添加背景图片显示
  • jmeter后端监视器
  • 服务器数据恢复—RAIDZ离线硬盘数超过热备盘数导致阵列崩溃的数据恢复案例
  • 面试题整理4----lvs,nginx,haproxy区别和使用场景
  • iOS - 超好用的隐私清单修复脚本(持续更新)
  • html <a>设置发送邮件链接、打电话链接 <a href=“mailto:></a> <a href=“tel:></a>
  • clickhouse-副本和分片
  • 2009 ~ 2019 年 408【计算机网络】大题解析
  • vue2使用render,js中写html
  • 如何有效划分服务器磁盘空间?具体的步骤和流程
  • labelme标签批量转换数据集json_to_dataset
  • Fisco-Bcos-java-SDK 利用java与fisco-Bcos区块链上的智能合约交互(以HelloWorld为例)
  • OpenHarmony-3.HDF Display子系统(6)
  • Nginx中Server块配置的详细解析
  • php学习资料分享
  • EE308FZ_Sixth Assignment_Beta Sprint_Sprint Essay 3
  • Eureka学习笔记-服务端
  • 无限次使用 cursor pro
  • 网站运维之整站同步
  • 【机器人】Graspness 端到端 抓取点估计 | 论文解读
  • 力扣2300.咒语和药水的成功对数(二分法)
  • WEB开发: 全栈工程师起步 - Python Flask +SQLite的管理系统实现
  • 云原生周刊:Kubernetes v1.32 正式发布