FFmpeg命令实战(上)

news2024/10/6 2:20:13

标题

  • 1.FFmpeg命令行环境搭建
  • 2.ffmpeg,ffplay和ffprobe的区别
  • 3.ffmpeg处理流程
  • 4.ffmpeg命令分类查询
  • 5.ffplay播放控制
  • 6.ffplay命令选项

1.FFmpeg命令行环境搭建

1.到达FFmpeg的github,选择下载需要的版本,这里以windows举例。
在这里插入图片描述
这里有两个压缩包,ffmpeg-master-latest-win64-gpl-shared这个里面包含了ffmpeg的lib文件,可以进行ffmpeg的二次开发,ffmpeg-master-latest-win64-gpl只包含了ffmpeg的工具。
我们这里使用shared的版本,我们下载打开点击bin目录,bin目录有3个可执行文件,分别是ffmpeg,ffplay和ffprobe,然后还有其运行需要使用到的动态库。
在这里插入图片描述
我们将三个可以执行文件放入到C:\Windows路径下面,这样就可以通过命令行直接访问了,然后将其余的动态库放入到C:\Windows\SysWOW64,这个文件夹是用来存放windows应用程序的动态库的。
然后打开命令行cmd,分别输入ffmpeg,ffplay和ffprobe都会显示对应的版本号,这样就安装完成了。

2.ffmpeg,ffplay和ffprobe的区别

ffmpeg就是一个剪辑工具,ffplay就是一个播放器,而ffprobe就是一个多媒体的分析器。
ffmpeg查看帮助文档:

基本信息:ffmpeg -h
高级信息:ffmpeg -h long
所有信息:ffmpeg -h full
将输出输出信息写入文件:ffmpeg -h > 文件名.log

ffplay查看帮助文档:

所有信息:ffplay -h

ffprobe查看帮助文档:

所有信息:ffprobe -h

windows搜索输出信息指令是findstr和Linux的grep类似。

ffmpeg -h full | findstr 264

3.ffmpeg处理流程

在这里插入图片描述
我们通过一行命令来了解流程:

ffmpeg -i test_1920x1080.mp4 -acodec copy -vcodec libx265 -s 1280x720 test_1280x720.mkv

  • -i 就是输入的文件,得到编码数据包,可能分离出视频和音频的数据包。
  • 然后会对数据包解码得到数据帧,这一步就是我们处理数据内容的关键一步,比如处理分辨率,帧率,添加水印等,我们这里是将分辨率从1920x1080转化到1280x720
  • 然后处理结束会对数据帧进行编码得到数据包,acodec是指定音频的编码格式,vcodec是指定视频编码格式的,这里使用的是acodec copy就是使用原来的音频编码格式,也就是说不需要重新编码,而vcodec libx265是需要将原来的视频流重新编码成libx265的编码格式。
  • 最后将数据包合并得到文件。

在这里插入图片描述

4.ffmpeg命令分类查询

在这里插入图片描述

  • ffmpeg -format显示会有D和E,显示D就是解复用器支持该格式,E就是复用器支持该格式
  • ffmpeg -devices是列出 FFmpeg 支持的所有可用设备(即输入设备和输出设备)
  • ffmpeg -bsfs 是用于列出 FFmpeg 支持的所有比特流过滤器。
    比特流过滤器(Bitstream Filters)是在解码或编码音视频流时对数据进行处理的一种功能模块。比特流过滤器可以用于修改、编解码、加密、解密等操作,常见的比特流过滤器包括 H.264 的 CABAC 转换、H.264 的 SEI 数据插入、AAC 的 ADTS 转换等。
  • bsfs和codecs之间关系,codecs只是一种算法,将数据流封装成对应的格式,比如H.264,但是他并不是用于转换格式的,只是用来封装,而bsfs是用于实际转换数据格式的。
    在这里插入图片描述
  • ffmpeg -protocols 用于列出 FFmpeg 支持的所有协议,也就是ffmpeg可以通过显示的一些协议来访问数据,比如http 协议用于通过 HTTP 访问网络资源,file 协议用于访问本地文件系统资源,pipe 协议用于在进程间传输数据等。
  • ffmpeg -filters 用于列出 FFmpeg 支持的所有可用的过滤器。
    在 FFmpeg 中,过滤器是一种用于在音视频处理过程中对音视频数据进行操作的工具。过滤器可以用于裁剪、调整音视频流的大小、调整音视频流的编解码参数、添加水印、添加字幕等处理。

5.ffplay播放控制

在这里插入图片描述

