热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ffmpegpython库的使用翻译(一)

原文地址:https:github.comkkroeningffmpeg-python,本文为google翻译部分人工翻译,希望能对大家有用。ffmp

原文地址:https://github.com/kkroening/ffmpeg-python,本文为google翻译+部分人工翻译,希望能对大家有用。

ffmpeg-python:FFmpeg的Python绑定

总览

已经有大量的Python FFmpeg包装器,但是它们似乎缺乏复杂的过滤器支持。 ffmpeg-python适用于简单和复杂的信号图。

快速开始

水平翻转视频:

import ffmpeg
stream = ffmpeg.inputinput('input.mp4')
stream = ffmpeg.hflip(stream)
stream = ffmpeg.output(stream, 'output.mp4')
ffmpeg.run(stream)

或者,如果您更喜欢流畅的代码:

import ffmpeg
(ffmpeg.input('input.mp4').hflip().output('output.mp4').run()
)

API参考




复杂的过滤器图

FFmpeg非常强大,但是它的命令行界面却非常复杂,尤其是在处理信号图并执行琐碎的事情时。

以一个信号图为例:(笔者:以下的例子是将一个图片水平翻转并嵌入到视频里面)

FFmpeg原始的命令行参数非常粗糙:

ffmpeg -i input.mp4 -i overlay.png -filter_complex “ [0] trim = start_frame = 10:end_frame = 20 [v0]; \[0] trim = start_frame = 30:end_frame = 40 [v1]; [v0] [v1] concat = n = 2 [v2]; [1] hflip [v3]; \[v2] [v3] overlay = eof_action = repeat [v4]; [v4] drawbox = 50:50:120:120:red :t = 5 [v5] “ \ -map [v5] output.mp4

也许这对您来说看起来不错,但是如果您不是FFmpeg命令行专家,则可能看起来有些陌生。

如果您像我一样,并且发现Python强大且易读,那么使用ffmpeg-python以下代码会更容易:

import ffmpegin_file = ffmpeg.input('input.mp4')
overlay_file = ffmpeg.input('overlay.png')
(ffmpeg.concat(in_file.trim(start_frame=10, end_frame=20),in_file.trim(start_frame=30, end_frame=40),).overlay(overlay_file.hflip()).drawbox(50, 50, 120, 120, color='red', thickness=5).output('out.mp4').run()
)

ffmpeg-pythonffmpeg使用熟悉的Python术语,使用与上述过滤器图相对应的命令行参数运行。上面的代码效果如下:

现实世界中的信号图可能要复杂得多,但可以用ffmpeg-python处理任意大的(有向无环)信号图。

安装



ffmpeg-python可以通过pip安装获取最新版本:

pip install ffmpeg-python

也可以从本地克隆并安装源:

git clone git@github.com:kkroening / ffmpeg-python.git
pip install -e ./ffmpeg-python

例子

如有疑问,请查看示例以了解是否有与您尝试做的事情接近的代码。

比如以下这些例子:

  • 将视频转换为numpy数组

  • 生成视频缩略图

  • 通过管道读取原始PCM音频

  • JupyterLab /笔记本流编辑器

  • Tensorflow / DeepDream流

有关其他示例,请参见示例自述文件。

自定义过滤器



没有找到您要的过滤器?虽然ffmpeg-python包括一些最常用的过滤器(例如concat)的简写,但所有过滤器都可以通过.filter运算符来引用:

stream = ffmpeg.input('dummy.mp4')
stream = ffmpeg.filter(stream, 'fps', fps=25, round='up')
stream = ffmpeg.output(stream, 'dummy2.mp4')
ffmpeg.run(stream)

或者这样流利的写代码:(笔者:说实话,我比较喜欢这种写法)

(ffmpeg.input('dummy.mp4').filter('fps', fps=25, round='up').output('dummy2.mp4').run()
)

特殊选项名称:

具有特殊名称的参数-qscale:v(例如(可变比特率),-b:v(恒定比特率)等)可以指定为关键字参数字典,如下所示:

(ffmpeg.input('in.mp4').output('out.mp4', **{'qscale:v': 3}).run()
)

多个输入:(笔者:这种代码非常简洁漂亮)

通过将多个输入流作为数组传递给ffmpeg.filter:,可以使用采用多个输入流的过滤器:

main = ffmpeg.input('main.mp4')
logo = ffmpeg.input('logo.png')
(ffmpeg.filter([main, logo], 'overlay', 10, 10).output('out.mp4').run()
)

多个输出:

产生多个输出的过滤器可以用.filter_multi_output:

split = (ffmpeg.input('in.mp4').filter_multi_output('split') # or `.split()`
)
(ffmpeg.concat(split[0], split[1].reverse()).output('out.mp4').run()
)

(在这种情况下,.split()是等效的代码缩写方式,但一般方法适用于其他多输出滤波器)

字符串表达式:

可以将符合ffmpeg规则的表达式写成字符串参数,并引用任何特殊的ffmpeg变量名称:

