基于Linux的ffmpeg python的关键帧抽取

 更新时间:2025年06月17日 11:07:28   作者:lambdarw  
本文主要介绍了基于Linux的ffmpeg python的关键帧抽取,实现以按帧或时间间隔抽取关键帧,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1.FFmpeg的环境配置

首先强调,ffmpeg-python包与ffmpeg包不一样。

1) 创建一个虚拟环境env

conda create -n yourenv python=3.x
conda activate yourenv

2) ffmpeg-python包的安装

pip install ffmpeg-python

3) 安装系统级别的 FFmpeg 工具

虽然安装了 ffmpeg-python 包(也就是 Python 的 wrapper),但是系统里没有安装实际的 FFmpeg 可执行程序,会导致程序无法执行 ffmpeg 工具。

🧪在系统中安装 FFmpeg 二进制文件

cd ./your_env_path
conda install -c conda-forge ffmpeg

🔁安装完成后,验证 FFmpeg 是否可用

ffmpeg -version

4) FFmpeg 添加到系统变量

首先,在终端确认 FFmpeg 安装位置

which ffmpeg

你应该会看到类似的输出结果:

/usr/bin/ffmpeg
# 如果是在 Conda 环境下安装的,则输出:
/your_env_path/envs/yourenv/bin/ffmpeg  
# 例如:/home/zrw/anaconda3/envs/condetect/bin/ffmpeg

第二步,临时验证 PATH 设置在 Python 脚本中 运行前添加如下代码,确保 FFmpeg 所在路径加入环境变量:

import os

# 添加 FFmpeg 路径(改成你实际的 ffmpeg 路径)
os.environ["PATH"] += os.pathsep + "/your_env_path/envs/yourenv/bin/ffmpeg"
# 例如:os.environ["PATH"] += os.pathsep + "/home/zrw/anaconda3/envs/condetect/bin/ffmpeg"

放在程序中调用 ffmpeg之前就可以了。

✅ 第三步(可选):永久添加到 PATH

export PATH=$PATH:/yourenv_path/envs/yourenv/bin

然后运行:

source ~/.bashrc

5) 验证安装是否成功

建立一个python文件,输入以下代码,正确输出即可。

import ffmpeg
print(ffmpeg.__file__)  # 应该输出路径,比如 .../site-packages/ffmpeg/__init__.py
print(dir(ffmpeg))      # 应该能看到 ['input', 'output', 'run', ...]

打印结果如下:

在这里插入图片描述

2.主程序

🚀引入环境

import os
import ffmpeg
import numpy as np
from PIL import Image

# 添加 FFmpeg 路径(改成你实际的 ffmpeg 路径)
os.environ["PATH"] += os.pathsep + "/home/zrw/anaconda3/envs/condetect/bin"

按固定帧数间隔抽帧

def extract_keyframes(video_path, output_dir, frame_interval=120):
os.makedirs(output_dir, exist_ok=True)
 (
      ffmpeg.input(video_path)
      .filter("select", f"not(mod(n,{frame_interval}))")  # 每N帧取1帧
      .output(os.path.join(output_dir, "frame_%04d.png"))
      .run(quiet=True)
)
 return sorted([f for f in os.listdir(output_dir) if f.endswith(".png")])

按固定时间间隔(秒)抽帧

def extract_keyframes(video_path, output_dir, interval_seconds=8):
    os.makedirs(output_dir, exist_ok=True)
    (
        ffmpeg.input(video_path)
        .filter("fps", fps=1/interval_seconds)  # 如 interval_seconds=8 表示每8秒1帧
        .output(os.path.join(output_dir, "frame_%04d.png"))
        .run(quiet=True)
    )
    return sorted([f for f in os.listdir(output_dir) if f.endswith(".png")])

到此这篇关于基于Linux的ffmpeg python的关键帧抽取的文章就介绍到这了,更多相关python ffmpeg 关键帧抽取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:

相关文章

  • pytorch 实现变分自动编码器的操作

    pytorch 实现变分自动编码器的操作

    这篇文章主要介绍了pytorch 实现变分自动编码器的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 5个Python自动化运维脚本分享

    5个Python自动化运维脚本分享

    Python 是一种流行的编程语言,具有丰富的第三方库和强大的自动化能力,适用于许多不同的领域,许多运维工程师会使用 Python 脚本来自动化运维任务,所以本文为大家整理了5个Python自动化运维脚本,有需要的可以参考下
    2023-08-08
  • Python输出列表(List)不带中括号和引号的问题及解决方法

    Python输出列表(List)不带中括号和引号的问题及解决方法

    这篇文章主要介绍了Python输出列表(List)不带中括号和引号的问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-02-02
  • jupyter notebook中新建cell的方法与快捷键操作

    jupyter notebook中新建cell的方法与快捷键操作

    这篇文章主要介绍了jupyter notebook中新建cell的方法与快捷键操作,具有很好的参考价值,希望对有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • python中把元组转换为namedtuple方法

    python中把元组转换为namedtuple方法

    在本篇文章里小编给大家整理的是一篇关于python中把元组转换为namedtuple方法,有兴趣的朋友们可以参考下。
    2020-12-12
  • 详谈Python高阶函数与函数装饰器(推荐)

    详谈Python高阶函数与函数装饰器(推荐)

    下面小编就为大家带来一篇详谈Python高阶函数与函数装饰器(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • 15个应该掌握的Jupyter Notebook使用技巧(小结)

    15个应该掌握的Jupyter Notebook使用技巧(小结)

    这篇文章主要介绍了15个应该掌握的Jupyter Notebook使用技巧(小结),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • python一些性能分析的技巧

    python一些性能分析的技巧

    这篇文章主要介绍了python一些性能分析的技巧,帮助大家更好的理解和学习python,感兴趣的朋友可以了解下
    2020-08-08
  • python基础之迭代器与生成器

    python基础之迭代器与生成器

    这篇文章主要为大家介绍了python迭代器与生成器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • matplotlib绘图实例演示标记路径

    matplotlib绘图实例演示标记路径

    这篇文章主要介绍了matplotlib绘图实例演示标记路径,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01

最新评论