ffmpeg命令-Windows下常用最全

news2025/1/12 4:58:19

查询命令

参数

说明

-version

显示版本。

-formats

显示可用的格式(包括设备)。

-demuxers

显示可用的demuxers。

-muxers

显示可用的muxers。

-devices

显示可用的设备。

-codecs

显示libavcodec已知的所有编解码器。

-decoders

显示可用的解码器。

-encoders

显示所有可用的编码器。

-bsfs

显示可用的比特流filter。

-protocols

显示可用的协议。

-filters

显示可用的libavfilter过滤器。

-pix_fmts

显示可用的像素格式。

-sample_fmts

显示可用的采样格式。

-layouts

显示channel名称和标准channel布局。

-colors

显示识别的颜色名称。

参数

说明

-f fmt(输入/输出)

强制输入或输出文件格式。 格式通常是自动检测输入文件,并从输出文件的文件扩展名中猜测出来,所以在大多数情况下这个选项是不需要的。

-i url(输入)

输入文件的网址

-y(全局参数)

覆盖输出文件而不询问。

-n(全局参数)

不要覆盖输出文件,如果指定的输出文件已经存在,请立即退出。

-c [:stream_specifier] codec(输入/输出,每个流)

选择一个编码器(当在输出文件之前使用)或解码器(当在输入文件之前使用时)用于一个或多个流。codec 是解码器/编码器的名称或 copy(仅输出)以指示该流不被重新编码。如:ffmpeg -i INPUT -map 0 -c:v libx264 -c:a copy OUTPUT

-codec [:stream_specifier]编解码器(输入/输出,每个流)

同 -c

-t duration(输入/输出)

当用作输入选项(在-i之前)时,限制从输入文件读取的数据的持续时间。当用作输出选项时(在输出url之前),在持续时间到达持续时间之后停止输出。

-ss位置(输入/输出)

当用作输入选项时(在-i之前),在这个输入文件中寻找位置。 请注意,在大多数格式中,不可能精确搜索,因此ffmpeg将在位置之前寻找最近的搜索点。 当转码和-accurate_seek被启用时(默认),搜索点和位置之间的这个额外的分段将被解码和丢弃。 当进行流式复制或使用-noaccurate_seek时,它将被保留。当用作输出选项(在输出url之前)时,解码但丢弃输入,直到时间戳到达位置。

-frames [:stream_specifier] framecount(output,per-stream)

停止在帧计数帧之后写入流。

-filter [:stream_specifier] filtergraph(output,per-stream)

创建由filtergraph指定的过滤器图,并使用它来过滤流。filtergraph是应用于流的filtergraph的描述,并且必须具有相同类型的流的单个输入和单个输出。在过滤器图形中,输入与标签中的标签相关联,标签中的输出与标签相关联。有关filtergraph语法的更多信息,请参阅ffmpeg-filters手册。

录制命令

1 录制视频

ffmpeg -f gdigrab -i desktop -r 30 -s 1920x1080 -c:v libx264 -f mp4 -y out.mp4  录屏整个屏幕命令

ffmpeg:这是命令行工具的名称,调用 FFmpeg 程序。

-f gdigrab:指定输入的设备类型为 gdigrab。gdigrab 是一个视频捕获设备,用于在 Windows 系统上捕获屏幕内容。

-i desktop:指定输入源为桌面。desktop 是一个特殊的输入源,表示整个桌面屏幕。

-r 30:设置帧率为每秒 30 帧。这是视频播放时每秒钟显示的帧数,影响视频的流畅度。

-s 1920x1080:设置视频的分辨率为 1920x1080 像素。这是视频的宽度和高度,决定了视频的清晰度。

-c:v libx264:指定视频编码器为 libx264。libx264 是一个开源的 H.264 编码器,用于压缩视频数据。

-f mp4:指定输出文件的格式为 MP4。这是文件的封装格式,决定了文件的扩展名和兼容性。

-y:在覆盖输出文件时不提示确认。如果输出文件 out.mp4 已经存在,这个选项会直接覆盖它,而不会提示用户确认。

out.mp4:输出文件的名称。这是最终生成的视频文件,保存在当前目录下。

Ctrl + C停止录制。

我用vlc打开我录制的文件,就可以看到我录制的页面了。

2录制音频

使用ffmpeg查看设备索引号

Windows下:ffmpeg -list_devices true -f dshow -i dummy

macOs下:ffmpeg -f avfoundation -list_devices true -i ""

Linux下:v4l2-ctl --list-devices

我的是Windows,我列举的结果如下,报错结果是在列举设备的时候遇到的错误并不影响。

这样想要捕获视频,就可以用下面的命令:

ffmpeg -f dshow -i video="HP TrueVision HD Camera" output.mp4