(ffmpeg.input('in.mp4').filter('crop', 'in_w-2*10', 'in_h-2*20').input('out.mp4')
)

如有疑问,请参阅现有的过滤器,示例和/或ffmpeg官方文档。

常见问题



为什么会有错误的提示:import/attribute/etc. error from import ffmpeg?

确保您是这样安装库的:pip install ffmpeg-python,而不是pip install ffmpegpip install python-ffmpeg

为什么我的音频流被丢弃了?

一些原始的ffmpeg过滤器会丢弃音频流,因此必须注意将音频保留在最终输出中。.audio.video操作可以被用来引用一数据流的音频/视频部分,使得它们可以被单独地处理,然后在后面的管道重新组合。

这种问题是ffmpeg固有的,而ffmpeg-python试图避开这个障碍,而用户可能会参考ffmpeg官方文档以了解为什么某些过滤器会丢弃音频。

像往常一样,看一下示例(尤其是音频/视频管道)。

如何找出使用的命令行参数?

您可以在stream.run()之前运行stream.get_args(),检索要传递给的命令行参数ffmpeg。您还可以运行stream.compile()ffmpeg程序,并将可执行文件作为第一个参数。

我如何做XYZ?

请阅读本自述文件末尾“其他资源”部分中的每个链接。如果您四处张望,找不到所需的内容,并且有与其他用户相关的问题,则可以提出一个问题,询问其操作方法,同时全面说明要执行的操作做以及到目前为止您尝试过的事情。

ffmpeg-python其他用户没有直接关系的问题或要求他人为您编写代码的问题或如何为您解决与其他用户无关的复杂信号处理问题的问题将得到解决。

也就是说,我们希望继续改进我们的文档,并为使用ffmpeg-python凉爽和令人兴奋的事物的人们提供支持社区。

贡献

 

您可以做的最好的事情之一ffmpeg-python就是在问题跟踪器中回答未解决的问题。回答的问题将被标记并合并到文档,示例和其他学习资源中。

如果您发现在文档或整体开发经验方面可能会更好的事情,请在问题跟踪器中这样说。当然,请随时报告任何错误或提交功能请求。

也欢迎请求请求,但是触摸问题跟踪器中的库或先跳至Matrix聊天频道都不会造成伤害。

修复任何打开的错误或实现所请求的增强功能的人都是英雄,但是更改应包括通过测试。

运行测试

git clone git@github.com:kkroening/ffmpeg-python.git
cd ffmpeg-python
virtualenv venv
. venv/bin/activate # (OS X / Linux)
venv\bin\activate # (Windows)
pip install -e .[dev]
pytest

 

特别感谢


  • Fabrice Bellard
  • The FFmpeg 团队
  • Arne de Laat
  • Davide Depau
  • Dim
  • Noah Stier

其他资源


  • API参考
  • 例子
  • 筛选器
  • FFmpeg主页
  • FFmpeg文档
  • FFmpeg筛选器文档
  • 测试用例
  • 问题追踪器
  • 矩阵聊天:#ffmpeg-python:matrix.org

下篇:ffmpeg-python库的使用翻译(二)



推荐阅读
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • Python自动化处理:从Word文档提取内容并生成带水印的PDF
    本文介绍如何利用Python实现从特定网站下载Word文档,去除水印并添加自定义水印,最终将文档转换为PDF格式。该方法适用于批量处理和自动化需求。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 使用Python在SAE上开发新浪微博应用的初步探索
    最近重新审视了新浪云平台(SAE)提供的服务,发现其已支持Python开发。本文将详细介绍如何利用Django框架构建一个简单的新浪微博应用,并分享开发过程中的关键步骤。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 深入理解Tornado模板系统
    本文详细介绍了Tornado框架中模板系统的使用方法。Tornado自带的轻量级、高效且灵活的模板语言位于tornado.template模块,支持嵌入Python代码片段,帮助开发者快速构建动态网页。 ... [详细]
  • 1.如何在运行状态查看源代码?查看函数的源代码,我们通常会使用IDE来完成。比如在PyCharm中,你可以Ctrl+鼠标点击进入函数的源代码。那如果没有IDE呢?当我们想使用一个函 ... [详细]
  • 前言--页数多了以后需要指定到某一页(只做了功能,样式没有细调)html ... [详细]
  • 深入理解C++中的KMP算法:高效字符串匹配的利器
    本文详细介绍C++中实现KMP算法的方法,探讨其在字符串匹配问题上的优势。通过对比暴力匹配(BF)算法,展示KMP算法如何利用前缀表优化匹配过程,显著提升效率。 ... [详细]
  • 离线环境下的Python及其第三方库安装指南
    在项目开发中,有时会遇到电脑只能连接内网或完全无法联网的情况。本文将详细介绍如何在这种环境下安装Python及其所需的第三方库,确保开发工作的顺利进行。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文详细介绍如何在 macOS 上编译 FFmpeg 3.1.1,并将其集成到 iOS 项目中,包括必要的环境配置和代码示例。 ... [详细]
author-avatar
qapo
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有