Mac 在Python脚本中使用 ffmpeg

ffmpeg python批处理视频文件 增加关键帧 解决seekTo不准确问题 最近在做视频播放功能,用到了ijkplayer,发现在视频未缓冲,拖动进度条会出现进度条倒退,甚至从起点开始的情况(好像跟之前的B站一样),而且当Activity onstop时保存进度,在onRestart时seekTo到上一次位置,会一直从0开始播放。 在网上查阅一些资料后,发现是由于视频中没有关键帧,而seekTo会从目标position最近关键帧的位置开始播放视频,如果没有关键帧,则从头开 阅读详情


之前一直对 FFmpeg 这个工具有些模糊,后来才知道这个工具或者说开源项目的源码是用 C语言开发的,是一个基于 CLI(command line based,即 命令行)的、用来处理媒体文件的实用程序。这里, 主要讲一下在Python编译环境下使用ffmpeg的方法(主要是基于 Mac OS 系统,Linux的教程可以 点击)。

ffmpeg is a CLI (command line based) utility for processing media files. It is a framework with a multitude of features and, because of it’s open source license, it is the base for many widespread apps such as VLC, YouTube, iTunes and many more.

1. ffmpeg

在这里插入图片描述

FFmpeg is a collection of libraries and tools to process multimedia content such as audio, video, subtitles and related metadata.

FFmpeg 是视频处理最常用的开源软件。

它功能强大,用途广泛,大量用于视频网站和商业软件(比如 Youtube 和 iTunes),也是许多音频和视频格式的标准编码/解码实现。

2. 安装

Linux

暂略:可以参考Linux上的ffmpeg完全使用指南

Python

pip install ffmpeg
Collecting ffmpeg
  Downloading https://files.pythonhosted.org/packages/f0/cc/3b7408b8ecf7c1d20ad480c3eaed7619857bf1054b690226e906fdf14258/ffmpeg-1.4.tar.gz
Building wheels for collected packages: ffmpeg
  Building wheel for ffmpeg (setup.py) ... done
  Created wheel for ffmpeg: filename=ffmpeg-1.4-cp36-none-any.whl size=6084 sha256=3c449fefba5ac43b9eaeba00cfb75bb9432ec7aca5c2b59cfc69f90eaf9e7853
  Stored in directory: /Users/robin/Library/Caches/pip/wheels/b6/68/c3/a05a35f647ba871e5572b9bbfc0b95fd1c6637a2219f959e7a
Successfully built ffmpeg
Installing collected packages: ffmpeg
Successfully installed ffmpeg-1.4

3. 使用示例

介绍 FFmpeg 用法之前,需要了解一些视频处理的基本概念。

  1. 容器
    视频文件本身其实是一个容器(container),里面包括了视频和音频,也可能有字幕等其他内容。
# 查看 FFmpeg 支持的容器
ffmpeg -formats 
  1. 编码格式
    视频和音频都需要经过编码,才能保存成文件。不同的编码格式(CODEC),有不同的压缩率,会导致文件大小和清晰度的差异。
# 查看 FFmpeg 支持的编码格式,视频编码和音频编码都在内
ffmpeg -codecs
  1. 编码器

编码器(encoders)是实现某种编码格式的库文件。只有安装了某种格式的编码器,才能实现该格式视频/音频的编码和解码。

# 查看 FFmpeg 已安装的编码器
ffmpeg -encoders

3.1 命令行

(1) FFmpeg 的使用格式
FFmpeg 的命令行参数非常多,其基本形式分为五个部分。

ffmpeg [全局参数] {[输入文件参数] -i 输入文件地址} ... {[输出文件参数] 输出文件地址} ...

要注意的是,所有的参数仅仅对仅接下来的文件有效(下一个文件得把参数再写一遍)。

所有没有使用 -i 指定的文件都被认为是输出文件。 Ffmpeg 可以接受多个输入文件并输出到您指定的位置。你也可以将输入输出都指定为同一个文件名,不过这个时候要在输出文件前使用用 -y 标记。

Note:你不应该将输入和输出混淆,先指定输入,再指定输出文件

例子:

ffmpeg \
-y \ # 全局参数
-c:a libfdk_aac -c:v libx264 \ # 输入文件参数
-i input.mp4 \ # 输入文件
-c:v libvpx-vp9 -c:a libvorbis \ # 输出文件参数
output.webm # 输出文件

上面的命令将 mp4 文件转成 webm 文件,这两个都是容器格式。输入的 mp4 文件的音频编码格式是 aac,视频编码格式是 H.264;输出的 webm 文件的视频编码格式是 VP9,音频格式是 Vorbis。
如果不指明编码格式,FFmpeg 会自己判断输入文件的编码。因此,上面的命令可以简单写成下面的样子:

