FFmpeg库之ffmpeg

news2024/12/19 10:48:52

文章目录

  • ffmpeg命令行使用
    • 基本命令
      • 选择流 -map选项
    • 主要命令
    • 视频选项
    • 音频选项
    • 多媒体格式转换
    • 滤镜
      • 裁剪
      • 加水印
      • 画中画
    • 录制
      • 查看可用的录制设备
      • 查看录制设备选项参数
      • 录制桌面
      • 录制窗口
      • 录制摄像头
      • 录制麦克风
      • 录制系统声音
      • 同时录制桌面和麦克风
    • 直播
      • 推流
      • 拉流

ffmpeg命令行使用

ffmpeg是一个通用的媒体转换器。它可以读取各种输入(包括实时抓取/录制设备),对其进行过滤,并将它们转码为多种输出格式。

语法格式:

ffmpeg [global_options] {[input_file_options] -i input_url} ... {[output_file_options] output_url}...

基本命令

命令名称作用
-version显示ffmpeg版本
-formats显示可用的格式
-demuxers显示可用的解复用器
-protocols显示可用的协议
-muxers显示可用的复用器
-filters显示可用的过滤器
-devices显示可用的设备
-pix_fmts显示可用的像素格式
-codecs显示所有的编解码器
-sample_fmts显示可用的采样格式
-decoders显示可用的解码器
-layouts显示声道名称
-encoders显示所有的编码器
-colors显示识别的颜色名称
-bsfs显示比特流filter

选择流 -map选项

-map选项用于手动控制每个输出文件中的流选择。用户可以跳过-map,让ffmpeg执行如下所述的自动流选择。-vn/-an/-sn/-dn选项可用于分别跳过包含视频、音频、字母和数据流。

使用格式如下:

-map 文件索引位置:流索引位置
-map 文件索引位置:流的类型
-map 文件索引位置:流的类型:流的索引位置

流类型:

  • a 表示音频流
  • v 表示视频流
  • s 表示字幕流
  • d 表示数据流
  • t 表示附件六
    注意:索引位置从0开始

在特定输出文件没有任何映射选项的情况下,ffmpeg检查输出格式以检查哪种类型的流可以包含在其中,即视频,音频或字母。对于每个可接受的流类型,ffmpeg将从所有输入中选择一个可用的流。
它将根据以下标准选择该流:

  • 对于视频来说,它是分辨率最高的流媒体
  • 对于音频,它是具有最多通道的流
  • 对于字母,这是找到的第一个字幕流,但有一个警告,输出的格式的默认字幕编码器可以是基于文本的,也可以是基于图像的,并且只会选择相同类型的字幕流
  • 在相同类型的多个流速率相等的情况下,选择索引最低的流
    注意:数据或附件流不会自动选择,只能使用-map包含

例如:假设有如下几个视频文件

input file 'A.avi'
		stream 0: video 640x360
		stream 1: audio 2 channels

input file 'B.mp4'
		stream 0: video 1920x1080
		stream 1: audio 2 channels
		stream 2: subtitles (text)
		stream 3: audio 5.1 channels
		stream 4: subtitles (text)

input file 'C.mkv'
		stream 0: video 1280x720
		stream 1: audio 2 channels
		stream 2: subtitles (image)

执行如下命令
ffmpeg -i A.avi -i B.mp4 out1.mkv out2.wav -map 1:a -c:a copy out3.mov

指定了3个输出文件,对于前2个,没有设置-map选项,因此ffmpeg将自动为这两个文件选择流(会选择最好的那个流)。
out1.mkv是一个Matroska容器文件,它接受视频、音频和字幕流,因此ffmpeg将尝试在每种类型中选择一种。
对于视频,它将从B.mp4中选择流0,它所在所有输入视频流中具有最高的分辨率。
对于音频,它将从B.mp4中选择流3,因为它有最多的通道。
对于字幕,它将从B.mp4中选择流2,这是A.avi和B.mp4之间的第一个字幕流。
out2.wav只接受音频流,所以只选择B.mp4的流3。
out3.Mov,由于设置了-map选项,因此不会发生自动流选择。-map 1:a选项将选择来自第二个输入B.mp4的所有音频流。此输出文件中不会包含其他流。
对于前两个输出,所有包含的流都将被转码。所选择的编码器将是每个输出格式注册的默认编码器,它可能与所选输入流的编码器不匹配。
对于第三个速出,音频流的编解码器选项已经设置为复制,因此不会发生或可能发生解码-过滤-编码操作。所选流的数据包应从输入文件传送,并在输出文件中进行混合。