或者用名称代替

ffmpeg -f dshow -i video="@device_pnp_\\?\usb#vid_30c9&pid_0064&mi_00#6&5040ce6&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global" output.mp4

捕获音频就可以用:

ffmpeg -f dshow -i audio="麦克风阵列 (适用于数字麦克风的英特尔® 智音技术)" output.wav 在输入的时候播放个声音录到电脑里

然后在工作目录下就会有输出文件

分解与复用命令

1 格式的转换 将mp4转为flv

ffmpeg -i out.mp4 -vcodec copy -acodec copy out.flv

-i 输入文件

-vcodec copy 视频编码处理方式

-acodec copy 音频编码处理方式

举例子,将工作目录下的一个mp4转换为mov

ffmpeg -i 1egg.mp4 -vcodec copy -acodec copy outmov.mov

使用ffplay outmov.mov命令可以播放

2 将视频抽取出来 不要音频

ffmpeg -i outmov.mov -an -vcodec copy outonlyv.h264

使用ffplay outonlyv.h264进行播放

3 将音频抽取出来 不要视频

ffmpeg -i outmov.mov -acodec copy -vn outonlya.aac

使用 ffplay outonlya.aac 进行播放

处理原始数据命令

音频的原始数据是pcm,视频的原始数据是yuv。

1 Ffmpeg提取yuv数据:

ffmpeg -i  input.mp4 -an -c:v rawvideo -pixel_format yuv420p out.yuv

-i:输入文件

-an:audio no  不处理音频

-c:v  rawvideo 将视频转化为原始数据

-pixel_format 像素格式

处理完后用ffplay out.yuv是无法播放的,因为原始数据没有宽高值

使用:ffplay -f rawvideo -pixel_format yuv420p -video_size 1920x1080  out.yuv播放out.yuv

2 ffmpeg提取pcm数据:

ffmpeg -i input.mp4 -f s16le -acodec pcm_s16le outpcm.pcm

-i input.mp4 指定输入文件。

-f s16le 指定输出格式为16位小端的PCM数据。

-acodec pcm_s16le 指定音频编解码器使用PCM 16位小端格式。

outpcm.pcm 是输出文件的名称。

使用ffplay播放ffplay -f s16le -ar 44100  outpcm.pcm

-f s16le 指定输入文件格式为16位小端的PCM数据。

-ar 44100 指定音频的采样率,例如44100Hz,这应该与原始音频文件的采样率相匹配。

滤镜命令

音视频的处理流程:

输入文件----(解封装)----编码数据包----(解码)----解码数据帧----(编码)----编码数据包----(封装)---输出文件

                                                                      

滤镜的处理流程

解码数据帧---------(filter过滤)----过滤后的数据帧------(编码)----编码数据包

1 缩放:ffmpeg -i input.mp4 -vf "scale=w:h" output.mp4

·-vf 表示滤镜选项 scale是滤镜命令

·w:宽  h:高

2 旋转:ffmpeg -i input.mp4 -vf "transpose=1" output.mp4

·transpose=1 顺时针旋转90° 0=顺时针270°  2=逆时针旋转90° 3=逆时针270°

3 模糊命令

ffmpeg -i 1egg.mp4 -vf "boxblur=10:10" output1.mp4

·Boxblur=r:p r模糊半径  p模糊程度

3 裁剪视频

ffmpeg -i input.mp4 -vf "crop=w:h:x:y" output.mp4

·  w:宽度

·  h:高度

·  x:裁剪区域左上角的横坐标

·  y:裁剪区域左上角的纵坐标

旋转视频

ffmpeg -i input.mp4 -vf "transpose=1" output.mp4

·  transpose=1:顺时针旋转 90 度

·  transpose=2:逆时针旋转 90 度

·  transpose=0:水平翻转

·  transpose=3:垂直翻转

裁剪与合并命令

裁剪与合并是一种特殊的滤镜命令

1 Windows下裁剪视频

ffmpeg -i input.mp4 -ss 00:00:02 -t 00:00:03 -filter:v "crop=200:150:50:20" cropvideo.mp4

-i 输入文件

-ss 设置视频开始的时间

-t 裁剪视频持续的时间

filter:v "crop=w:h:x:y" 指定裁剪区域 w是宽 h是高 x y是裁剪区域的左上角坐标

cropvideo.mp4  输出文件

 使用ffplay  cropvideo.mp4 播放视频

2 Windows下合并视频

·创建一个包含所有需要合并的视频文件列表的文本文件 格式如下

·使用命令合并

ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4

视频与图片互转命令

ffmpeg -i input_video.mp4 -ss 00:00:03 -vframes 1 output_image.jpg

-ss 开始时间

- vframe 1  提取一帧