6.ffplay命令选项

  1. -x width 打开播放器的宽度

  2. -y height 打开播放器的高度

  3. -video_size size 帧尺寸 设置显示帧存储(WxH格式),仅适用于类似原始YUV等没有包含帧大小(WxH)的视频。
    比如:
    ffplay -pixel_format yuv420p -video_size 320x240 -framerate 5 yuv420p_320x240.yuv

  4. -pixel_format format 格式设置像素格式。

  5. -fs 以全屏打开

  6. -an 不播放声音

  7. -vn 不播放视频

  8. -sn 不显示字幕

  9. -ss pos 选择一开始的进度条,pos可以替换的格式有:5(5秒),5:5(5分5秒),5:5:5(5小时5分5秒)

  10. -t duration 设置播放视频/音频长度,时间单位如 -ss选项

  11. -bytes 按字节进行定位拖动(0=off 1=on -1=auto)。

  12. -seek_interval interval 自定义左/右键定位拖动间隔(以秒为单位),默认值为10秒(代码没有看到实现)

  13. -nodisp 关闭图形化显示窗口,视频将不显示

  14. -noborder 无边框窗口

  15. volume vol 设置起始音量。音量范围[0 ~100]

  16. -f fmt 强制使用设置的格式进行解析。比如-f s16le

  17. -window_title title 设置窗口标题(默认为输入文件名)

  18. -loop number 设置播放循环次数

  19. -showmode mode 设置显示模式,可用的模式值:0 显示视频,1 显示音频波形,2 显示音频频谱。缺省为0,如果视频不存在则自动选择2

  20. -vf filtergraph 设置视频滤镜

  21. -af filtergraph 设置音频滤镜

  22. -stats 打印多个回放统计信息,包括显示流持续时间,编解码器参数,流中的当前位置,以及音频/视频同步差值。默认情况下处于启用状态,要显式禁用它则需要指定-nostats。。

  23. -fast 非标准化规范的多媒体兼容优化。

  24. -genpts 生成pts。

  25. -sync type 同步类型 将主时钟设置为audio(type=audio),video(type=video)或external(type=ext),默认是audio为主时钟。

  26. -ast audio_stream_specifier 指定音频流索引,比如-ast 3,播放流索引为3的音频流

  27. -vst video_stream_specifier指定视频流索引,比如-vst 4,播放流索引为4的视频流

  28. -sst subtitle_stream_specifier 指定字幕流索引,比如-sst 5,播放流索引为5的字幕流

  29. -autoexit 视频播放完毕后退出。

  30. -exitonkeydown 键盘按下任何键退出播放

  31. -exitonmousedown 鼠标按下任何键退出播放

  32. -codec:media_specifier codec_name 强制使用设置的多媒体解码器,media_specifier可用值为a(音频), v(视频)和s字幕。比如-codec:v h264_qsv 强制视频采用h264_qsv解码

  33. -acodec codec_name 强制使用设置的音频解码器进行音频解码

  34. -vcodec codec_name 强制使用设置的视频解码器进行视频解码

  35. -scodec codec_name 强制使用设置的字幕解码器进行字幕解码

  36. -autorotate 根据文件元数据自动旋转视频。值为0或1 ,默认为1。

  37. -framedrop 如果视频不同步则丢弃视频帧。当主时钟非视频时钟时默认开启。若需禁用则使用 -noframedrop

  38. -infbuf 不限制输入缓冲区大小。尽可能快地从输入中读取尽可能多的数据。播放实时流时默认启用,如果未及时读取数据,则可能会丢弃数据。此选项,将不限制缓冲区的大小。若需禁用则使用-noinfbu

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

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

相关文章

Flutter 笔记 | Flutter Native 插件开发 (Android)

oh, 我亲爱的朋友,很高兴你来到了这里!既然来了,那么就让我们在这篇糟糕的烂文章中,一起来学习一下,如何在一个糟糕的 Flutter 混合应用中开发一个糟糕的 Android Native 烂插件吧!😑 首先&…

研报精选230519

目录 【行业230519头豹研究院】2023年中国产后康复设备行业词条报告 【行业230519山西证券】有色金属行业周报:锂价快速回升,释放锂电行业复苏信号 【行业230519头豹研究院】2023年中国氢能重卡行业词条报告 【个股230519西南证券_森麒麟】腾飞的高端轮胎…

网页外包开发的测试方法及工具

网页开发的软件项目完成代码开发后需要进行全面的测试,这是正规的软件公司开发软件项目必须要做的工作,这方面有不少好用的工具供大家使用。今天和大家分享这方面的知识,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件…

Elasticsearch实战之处理邮件附件进行进行内容全文检索

目录 一、系统环境和软件要求 二、软件说明 三、定义文本抽取管道(pipeline) 四、建立索引设置文档结构映射 五、插入文档 六、查询文档 需求是将本地邮件内容以及PDF,EXCEL,WORD等附件内容进行处理,保存到ES数据库,实现邮件…

【I2C 通信的工作原理是什么?Arduino 和 I2C 教程】

【I2C 通信的工作原理是什么?Arduino 和 I2C 教程】 1. 概述2. I2C 的工作原理3. I2C 协议4. 例程5. Arduino I2C 代码在本教程中,我们将了解 I2C 通信协议的工作原理,我们还将使用 Arduino 板和使用该协议的传感器制作一个实际示例。您可以观看以下视频或阅读下面的书面教程…

chatgpt赋能Python-python3虚拟环境搭建

Python3虚拟环境搭建:介绍和步骤 Python是一门非常强大的编程语言,因此在许多不同类型的项目中都广泛使用。但是,不同项目可能需要使用不同版本的Python库和依赖项。这就是使用Python的虚拟环境的重要性,可以避免不同项目之间的冲…