主要命令

命令名称作用
-f fmt (input/output)强制输入或输出文件格式。通常会自动检测输入文件的格式,并从输出文件的文件扩展名中猜测格式,因此在大多数情况下不需要此选项
-i url (input)输入文件的URL
-stream_loop number (input)设置输入流循环的次数。循环0表示没有循环,循环-1表示无限循环
-t duration (input/output)当用作输入选项(在-i之前)时,限制从输入文件读取数据的持续时间。当用作输出选项(在url之前)时,在其持续时间达到duration后停止写入输出。duration必须是时间持续时间规格,请参阅ffmpeg-utils(1)手册中的时间持续时间部分。
-to position (input/output)在该位置停止写入输出或读取输出-to和-t是互斥的,-t具有优先级
-ss positon (input/output)当用作输入选项(在-i前)时,在此输入文件中查找位置。当用作输出选项(在url前)时,解码但丢弃输入,直到时间戳到达指定位置
-c[:stream_specifier] codec (input/output,per-stream)为一个或多个流选择编码器(在输出文件前使用)或解码器(在输入文件前使用)。

实例:

  1. 从视频中分离音频
    在这里插入图片描述
    执行完后生成了aac文件
    在这里插入图片描述
    2.把上述音频改成mp3,并限制到3秒结束
    在这里插入图片描述

视频选项

命令名称作用
-vframes number (output)设置输出的视频帧数。
-r[:stream_specifier] fps (input/output,per-stream)设置帧速率
-s[:stream_specifier] size (input/output,per-stream)设置分辨率
-vcodec codec(output)设置视频编解码器
-pix_fmt[:stream_specifier] format (input/output,per-stream)设置像素格式

音频选项

命令名称作用
-aframes number (output)设置输出的音频帧数
-ar[:stream_specifier] freq (input/output,per-stream)设置音频采样率
-ac[:stream_specifier] channels (input/output,per-stream)设置音频通道的数量
-acodec codec (input/output)设置音频编解码器
-sample_fmt[:stream_specifier] sample_fmt (input/output,per-stream)设置音频样本格式

多媒体格式转换

命令名称作用
ffmpeg -i 输入文件路径 输出文件路径容器格式转换
ffmpeg -i 输入文件路径 -c:v copy -an 输出文件路径提取视频流
ffmpeg -i 输入文件路径1 -i 输入文件路径2 … -map 文件索引1:v -c:v copy -map 文件索引2:v -c:v copy … 输出文件路径提取多个视频流到一个文件中
ffmpeg -i 输入文件路径 -c:a copy -vn 输出文件路径提取音频流
ffmpeg -i 输入文件路径 -c:v 视频编码器名称 输出文件路径视频转码
ffmpeg -i 输出文件路径 -c:v 视频编码器名称 -an 输出文件路径抽取视频流转码
ffmpeg -i 输入文件路径 -c:a 音频编码器名称 输出文件路径音频转码
ffmpeg -i 输入文件路径 -an -c:v rawvideo -s 分辨率 -pix_fmt 像素格式 out.yuv抽取视频文件的视频原始数据
ffmpeg -s 原始图像分辨率 -pix_fmt 原始图像格式 -i 输入文件路径 -s 目标图像分辨率 -pix_fmt 目标图像格式 输出文件路径YUV和RGB互相转换
ffmpeg -i 输入文件路径 -vn -ar 采样率 -ac 声道数 -c:a 编码器名称 输出文件路径抽取视频文件中原始音频数据
ffmpeg -i 输入文件路径 -s 分辨率 输出文件路径修改视频分辨率
ffmpeg -i 输入文件路径 -b:a 码率 输出文件路径修改音频码率
ffmpeg -i 输入文件路径 -ar 采样率 输出文件路径修改音频采样率
ffmpeg -ss 00:00:10 -i 输入文件路径 -t 时长 输出文件路径从第10秒截取视频,视频时长是后面指定的时长
ffmpeg -i 输入文件路径 输出文件路径(.ts)视频转ts流
ffmpeg -f concat -i 文件列表.txt 输出文件路径视频拼接。文件列表.txt格式如下: file ‘video-30fps.MP4’ 一行一个路径
ffmpeg -i 输入文件路径 -y -f 图片格式 -vframes 帧数 输出文件路径(如果图片超过1张,需要使用%d)提取视频中的图片
ffmpeg -i 输入文件路径 输出文件路径图片转视频,例ffmpeg -i img%d.jpg out.mp4
ffmpeg -i 输入文件路径 -t 视频时长 -r 帧率 输出文件路径视频转GIF
ffmpeg -i 输入文件路径 -f 格式名称 输出文件路径GIF转视频