ffmpeg -i input.avi output.mp4

(2)常用命令行参数

-c:指定编码器
-c copy:直接复制,不经过重新编码(这样比较快)
-c:v:指定视频编码器
-c:a:指定音频编码器
-i:指定输入文件
-an:去除音频流
-vn: 去除视频流
-preset:指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。
-y:不经过确认,输出时直接覆盖同名文件。

(3)常见用法

下面介绍 FFmpeg 几种常见用法。

…暂略
(可以点击查看详细攻略:FFmpeg 视频处理入门教程、Linux上的ffmpeg完全使用指南)

3.2 在Python 脚本中使用 ffmpeg

上面介绍了使用Python在命令行中使用ffmpeg的方法,但是如果想要在Python脚本中(而不是命令行中)使用功ffmpeg呢?

可以使用 os 模块下的os.system,创造出命令行的环境。
例如:

for filename in os.listdir(path):
    if (filename.endswith(".mp4")): #or .avi, .mpeg, whatever.
        os.system("ffmpeg -i {0} -f image2 -vf fps=fps=1 output%d.png".format(filename))
    else:
        continue

3.3 API

暂略

参考:

  1. FFmpeg 视频处理入门教程
  2. Linux上的ffmpeg完全使用指南
  3. ffmpeg in python script
  4. 使用python ffmpeg的小总结
安装Autosub给本地视频上字幕 for Mac 1. 安装套件管理工具Homebrew 打开Terminal输入 ruby -e "$(curl -fsSLhttps://raw.githubusercontent.com/Homebrew/install/master/install)" 安装好之后跑一下 brew doctor 如果出现 Your system is ready to brew. 代表安装成功,如果出现... 阅读详情

相关推荐

FFmpeg批量剪辑神器:3分钟搞定视频片头片尾自动裁剪(附Windows/Mac双平台脚本)

本文详细介绍了使用FFmpeg进行视频片头片尾批量剪辑的高效方法,提供Windows和Mac双平台脚本,帮助用户3分钟内完成自动裁剪。通过环境配置、脚本详解和高级技巧,大幅提升视频处理效率,特别适合需要处理大量视频素材的创作者。

weixin_30296405的博客 441

ffmpeg工具实用命令

ffmpeg工具实用命令

小何的博客 2785

FFmpeg python环境下安装

FFmpeg python环境下安装。FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。它提供了录制、转换以及流化音视频的完整解决方案。FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。FFmpeg编码库可以使用GPU加速。...

qq_52908337的博客 4271

键盘输入语句

scanf替换为scanf_s,很有可能没有警告,但是会出现函数没法用的情况

qq_47896523的博客 991

使用python+ffmpeg桌面录制软件

需要创建目录结构: bin/ffmpeg.exe myVideo mygui.py mygui.py文件代码如下: import os import time import subprocess from tkinter import * import psutil LOG_LINE_NUM = 0 class MyGui(object): def __init__(self, init_window_name): self.init_window_name = init_wi

weixin_42792607的博客 644

Java写的音频批量转MP3小工具(自带FFmpeg,支持Win/Mac/Linux)

直接运行就能把WAV、AAC、FLAC、OGG、M4A、WMA等多种音频格式批量转成MP3。不用单独装FFmpeg——Windows版带exe,macOS和Linux版也预置了对应二进制文件,路径不对还能手动指定。转换参数全可调:比特率(如128k/192k/320k)、采样率(44.1kHz等)、声道(单声道/立体声)都能设。源码结构清爽,核心逻辑集中在src/main/java里,附带详细注释;测试音频放在audio目录下,开箱即试。提供一个Demo类,三行Java代码就能启动转换任务。打包成独立jar

c2d3e4f的博客 183

C语言如何等待一个用户输入

C语言如何等待一个用户输入 在C语言中,你可以使用scanf函数来等待用户输入。但是,如果你想要程序暂停并等待用

Kp0fS的草稿纸 1567

华为海思IC前端中后端(COT&XPU)岗位笔试机考题

华为海思COT和XPU部门IC前端,IC中端,IC后端岗位笔试真题分享

weixin_37584728的博客 3362

c语言实现等待用户输入 ‘q‘+回车后退出

#include <stdio.h> int main() { char ch; int is_enter; while (1) { printf("\npress 'q' to exit !\n"); while('\n' == (ch = (char)getchar())); is_enter = getchar(); printf("is_enter.

a980734723的博客 2854

内存|内存的概念、内存的作用、内存的物理结构及内存使用