ffmpeg -i input_video.mp4 -vf fps=0.5 output_%03d.jpg

fps=0.5  一秒钟0.5帧  即每2秒钟提取一帧

output_%03d.jpg 是输出文件的格式,%03d 会被替换为从001开始的数字

输出的图片就是这样的:

直播相关命令

1 推本地视频流到服务

ffmpeg -re -i input.mp4 -c copy -f  flv rtmp://server/live/streamName

·-re:按时间戳读取文件

·-c copy:使用原始编码

·-f flv:指定输出格式为FLV 后面跟的是一个rtmp服务地址

2 推桌面流到rtmp服务器

ffmpeg -f gdigrab -i desktop -f dshow -i audio="麦克风 (Realtek(R) Audio)" -r 20 -vcodec libx264 -preset ultrafast -acodec aac -ac 2 -ar 44100 -ab 128k -pix_fmt yuv420p -f flv "rtmp://live-push.bilivideo.com/live-bvc/?streamname=live_1805854332_79717982&key=123456789876543211472583695&schedule=rtmp&pflag=1"

·-f gdigrab:使用gdigrab进行屏幕捕获

·-i desktop:指定桌面作为输入

·-f dshow -i audio="麦克风 (Realtek(R) Audio)":指定音频输入设备

·-r 20:帧率为20帧/秒

·-vcodec libx264:使用H.264编码

·-preset ultrafast:编码预设为ultrafast

·-acodec aac:使用AAC编码音频

·-ac 2:音频通道数为2

·-ar 44100:音频采样率为44100Hz

·-ab 128k:音频比特率为128kbps

·-pix_fmt yuv420p:像素格式为yuv420p

·-f flv:输出格式为FLV 6

3 拉流并录制

ffmpeg -i rtmp://server/live/streamName -c copy output.flv

4 拉流并播放

ffplay rtmp://server/live/streamName

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

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

相关文章

基于SpringBoot+Vue的小区物业管理系统(带1w+文档)

基于SpringBootVue的小区物业管理系统(带1w文档) 基于SpringBootVue的小区物业管理系统(带1w文档) 小区物业管理系统采用B/S(Browser/Server)架构和MVC模型进行设计开发。在B/S架构下,用户在浏览器端进行使用,主要工作通过服务器端进行实现,用…

电脑缺少dll文件怎么解决?10款dll修复工具大盘点,赶紧收藏起来!

电脑缺少dll文件怎么解决?DLL(动态链接库)是一种重要文件,包含了一系列指令,用于运行几乎所有 Win10、Win8和 Win7的程序。如果Windows 操作系统中缺少DLL文件,您可能会无法启动所需的程序或应用。在 Win10…

【AndroidStudio】修改app名称、版本号、图标

文章目录 1. 修改app名称(AndroidManifest.xml-app_name字段)2. 修改app版本号和版本名称3. 修改app图标4. 修改app启动过渡图片 1. 修改app名称(AndroidManifest.xml-app_name字段) 2. 修改app版本号和版本名称 通常是app目录下的build.gradle文件找到“versionCode”和“ver…

基于域名+基于ip+基于端口的虚拟主机+上线商务系统

一、回顾 1.jdk环境 tomcat服务器需要jdk环境 版本对应 ​ tomcat9>jdk1.8 配置系统变量JAVA_HOME sed -i $aexport JAVA_HOME/usr/local/jdk22/ /etc/profile sed -i $aexport PATH$JAVA_HOME/bin:$PATH /etc/profile ​ source /etc/profile ​ java -version java…

LeetCode | 441 | 排列硬币 | 二分查找

🙋大家好!我是毛毛张! 🌈个人首页: 神马都会亿点点的毛毛张 今天分享的是LeetCode中一道标签为简单的算法题,本质是一道数学题 文章目录 1.题目描述2.题解2.1 公式解法2.2 暴力解法2.3 二分查找 LeetCode链接&#…

【 问题 】 AT32 F413CB 设置SRAM大小为64KB 导致Flash后64KB代码执行变慢 解决办法

背景 AT32的SRAM可以设置为16KB/32KB/64KB的不同大小,设置SRAM大小将导致Flash的部分空间的读写速度减缓,如下图: 这个问题看似不是很大,但是当运行一些很保证实时性,速度性的代码时,就会产生一些问题。 …

react-日期选择器封装

