FFmpeg常用命令

文章目录

  • 一、 FFmpeg 音视频的处理流程
  • 二、FFmpeg 常用命令
    • 2.1、查看本机支持的采集设备
    • 2.2、 录制视频
      • 2.2.1、原始视频
      • 2.2.2、编码的视频
    • 2.3、录制音频:
      • 2.3.1、原始音频
      • 2.3.2、编码的音频
    • 2.4、录制音视频:
    • 2.5、文件格式转换:
    • 2.6、提取音频 :
    • 2.7、提取视频:
    • 2.8、合并音视频:
    • 2.9、视频裁剪
      • 时长
      • 分辨率
    • 2.10、 倍速
      • 视频倍速
      • 音频倍速
      • 音视频倍速
    • 2.11、[视频转图片](https://www.ffmpeg.org/ffmpeg-formats.html#image2_002c-image2pipe):
    • 2.12、[图片转视频](https://www.ffmpeg.org/ffmpeg-formats.html#image2-1):
    • 2.13、推流:
      • 文件推流:
      • 摄像头推流:
      • 桌面屏幕推流:
    • 2.14、拉流:
  • 三、FFprobe 常用命令
    • 查看格式
    • 查看帧信息

以下命令和参数都可以在 官方文档,找到解释

一、 FFmpeg 音视频的处理流程

在这里插入图片描述

  • demuxer :把输入文件INPUT.mkv 经过demuxer解封装,得到stream0 (经过encoder的音频数据,例如:aac) 和 stream1 (经过encoder的视频数据,例如:h264)

  • decoder:视频 H264 -> YUV、音频 opus/aac-> pcm(上图没有对音频进行decode)

  • encoder,视频 YUV -> H264,音频 pcm -> opus/aac(上图没有对音频进行encode)

  • muxer: 把编码后的opus,h264 封装为OUTPUT.mp4

  • 上图的audio没有经过解码和编码,通过streamcopy的方式,保存到了输出文件,这样速度更快。

  • 如果需要使用Filtergraphs (ffmpeg-filters),必须要经过 decoder,因为Filtergraphs是对原始数据进行处理。如下图:

在这里插入图片描述

二、FFmpeg 常用命令

可通过ffmpeg -h 查看 查询基本信息的参数

ffmpeg的命令格式

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

Each input or output can, in principle, contain any number of elementary streams of different types (video/audio/subtitle/attachment/data), though the allowed stream counts and/or types may be limited by the container format. Selecting which streams from which inputs will go into which output is either done automatically or with the -map option (see the Stream selection chapter).

To refer to inputs/outputs in options, you must use their indices (0-based). E.g. the first input is 0, the second is 1, etc. Similarly, streams within an input/output are referred to by their indices. E.g. 2:3 refers to the fourth stream in the third input or output. Also see the Stream specifiers chapter.

2.1、查看本机支持的采集设备

查看当前机器的输入输出设备:

ffmpeg -devices 

该命令在mac的输出,有一项是: AVFoundation
AVFoundation is the currently recommended framework by Apple for streamgrabbing on OSX >= 10.7 as well as on iOS.

Print the list of AVFoundation supported devices and exit:

ffmpeg -f avfoundation -list_devices true -i ""

查看编解码器的信息,例如:支持的像素格式

ffmpeg -h encoder=h264_videotoolbox

在这里插入图片描述

2.2、 录制视频

2.2.1、原始视频

ffmpeg -f avfoundation -i "1" -video_size 1280x720 -r 30 out.yuv

-i “1” 表示video的选择是 从AVFoundation支持的video设备中,索引1 的video设备,具体是指桌面
-video_size 1280x720 是无效的,从设备输入,不支持改变分辨率
-r 30 此例子中是 指定输出的帧率为30fps

播放yuv 原始视频时,需要指定分辨率和像素格式,这些信息,在录制时会输出

ffplay -pixel_format uyvy422 -video_size 5120x2880 out.yuv

2.2.2、编码的视频

 ffmpeg -f avfoundation  -i "1"  out.mp4

2.3、录制音频:

2.3.1、原始音频

ffmpeg -f avfoundation -i :0 -ar 44100 -f s16le out.pcm

-i :0 表示audio的选择是 AVFoundation支持的audio设备中,索引0的设备,具体是指桌面

-ar 44100 此处指设置输出文件的采样率

-f s16le 指定原始音频的采样格式

播放原始音频,需要指定采样格式:

ffplay -f s16le  out.pcm

2.3.2、编码的音频

ffmpeg -f avfoundation -i :0  out.wav

2.4、录制音视频:

ffmpeg -f avfoundation -i 1:0  out.mp4

在这里插入图片描述
红框中,视频解码器 rawvideo,编码器mpeg4,使用命令ffmpeg -encoders 可以找到该编码器

对音频、视频指定编码器

ffmpeg -f avfoundation -i 1:0 -c:v h264 -c:a aac  -ac 2 -s 3840x2160 out.mp4

2.5、文件格式转换:

ffmpeg -i input.mp4 -c:a copy -c:v copy output.flv

-i input.mp4 输入文件input.mp4
-c:a copy 把解封装后的已编码音频数据,拷贝到输出文件
-c:v copy 把解封装后的已编码视频数据,拷贝到输出文件
output.flv 输出文件output.flv

转GIF、flv、wav等格式, 只需要修改命令中的输出名后缀,例如:output1.mp4 改为 output.gif 。wav 没有视频,只有音频,ffmpeg会自动识别后缀,并处理

2.6、提取音频 :

ffmpeg -i input.mp4 -c:a copy -vn  output.aac

-c:a copy 音频编码器,只拷贝。就是把 input.mp4 经过demuxer后,得到的编码的音频文件,直接拷贝,不用解码再编码。

-vn As an output option, disables video recording

2.7、提取视频:

ffmpeg -i input.mp4 -c:v copy -an  output.h264

提取YUV数据

ffmpeg -i input.mp4 -an  -pixel_format yuv420p out.yuv

-c:v rawvideo 指定视频编码器,rawvideo 可以通过ffmpeg -encoders 找到

2.8、合并音视频:

ffmpeg -i output.aac -i output.h264 -c:v copy -c:a copy  output.mp4

2.9、视频裁剪

时长

从1s开始,裁剪5s

ffmpeg -ss 00:00:01.000  -t 5 -i input1.mp4  output1.mp4

裁剪最后5s,不能和-ss同时用

ffmpeg  -sseof -5 -i input1.mp4  output1-2.mp4

分辨率

改变视频分辨率为宽320、高240

ffmpeg -i input.mp4 -s 320x240 output.mp4

改变视频分辨率为宽480、高度为等比缩放,像素数可被1整除

ffmpeg -i input.mp4  -filter:v "scale=480:-1,fps=10" output.mp4

scale=480:-1 宽度为480px,高度为等比缩放,像素数可被1整除
fps=10 输出帧率是10 frame per second

2.10、 倍速

视频倍速

过滤器setpts、asetpts
使用过滤器setpts,倍速播放视频

ffmpeg -i input1.mp4  -filter:v "setpts=0.2*PTS" output1-3.mp4

视频倍速播放,时长缩短,播放完就黑屏。音频播放也不太正常,中间有一段没有声音。可通过参数 -an 过滤掉音频。

过滤器asetpts 不能改变音频的速度,只能改变音频的pts,缩短整体的播放时长

ffmpeg -i input1.mp4 -vn -filter:a "asetpts=0.2*PTS" output1-3.mp4

音频倍速

使用过滤器atempo 倍速播放音频

ffmpeg -i input1.mp4  -filter:a "atempo=2" output1.mp4 

音频会加速2倍播放,时长缩短到一半, 视频正常播放,也就是说后半段视频没有音频

音视频倍速

根据map中的关于filtergraph的用法,实现音视频倍速播放

ffmpeg -i test.mp4 -filter_complex "[0:v]setpts=0.5*PTS[v];[0:a]atempo=2.0[a]" -map "[v]" -map "[a]" output.mp4

2.11、视频转图片:

从input.mp4 提取一系列图片

ffmpeg -i input.mp4 -r 30 -f image2 foo-%03d.jpeg

-r 30 fps 是30,表示一秒生成30张图片
foo-%03d.jpeg 文件名格式, 会生成 foo-001.jpeg、foo-002.jpeg … 等

2.12、图片转视频:

用一系列图片 生成一个mp4文件

ffmpeg -r 30 -i foo-%05d.jpeg output.mp4

2.13、推流:

文件推流:

ffmpeg -loglevel debug -re -stream_loop -1 -i input3.mp4 -c:v h264  -c:a aac  -ac 2 -g 30 -b:v 1500k -b:a 128k -f flv 'rtmp://xxxxx'

-re 通过限制输入的读取速度,确保推流时以与文件帧率一致的速度读取。强制 FFmpeg 模拟文件“实时播放”的行为。
如果不加 -re,FFmpeg 会以最快速度读取输入文件。这样推流的速度会远超正常播放速度,导致:
• 流媒体服务器缓冲过载。
• 推流失败,甚至崩溃。
-stream_loop -1 循环播放

-b:v 视频码率
-b:a 音频码率

问题:
推流失败, 检查流的编码格式是否符合rtmp服务器的接收格式, 通过-c:v 指定视频编码器
推流成功,可以看到画面,但是没有声音。 通过 -c:a 指定音频编码器

摄像头推流:

ffmpeg  -f avfoundation -r 30 -i 0:0   -c:v h264  -c:a aac  -ac 2 -g 30 -b:v 1500k -b:a 128k -f flv 'rtmp://xxxxxxx'

如果在输入参数中没有 -r 30, 会报如下错误。高手指点一下,为什么会出现 framerate (29.970030)
在这里插入图片描述

桌面屏幕推流:

ffmpeg  -f avfoundation   -r 30  -i 1:0  -c:v h264   -c:a aac  -ac 2 -g 30  -b:v 1500k  -b:a 128k  -s 3840x2160  -f flv 'rtmp://xxxxxxx'

-s 3840x2160 设置输出的分辨率,如果不设置默认是5120x2880,会报错Error while opening encoder - maybe incorrect parameters such as bit_rate, rate, width or height.

在这里插入图片描述

2.14、拉流:

拉流播放:

ffplay rtmp://xxxxxx

拉流并保存文件

ffmpeg -i rtmp://xxxxxx  -c copy dump.flv

三、FFprobe 常用命令

查看格式

ffprobe -v error -show_format -show_streams input1.mp4

查看帧信息

ffprobe -show_frames -select_streams v input1.mp4 | head -n 50

查看input1.mp4的视频的帧信息的前50行

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

30天开发操作系统 第 17 天 -- 命令行窗口

前言 今天一开始,请大家先回忆一下任务A的情形。在harib13e中,任务A下面的LEVEL中有任务因此FIFO为空时我们可以让任务A进入休眠状态。那么,如果我们并未启动任务B0~ B0~ B2, B2的话,任务A又将会如何呢? 首先&#xf…

OpenEuler学习笔记(九):安装 OpenEuler后配置和优化

安装OpenEuler后,可以从系统基础设置、网络配置、性能优化等方面进行配置和优化,以下是具体内容: 系统基础设置 更新系统:以root用户登录系统后,在终端中执行sudo yum update命令,对系统进行更新&#x…

网络安全 | 入侵检测系统(IDS)与入侵防御系统(IPS):如何识别并阻止威胁

网络安全 | 入侵检测系统(IDS)与入侵防御系统(IPS):如何识别并阻止威胁 一、前言二、入侵检测系统(IDS)2.1 IDS 的工作原理2.2 IDS 的技术类型2.3 IDS 的部署方式 三、入侵防御系统(…

数学规划问题2 .有代码(非线性规划模型,最大最小化模型,多目标规划模型)

非线性规划模型 FIrst:转化为标准型 在matlab中求非线性规划的函数 练习题: 典型例题: 最大最小化模型 核心思想: matlab的模型求解 经典例题: 多目标规划模型 基本概念 求解思路: 模型构建步骤 经典例题: 非线性规划模型 非线性规划(Nonl…

2025年最新深度学习环境搭建:Win11+ cuDNN + CUDA + Pytorch +深度学习环境配置保姆级教程

本文目录 一、查看驱动版本1.1 查看显卡驱动1.2 显卡驱动和CUDA对应版本1.3 Pytorch和Python对应的版本1.4 Pytorch和CUDA对应的版本 二、安装CUDA三、安装cuDANN四、安装pytorch五、验证是否安装成功 一、查看驱动版本 1.1 查看显卡驱动 输入命令nvidia-smi可以查看对应的驱…

Transformer详解:Attention机制原理

前言 Hello,大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者,本系列文章是作者参加DataWhale2025年1月份学习赛,旨在讲解Transformer模型的理论和实践。😲 本文将详细探讨Attention机制的原理…

npm install 报错:Command failed: git checkout 2.2.0-c

[TOC](npm install 报错:Command failed: git checkout 2.2.0-c) npm install 报错:Command failed: git checkout 2.2.0-c export NODE_HOME/usr/local/node-v14.14.0-linux-x64 npm config set registry https://registry.npmmirror.com 使用如上环…

从对等通信到万维网:通信模型变迁与拥塞求解

Leonard Kleinrock:我很清楚用不了多久这些计算机就会有相互通信的需求,但如何协调处理这些分时系统概率性产生的分组(不同于电路交换),却没有有效的方法,我有处理该问题的方法,因此对于我的博士研究,我决定…

【Vim Masterclass 笔记21】S09L39:Vim 设置与 vimrc 文件的用法示例(二)

文章目录 S09L39 Vim Settings and the Vimrc File - Part 21 Vim 的配色方案与 color 命令2 map 命令3 示例:用 map 命令快速生成 HTML 代码片段4 Vim 中的 Leader 键5 用 mkvimrc 命令自动生成配置文件 写在前面 本篇为 Vim 自定义配置的第二部分。当中的每个知识…

Debian 上安装PHP

1、安装软件源拓展工具 apt -y install software-properties-common apt-transport-https lsb-release ca-certificates 2、添加 Ondřej Sur 的 PHP PPA 源,需要按一次回车: add-apt-repository ppa:ondrej/php 3、更新软件源缓存: apt-g…

docker Ubuntu实战

目录 Ubuntu系统环境说明 一、如何安装docker 二、发布.netcore应用到docker中 Ubuntu系统环境说明 cat /etc/os-release PRETTY_NAME"Ubuntu 22.04.5 LTS" NAME"Ubuntu" VERSION_ID"22.04" VERSION"22.04.5 LTS (Jammy Jellyfish)&quo…

Android OpenGL(六) 纹理

纹理 纹理是一个2D图片(甚至也有1D和3D的纹理), 它可以用来添加物体的细节;你可以想象纹理是一张绘有砖块的纸,无缝折叠贴合到你的3D的 房子上,这样你的房子看起来就像有砖墙外表了 纹理环绕方式 纹理坐…

C# 网络协议第三方库Protobuf的使用

为什么要使用二进制数据 通常我们写一个简单的网络通讯软件可能使用的最多的是字符串类型,比较简单,例如发送格式为(head)19|Msg:Heart|100,x,y,z…,在接收端会解析收到的socket数据。 这样通常是完全可行的,但是随着数据量变大&…

微软Win10 RP 19045.5435(KB5050081)预览版发布!

系统之家1月20日最新报道,微软面向Release Preview频道的Windows Insider项目成员,发布了适用于Windows10 22H2版本的KB5050081更新,更新后系统版本号将升至19045.5435。本次更新增加了对GB18030-2022标准的支持,同时新版日历将为…

零售业革命:改变行业的顶级物联网用例

mpro5 产品负责人Ruby Whipp表示,技术进步持续重塑零售业,其中物联网(IoT)正引领这一变革潮流。 研究表明,零售商们正在采用物联网解决方案,以提升运营效率并改善顾客体验。这些技术能够监控运营的各个方面…

ASP .NET Core 学习(.NET9)部署(一)windows

在windows部署 ASP .NET Core 的时候IIS是不二选择 一、IIS安装 不论是在window7 、w10还是Windows Server,都是十分简单的,下面以Windows10为例 打开控制面版—程序—启用或关闭Windows功能 勾选图中的两项,其中的子项看需求自行勾选&am…

【组件库】使用Vue2+AntV X6+ElementUI 实现拖拽配置自定义vue节点

先来看看实现效果: 【组件库】使用 AntV X6 ElementUI 实现拖拽配置自定义 Vue 节点 在现代前端开发中,流程图和可视化编辑器的需求日益增加。AntV X6 是一个强大的图形化框架,支持丰富的图形操作和自定义功能。结合 ElementUI,…

docker 部署confluence

1.安装docker的过程就不说了。 2.下载镜像。 docker pull cptactionhank/atlassian-confluence:7.4.0 docker images 3.下载pojie 包。 https://download.csdn.net/download/liudongyang123/90285042https://download.csdn.net/download/liudongyang123/90285042https://do…

C++ 二叉搜索树

目录 概念 性能分析 二叉搜索树的插入 二叉树的查找 二叉树的前序遍历 二叉搜索树的删除(重点) 完整代码 key与value的使用 概念 对于一个二叉搜索树 若它的左子树不为空,则左子树上所有的节点的值都小于等于根节点的值若它的右子树不为空…

重生之我在异世界学编程之C语言:深入指针篇(上)

大家好,这里是小编的博客频道 小编的博客:就爱学编程 很高兴在CSDN这个大家庭与大家相识,希望能在这里与大家共同进步,共同收获更好的自己!!! 本文目录 引言正文(1)内置数…