内存是硬件,是用于存放数据的硬件。程序执行前需要先放到内存中才能被CPU处理。内存是与CPU沟通的桥梁,计算机中所有程序的运行都要依靠内存,内存对计算机的影响非常大。本文简单介绍了内存的概念、作用、物理结构以及使用,内存远不止如此,后续文章会逐步深入讲解。

qq_59938293的博客 2万+

界面上下固定_基于ANSYS的胶粘结构界面开裂有限元计算

引言:目前工程上主要有螺栓,过盈,焊接和胶粘四种常用的连接方式,本文基于ANSYS Workbench环境,引入内聚力模型来实现对胶粘结构界面开裂失效的计算,文中的界面失效参数为随意给定,不是工程实际测试数据,仅起到演示作用!1.问题的描述如图所示给出了胶粘结构的三维模型,该胶粘结构由上下钢板组成,中间通过胶粘接到一起。(胶不需要建模,其影响主要通过内聚力模型实现)上下板的材料为结构钢,...

weixin_29473667的博客 1万+

C语言-以下程序段等待从终端输入一个字符,当按Enter键时,程序才往下进行。

#include<stdio.h> main() { char ch; int i; for(i=0;i<26;i++) { ch=i+65; printf("c=%c ASCII=%d ",ch,ch); printf("Press Enter to continue\n"); while(getchar()!='\n'); } putchar('\n'); } c=A ASCII=65 Press Enter to continue c=B ASCII=

程序员本员 2428

SAP固定资产原值与净值取值逻辑全解析:从数据表到ABAP实战

在企业资源计划(ERP)系统中,固定资产的价值管理是财务会计的核心模块,其关键在于准确核算资产原值与净值。从技术原理上看,这涉及对资产全生命周期业务(如购置、折旧、转移、报废)的财务建模,以及底层数据表(如ANLC、ANEP)的精准关联与计算。掌握这一逻辑的技术价值在于,能够确保财务报表数据的准确性,满足合规性要求,并为管理决策提供可靠依据。在SAP ECC或S/4HANA系统的应用场景中,ABAP开发者与财务顾问常需通过编写报表程序,从复杂的数据结构中提取资产价值信息。本文聚焦于SAP资产会计模块,深入剖

weixin_30984001的博客 393

ffmpeg mac 批量脚本_Python 多种音乐格式批量转换实战教程