文件 import { useMemo, useState, useEffect } from "react" import dayjs, { Dayjs } from "dayjs" import "dayjs/locale/zh-cn" import "./App.css" dayjs.locale("zh-cn")function SimpleCalendar() {// 当前时间对象…

【数值计算方法】数值积分微分-python实现-p2

原文链接:https://www.cnblogs.com/aksoam/p/18279394 更多精彩,关注博客园主页,不断学习!不断进步! 我的主页 csdn很少看私信,有事请b站私信 博客园主页-发文字笔记-常用 有限元鹰的主页 内容&#xf…

基于ThinkPHP开发的校园跑腿社区小程序系统源码,包含前后端代码

基于ThinkPHP开发的校园跑腿社区小程序系统源码,包含前后端代码 最新独立版校园跑腿校园社区小程序系统源码 | 附教程 测试环境:NginxPHP7.2MySQL5.6 多校版本,多模块,适合跑腿,外卖,表白,二…

【Android】Kotlin 实现底部弹框日历组件

需求 如下图所示, 底部弹出日历组件 原生插件使用的有一个好处是可以根据你的系统语言切换插件内的语言, 刚好我们这个app面向的国外用户, 而产品对日历组件的日期显示有特别要求, 因此这无疑减少了我们切换语言的开发工作量 代码 1. custom_bottom_datepicker.xml <R…

Java小白入门到实战应用教程-权限修饰符

Java小白入门到实战应用教程-权限修饰符 前言 在前面的内容中我们其实已经接触到了权限修饰符&#xff1a;public 在java中权限修饰符除了public外&#xff0c;还有private、protected、默认权限。 权限修饰符可用来修饰类、成员变量、方法(函数)。 其中修饰类只能用publi…

springboot的表现层/控制层controller开发

第一步&#xff1a;新建文件和注入业务层对象 需要使用的注解&#xff1a; 第一个声明是restful风格开发 第二个是需要设置网页访问路径 RestController RequestMapping("/fuels")//http://localhost/fuels注入服务层对象&#xff1a; Autowiredprivate FuelServ…

晶振输出频率偏差过大的影响

晶体振荡器作为电子系统中的关键部件之一&#xff0c;其输出频率的准确性直接影响着整个系统的性能。无论是实时响应系统还是通信设备&#xff0c;都需要高度精确的频率源来维持其正常运作。本文将探讨晶振输出频率偏差过大会带来的影响&#xff0c;并简要介绍频率稳定性的概念…

【docker】下载docker 容器

1.下载地址&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/rhel/9/x86_64/stable/ 2.配置仓库拉取容器镜像 docker镜像 通过软件仓库下载但不安装 挂载并放入一个东西里面&#xff08;存放rpm软件包&#xff0c;并不是软件仓库&#xff09; 采集rpm数据的…

VSCode安装和配置

一、VScode下载和安装 下载 Visual Studio Code - Mac、Linux、Windows 下载完成之后傻瓜式安装即可 二、 左侧活动栏介绍 三、安装中文插件 先下载&#xff0c;在重启即可 四、配置C语言运行环境 1、Code Runner 记得勾选图中的两个选项 2、安装C/C插件 3、安装编译器MinGW…

cpp学习记录05:类和对象02

继承 面向对象的语法思想都差不多继承的好处就是方便 语法&#xff1a; class 子类 : 继承方式 父类 继承方式 公共继承&#xff1a;继承的内容权限不变 保护继承&#xff1a;继承的内容权限变为protected 私有继承&#xff1a;继承的内容权限变为private 这三类继承都不…

1000W长连接,如何建立和维护?千万用户IM 架构设计

1000W长连接&#xff0c;如何建立和维护&#xff1f;千万用户IM 架构设计 在40岁老架构师 尼恩的读者交流群(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格&#xff0c;遇到很多很重要的架构类/设计类…

哈夫曼树及哈夫曼编码

目录 一. 前言 二. 哈夫曼树的构造 三. 哈夫曼编码 一. 前言 在学习哈夫曼树之前&#xff0c;我们先了解几个基本概念。 1.路径&#xff1a;从树中一个结点到另一个结点之间的分支构成这两个结点之间的路径。 2.结点的路径长度&#xff1a;两结点间路径上的分支数。 3.树的…

Visual Studio 2022 安装步骤

一、官方下载 下载地址&#xff1a;https://visualstudio.microsoft.com/zh-hans/vs/ 下载完成&#xff0c;得到VisualStudioSetup.exe文件 二、安装 Visual Studio 2022 由于我有 Professional 版本的密钥&#xff0c;因此安装Professional 版本。 Visual Studio 2022 Profes…

libtorch学习历程(一):libtorch2.4.0+opencv4.10+Qt6安装

开发环境 Win11RTX4060CUDA12.1libtorch 2.4.0 ,CUDA12.1,release版VS2022opencv4.10版本Qt 6.6.3 软件下载 libtorch下载 直接去pytorch官网下载即可&#xff0c;根据需要下载realease与debug版。 而CUDA的版本则查看CUDA版本教程&#xff0c;来选择合适的。 debug版与r…