滤镜

简单过滤图是指只有一个输入和输出且类型相同的过滤图。它们可以通过在解码和编码之间插入一个额外的步骤来表示:

 _________                        ______________
|         |                      |              |
| decoded |                      | encoded data |
| frames  |\                   _ | packets      |
|_________| \                  /||______________|
             \   __________   /
  simple     _\||          | /  encoder
  filtergraph   | filtered |/
                | frames   |
                |__________|

简单的过滤器图配置有每个流-筛选选项(与-vf和-af分别为视频和音频的别名)。一个简单的视频过滤图可以如下所示:

 _______        _____________        _______        ________
|       |      |             |      |       |      |        |
| input | ---> | deinterlace | ---> | scale | ---> | output |
|_______|      |_____________|      |_______|      |________|

请注意,某些过滤器会更改框架属性,但不会更改框架内容。例如, fps上例中的过滤器更改帧数,但不触及帧内容。另一个例子是setpts过滤器,它只设置时间戳,否则不改变地传递帧。

复杂的过滤器图不能简单地描述为应用于一个流的线性处理链。例如,当图具有多个输入和/或输出时,或者当输出流类型与输入不同时,就会出现这种情况。它们可以用下图表示:```

 _________
|         |
| input 0 |\                    __________
|_________| \                  |          |
             \   _________    /| output 0 |
              \ |         |  / |__________|
 _________     \| complex | /
|         |     |         |/
| input 1 |---->| filter  |\
|_________|     |         | \   __________
               /| graph   |  \ |          |
              / |         |   \| output 1 |
 _________   /  |_________|    |__________|
|         | /
| input 2 |/
|_________|

复杂的过滤图配置为-filter_complex选项。请注意,此选项是全局的,因为复杂的过滤器图本质上不能与单个流或文件明确关联。

-lavfi选项相当于-filter_complex。

复杂过滤器图的一个简单示例是overlay过滤器,它具有两个视频输入和一个视频输出,其中一个视频叠加在另一个视频之上。它的音频对应部分是amix滤波器。

裁剪

-vf crop=ow[:oh[:x[:y[:keep_aspect]]]]
  • -vf:使用视频滤镜
  • ow:输出视频的宽度
  • oh:输出视频的高度
  • x:指定裁剪的位置x
  • y:指定裁剪的位置y
  • keep_aspect:是否保持纵横比

例如:指定从(100,200)位置,保持纵横比,裁剪大小为640x480

 ffmpeg -i .\video-30fps.MP4 -vf crop=640:480:100:200:0 裁剪.mp4

在这里插入图片描述

加水印

ffmpeg -i 输入文件路径 -vf drawtext:"fontsize=字体大小:fontfile=字体文件路径:text="水印内容":fontcolor=字体颜色:x=字体位置:y=字体位置" 输出文件路径

#例如
ffmpeg -i .\裁剪.mp4 -vf drawtext="fontfile=SIMLI.TTF: text='你好,世界!':fontcolor=red:x=200:y=300:fontsize=50" 水印.mp4

在这里插入图片描述

画中画

ffmpeg -i 输入文件路径 -vf movie="画中画视频文件路径,scale=缩放大小[sub];[in][sub]overlay=x=位置:y=位置[out]" 输出文件位置
#例如
ffmpeg -i .\video-60fps.MP4 -vf movie="水印.mp4, scale=320x240[sub];[in][sub]overlay=x=100:y=150[out]" 画中画.mp4

在这里插入图片描述

录制

windows需要安装dshow软件,才能录制系统声音。以下命令只针对windows

查看可用的录制设备

ffmpeg -list_devices true -f dshow -i dummy

查看录制设备选项参数

ffmpeg -f dshow -list_options true -i 类型="设备名称"
#例如
查看摄像头参数
ffmpeg -f dshow -list_options true -i video="USB Camera"
查看麦克风参数
ffmpeg -f dshow -list_options true -i audio="麦克风 (Realtek(R) Audio)"
查看桌面录制参数
ffmpeg -f gdigrab -list_options true -i desktop

录制桌面

录制整个桌面
ffmpeg -f gdigrab -i desktop -pix_fmt 图像格式 输出路径
#例如
ffmpeg -f gdigrab -i desktop 桌面录制.mp4

录制指定区域
ffmpeg -r 帧率 -f gdigrab -s 分辨率 -offset_x 宽度偏移量 -offset_y 高度偏移量 -i desktop -vcodec 编码器名称 文件路径
#例如
ffmpeg -f gdigrab -i desktop -s 800x600 -offset_x 100 -offset_y 200  桌面录制2.mp4

录制窗口

ffmpeg -f gdigrab -i title="窗口名称" 输出路径

由于大多数程序隐藏了原来的边框,录制出来经常是黑屏

录制摄像头

ffmpeg -f dshow -i video="摄像设备名称" 输出路径

#例如
ffmpeg -f dshow -i video="USB Camera" 摄像头录制.mp4

录制麦克风

ffmpeg -f dshow -i audio="麦克风 (Realtek(R) Audio)" 麦克风录制.mp3

录制系统声音

ffmpeg -f dshow -i audio="立体声混音 (Realtek(R) Audio)" 麦克风录制2.mp3
# audio=的是声卡设备名称

同时录制桌面和麦克风

ffmpeg -f gdigrab -i desktop -f dshow -i audio="麦克风 (Realtek(R) Audio)" 桌面加麦克风.mp4

直播

推流

直播推流需要先开启服务器

ffmpeg -re -i 输入文件路径 -c copy -f flv rtmp地址
#例如
ffmpeg -re -i video.mp4 -c copy -f flv rtmp://127.0.0.1:1935/live/room
#然后用ffplay观看直播

拉流

ffmpeg -i rtmp地址 -c copy 输出文件路径
#例如 
ffmpeg -i rtmp://ns8.indexforce.com/home/mystream -c copy 拉流.flv
#播放拉到的内容
ffplay .\拉流.flv -x 800 -y 600

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2262115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

模型 信任公式(麦肯锡)

系列文章 分享 模型,了解更多👉 模型_思维模型目录。信任的量化:可信度、可靠性、亲密度、自私度。 1 信任公式(麦肯锡)的应用 1.1 私域用户信任建立(麦肯锡信任公式的应用) 在私域营销领域,与用户建立牢固的信任关系对于提升用…

低延迟!实时处理!中软高科AI边缘服务器,解决边缘计算多样化需求!

根据相关统计,随着物联网的发展和5G技术的普及,到2025年,全球物联网设备连接数将达到1000亿,海量的计算数据使得传输到云端再处理的云计算方式显得更捉襟见肘。拥有低延迟、实时处理、可扩展性和更高安全性的边缘计算应运而生&…

【计算机网络2】计算机网络的性能能指标

目录 一 、计算机网络的性能指标 二、具体介绍 1、速 率 2、带 宽 3、吞 吐 量 4、时 延 5、时延带宽积 6、往 返 时 延 7、信道利用率 一 、计算机网络的性能指标 计算机网络的性能指标就是从不同方面度量计算机网络的性能,有如下7个指标: 速…

密码学——密码学概述、分类、加密技术(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 密码学 大数据…

网络攻击与防范

目录 选填 第一章 1、三种网络模式 2、几种创建网络拓扑结构 NAT模式 VPN模式 软路由模式1 软路由模式2 3、Linux网络配置常用指令 4、常见网络服务配置 DHCP DNS Web服务与FTP服务 FTP用户隔离 第二章 DNS信息收集(dnsenum、dnsmap) 路…

网络攻与防

1、两个专网连接 (1)、两个网卡VMNET2/3---配置IP子网、仅主机模式--除去DHCP设置 路由和两台主机分别ping通 (2)、路由配置:两个专网之间连接--否拨号连接 两台主机可相互ping通---成功 如果ping不通,…

react Ant Design

一、通过项目模版创建一个react项目 set NPM_CONFIG_REGISTRYhttps://registry.npmmirror.com pnpm create vite antd-demo cd antd-demo pnpm install pnpm install antd --save 打开项目: 修改:welcome.tsx import React from react; import { Butto…

【排序算法】——选择排序

前言 排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小&#x…

【排序算法】——交换排序

前言 排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列。所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小&#x…

硬件工程师面试题 11-20

把常见的硬件面试题进行总结,方便及时巩固复习。其中包括网络上的资源、大佬们的大厂面试题,其中可能会题目类似,加强印象即可。 11、示波器需要关注哪些参数? 1,示波器带宽 带宽是示波器最重要的指标之一。 模拟示波器…

【Yolov8足球追踪】YOLO格式足球检测数据集制作及目标追踪

可以只是已经制作好的数据集,也可以进行制作: 数据集制作:1,2,3步 数据集下载: https://pan.baidu.com/s/1upT_aD06lzjuz-Xjze0dcw 提取码: 6eax windows下分卷解压文件:https://blog.csdn.net/…

4.9 TCP 拥塞控制算法

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅! 文章目录 1 TCP 拥塞控制算法1.1 慢开始(Slow Start)1.2 拥塞避免(Congestion Avoidance)1.3 快重传(Fast Retransmit&#x…

计算机毕业设计Django+Tensorflow音乐推荐系统 音乐可视化 卷积神经网络CNN LSTM音乐情感分析 机器学习 深度学习 Flask

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

【HarmonyOS】HarmonyOS 和 Flutter混合开发 (一)之鸿蒙Flutter环境安装

【HarmonyOS】HarmonyOS 和 Flutter混合开发 (一)之鸿蒙Flutter环境安装 一、前言 flutter作为开源适配框架方案,已经在Android,IOS,Web,Window四大平台进行了适配,一套代码,可以同…

机器人变换关系

rigid 刚性变换(平移、旋转): 只改变位置和方向,拥有6个自由度,保持变换物体的形状。 affine 仿射变换(平移、旋转、缩放、倾斜等): 改变物体形状、位置、方向,拥有12…

RTU 通信模块赋能智慧路灯远程开关管理,点亮智慧城市节能增效

RTU(Remote Terminal Unit)远端测控单元在智慧路灯远程开关管理系统中主要负责数据通信和开关控制。能够实现对路灯设备的远程监测和控制,将路灯的状态信息(如开关状态、故障信息、亮度参数等)上传到管理平台&#xff…

Macbookpro M1 IDEA中安装mysql

一:安装与连接数据库 1. 首先在mysql中创建一个初始数据库:idea_db,如示: 2.打开IDEA,如果最右侧没有database窗口,则在插件那里下载“Database navigator”,稍后重启一下即可; 点击最右侧Database---->…

ISCTF复现-misc

File_Format 下载附件后用010打开查看文件头会发现是个exe文件 格式:文件描述(后缀名),文件头(hex):文件头标识(十六进制)PNG (png),文件头(hex):89504E47 PNGImageFile…

如何有效的开展接口自动化测试?

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、简介 接口自动化测试是指使用自动化测试工具和脚本对软件系统中的接口进行测试的过程。其目的是在软件开发过程中,通过对接口的自动化测试来提高测…

FFmpeg第一话:FFmpeg 简介与环境搭建

FFmpeg 探索之旅 一、FFmpeg 简介与环境搭建 二、FFmpeg 解码详解 第一话:FFmpeg 简介与环境搭建 FFmpeg 探索之旅一、前言二、FFmpeg 是什么?三、简单介绍其历史背景四、为什么用 C学习 FFmpeg?(一)高性能优势&#…