Pydub是一个基于ffmpeg的Python音频处理模块,封装了许多ffmpeg底层接口,因此用它来做音乐歌曲文件格式转换会非常方便,如果你阅读过我们之前的文章:剪辑音乐要很久?3行语句Python瞬间搞定你就知道它有多么强大了。今天给大家介绍它的音乐文件格式转换功能,几乎支持所有音乐音频格式,非常强大。1.安装安装Pydub前需要先安装ffmpeg:Mac(打开终端(Termin...

weixin_29826879的博客 333

海康Visionmaster-全局脚本:VM 加载方案后自动执行 的方法,如何让VM在方案加载后自动执行流程?

海康Visionmaster-全局脚本:VM 加载方案后自动执行 的方法,如何让VM在方案加载后自动执行流程?

视觉人机器视觉的博客 2036

智能硬件产品:做好一款电子硬件产品,工具必不可少

上到战略规划,中至运营策略,下至人性洞察,。最初做产品时,笔者从一开始就陷入到了对工具的痴迷,包括:PS、AutoCAD、PROE、犀牛、Axure、Keyshot、Altium……大概将 2 个多月的时间和精力都消耗在了学习使用工具上。通过工具的运用也确实提高了工作效率,在仅有创意的前提下通过灵活运用工具,一年内便成功申请了多个实用新型专利、设计了多款产品的高保真原型图等。正在上传…重新上传取消。

产品线负责人 1442

使用ffmpeg合并多个mp4文件

关键词:ffmpeg、Mac、Python、bash 安装ffmpeg 打开浏览器,进入ffmpeg官方下载页面,选择操作系统对应的可执行文件下载选项,直接下载压缩包并且解压即可。 解压完"ffmpeg-4.4.7z"会得到一个"ffmpeg"的可执行文件,此时我们在命令行是无法使用ffmpeg命令的,因为我们并没有安装ffmpeg到系统,只是下载了可执行文件,下一步我们打开Terminal,把ffmpeg的可执行文件移动到"/usr/local/bin"文件夹下面,这样我们就可以在命名行正常使用ffm

weixin_46062098的博客 3589

一文吃透 OData Deep Insert:从框架原理到 ABAP 实战

本文面向ABAP工程师,解析OData服务中的Deep Insert技术。文章首先阐述Deep Insert的业务背景,说明其适用于父子层级数据必须成组创建的场景(如销售订单与行项目)。随后深入框架实现机制,介绍SAP Gateway如何通过CREATE_DEEP_ENTITY方法处理嵌套请求,并强调开发者的责任边界。通过销售订单案例,文章对比了Deep Insert与$batch的适用场景差异,提供请求负载示例和DPC_EXT实现骨架代码。最后给出MPC_EXT声明深结构的三种套路,以及事务处理和错误处理

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 225

python拼接大量ts文件_Python爬取.ts文件,合并为mp4

目标:爬影视网站ts文件到本地,合并成mp4文件下载ts文件本着不重复造轮子的精神(好吧其实是我懒),想用迅雷批量下载爬取,但是迅雷提供的通配符过于简单无法构造URL,只能自己写脚本如下:# -*- coding: utf-8 -*-import osimport requestsfrom multiprocessing import PoolOVER_INDEX = 1600L = 6def d...

weixin_39850062的博客 920

ML307R OpenCPU TCP使用

实现现象 平台下发数据,板子在收到数据之后,马上再发送到平台,通过串口助手可以看到已经接收到数据。ML307R TCP 是使用LWIP的标准的socket通信,具体TCP流程可以自行百度。实验目的:实现把接收的数据再发送到服务端。因为是4G,所以必须用外网的。

面朝大海春暖花开 2232

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

怎样把切割ts分片重新拼接为一个完整的MP4视频文件?

请注意,上述步骤适用于在Windows下使用cmd命令提示符,对于Mac和Linux用户,请将相应的命令修改为适用的命令。使用文本编辑器打开刚才保存的文件列表(filelist.txt),将文件名前面的路径移除,只保留文件名。方法调用FFmpeg命令行工具,并传递适当的参数来拼接ts分片文件,并输出为一个完整的MP4文件。等待命令执行完成,合并后的MP4视频文件将保存在当前文件夹下,文件名为output.mp4。要将切割的ts分片重新拼接为一个完整的MP4视频文件,可以使用Python中的。

2301_79698214的博客 1697

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Python使用ffmpeg完美解决方案(避坑必看)

近期有个需要进行音频转码的小任务需要用到ffmpeg,安装和使用的过程中遇到了很多问题没有办法解决,从网上找了各种教程也是一言难近,本文二哥来梳理一下从0到1在Mac上使用ffmpeg。 一、在系统中安装ffmpeg 第一步需要在系统中安装ffmpeg,很多人都给出了使用brew命令进行下载的方案,在此说一下,多数人brew后都需要等n分钟,最后以报错告终,这种外部网站不稳定,因此强烈不推荐此方法。 稳定的安装方法 第一步:去官网下载安装包:ffmpeg官网 第二步:选择自己的系统,点图片中的地方: .

二哥为啥不像程序员? 6万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

MAC上安装ffmpeg并使用python调用

参考: 1、在 macOS 上安装 FFmpeg 并通过 Python 调用的方法 2、Mac OS上使用ffmpeg的“血泪”总结 首先需要在MAC机器上安装原生ffmpeg,最方便的方式是采用Homebrew安装。 注:采用以下命令安装homebrew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" homebrew安装成功后,使用以下命令安装ffm

TracelessLe的专栏 2758

FFMPEG视频压缩与Python使用方法

FFMPEG是一个完整的,跨平台的解决方案,记录,转换和流音频和视频。

AcceptedLin的博客 1万+

Mac pydub ffmpeg

打开/opt/anaconda3/lib/python3.9/site-packages/pydub/utils.py,找到envdir_list(此处第153行),添加envdir_list.append('/opt/homebrew/Cellar/ffmpeg/7.0.1/bin')4 在/opt/homebrew/Cellar/ffmpeg/7.0.1/bin/中,把ffmpeg、ffplay、ffprobe全点开了一遍。1 重新 pip install 无果。5 重启VScode。

neocosmic_的博客 924

【音视频】测评工具VMAF

PS:学习地址Mac安装教程:https://testerhome.com/topics/25083 命令汇总 # 编译环境准备 brew install gcc meson doxygen nasm freetype pkg-config hdf5 brew install numpy scipy # 下载源码 git clone https://github.com/Netflix/vmaf.git cd vmaf git submodule update --init --recursive .

darlingmz的博客 932
上一篇: “声音”背后的原理(1):波(横波、纵波、声波)、声音的采集、声音的储存
下一篇: 音频特征(2):时域图、频谱图、语谱图(时频谱图)
Robin_Pi
博客等级 码龄9年 2万+粉丝 632原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值