「实验记录」MIT 6.824 Raft Lab2B Log Replication

#Lab2B - Log Replication I. SourceII. My CodeIII. MotivationIV. SolutionS1 - leader上任即初始化S2 - leader发送AppendEntriesS3 - follower接收AppendEntriesS4 - leader收到AppendEntries 回信S5 - candidate选举限制S6 - defs.go约定俗成和实现Start() V. Result I. S…

yolov7结构改进策略解析

论文链接:https://arxiv.org/abs/2207.02696 代码链接:https://github.com/WongKinYiu/yolov7 具体分割如何训练,请参考我之前的博客论文: https://blog.csdn.net/qq_41920323/article/details/129464115?spm1001.2014.3001.5502…

联用多个插件可以让 GPT-4 的能力更加强大,实现更加复杂的操作

🚀 联用多个插件可以让 GPT-4 的能力更加强大,实现更加复杂的操作。 联用多个插件可以让 GPT-4 的能力更加强大,实现更加复杂的操作。 不过,使用插件和联网功能也有一些要注意的地方。 首先是安全性问题,特别是像购…

Burpsuite模块—-Intruder模块详解

一、简介 Burp Intruder是一个强大的工具,用于自动对Web应用程序自定义的攻击,Burp Intruder 是高度可配置的,并被用来在广范围内进行自动化攻击。你可以使用 Burp Intruder 方便地执行许多任务,包括枚举标识符,获取有…

Kali-linux密码在线破解

为了使用户能成功登录到目标系统,所以需要获取一个正确的密码。在Kali中,在线破解密码的工具很多,其中最常用的两款分别是Hydra和Medusa。本节将介绍使用Hydra和Medusa工具实现密码在线破解。 8.1.1 Hydra工具 Hydra是一个相当强大的暴力密…

浅谈分布式事物解决方案

目录 背景 1 XA规范分布式事物方案 1.1 俩阶段提交(2PC) 1.2 三阶段提交(3PC) 2 补偿事务(TCC) 3 可靠消息最终一致性方案 4 可靠消息最终一致性方案 5 SAGA事物 6 Seata AT 模式 背景 分布式事务出现…

使用Git-lfs上传超过100m的大文件到GitHub

文章目录 1. 安装 git-lfs2. 在Git中安装git-ifs3. 找到工程中的所有大文件4.执行完这行命令,项目目录下会生成文件 .gitattributes,此时Git push将 .gitattributes 提交到远程仓库。 5. 需要注意的事 1. 安装 git-lfs Git Large File Storage | Git La…

Day44【动态规划】完全背包、518.零钱兑换 II、377.组合总和 Ⅳ

完全背包 文章讲解 视频讲解 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将物品装入背包里的最大价值 完全背包和01背包问题…

F103ZET6使用FSMC和HAL点亮ILI9341

前言 将标准库下的ILI9341驱动移植到使用CubeMX生成的HAL库环境,并成功运行。 一、STM32CubeMX生成框架 (一)配置RCC、SYS和时钟树 参见常规配置。 (二)配置FSMC 1、原理图引脚定义 LCD8080接口使用的引脚主要分…

【数据结构】线性表 ⑤ ( 双循环链表 | 双循环链表特点 | 双循环链表插入操作处理 | 代码示例 - 使用 Java 实现 双循环链表 )

文章目录 一、双循环链表二、双循环链表特点三、双循环链表插入操作处理四、代码示例 - 使用 Java 实现 双循环链表 一、双循环链表 " 双循环链表 " 是 在 单循环链表 的基础上 , 在每个 节点 中 , 新增一个 指针 , 指向 该节点 的 前驱节点 ; 双向循环链表 每个 节…

头歌计算机组成原理实验—运算器设计(8)第8关:乘法流水线设计

第8关:乘法流水线设计 实验目的 学生掌握运算流水线基本概念,理解将复杂运算步骤细分成子过程的思想,能够实现简单的乘法运算流水线。 视频讲解 实验内容 在 Logisim 中打开 alu.circ 文件,在6位补码阵列乘法器中利用5位阵列乘…

React学习笔记三-模块与组件的理解

此文章是本人在学习React的时候,写下的学习笔记,在此纪录和分享。此为第三篇,主要介绍react中的模块与组件。 目录 1.模块与组件 1.1模块 1.2组件 1.3模块化 1.4组件化 2.React面向组件编程 2.1函数式组件 2.2类组件 2.2.1类知识的复…

防火墙(一)

防火墙知识 一、iptables概述二、四表五链四表五链iptables防火墙的使用方法 三、示例操作四、规则的匹配通用匹配:隐含匹配:端口匹配: --sport源端口、--dport目的端口TCP标志位匹配:ICMP类型匹配:显示匹配&#xff1…

Windows 安装MySQL 8.0 超详细教程(mysql 8.0.30)

目录 一、删除以前安装的MySQL服务 1、查找以前是否装有mysql 2、删除mysql (1)停止mysql服务: (2)删除mysql服务: 3.检查mysql是否已删除 二、下载mysql二进制包 三、解压二进制包,编辑…