当前位置: 首页 > news >正文

FFPlay命令全集合

FFPlay是以FFmpeg框架为基础,外加渲染音视频的库libSDL构建的媒体文件播放器。

ffplay工具下载并播放视频,可以辅助卡看流信息。

官网下载地址:http://ffmpeg.org/download.html#build-windows

下载build好的exe程序:

此处下载的是:ffmpeg-20200403-52523b6-win64-static.zip

下载后解压,ffplay.exe就在文件夹bin中

在这里插入图片描述

1 FFPlay

打开命令窗口,进入ffplay.exe的目录中:或者把bin添加到环境变量

命令参考:https://www.cnblogs.com/renhui/p/8458802.html

格式:ffplay [选项] [‘输入文件’] 参考以上链接说明

1.1 播放视频

ffplay http://mp4.res.xxxx.com/mediafiles/wiad_creative/532/1469975702.mp4

可以本地也可以网络流。
在这里插入图片描述

播放网络流:

ffplay rtsp://xxxxxxxxxxxx进行播放

1.2 播放音频

播放mp3

ffplay shy.mp3

播放pcm

ffplay -ar 44100 -ac 1 -f s16le -i xxx.pcm

各个参数:
-ar 表示采样率
-ac 表示音频通道数
单声道是 1,Android 中为 AudioFormat.CHANNEL_IN_MONO
双声道是 2,Android 中为 AudioFormat.CHANNEL_IN_STEREO
-f 表示 pcm 格式,sample_fmts + le(小端)或者 be(大端)
sample_fmts可以通过ffplay -sample_fmts来查询
-i 表示输入文件,这里就是 pcm 文件

1.3 播放日志等级设置

loglevel参数控制:
ffplay -loglevel trace http://mp4.res.xxx.com/mediafiles/wiad_creative/532/1469975702.mp4
想要更详细看到日志,可以看到请求头和网络包
在这里插入图片描述
对应源码定义类型:
在这里插入图片描述
每个级别定义的数值代表了严重程度,数值越小代表越严重。
默认的级别是AV_LOG_INFO。
此外,还有一个级别不输出任何信息,即AV_LOG_QUIET

1.4 ffplay音画同步

ffplay也是一个视频播放器,所以不得不提出来的一个问题是:音画同步。ffplay的音画同步的实现方式其实有三种,分别是:以音频为主时间轴作为同步源,以视频为主时间轴作为同步源,以外部时钟为主时间轴作为同步源。

首先需要说明的是,播放器接收到的视频帧或者音频帧,内部都是会有时间戳(PTS时钟)来标识它实际应该在什么时刻展示,实际的对齐策略如下:

比较视频当前的播放时间和音频当前的播放时间,如果视频播放过快,则通过加大延迟或者重复播放来降低视频播放速度,如果视频播放满了,则通过减小延迟或者丢帧来追赶音频播放的时间点。

关键就在于音视频时间的比较和延迟的计算,当前在比较的过程中会设置一个阈值,如果超过预设的阈值就应该作出调整(丢帧或者重复渲染),这就是整个对齐策略。

在使用ffplay的时候,我们可以明确的指定使用那种对齐方式,比如:

ffplay pm.mp4 -sync audio

上面这个命令显式的指定了使用以音频为基准进行音视频同步的方式播放视频文件,当然这也是ffplay的默认播放设置。

ffplay pm.mp4 -sync video

上面这个命令显式的指定了使用以视频为基准进行音视频同步的方式播放视频文件。

ffplay pm.mp4 -sync ext

上面这个命令显式的指定了使用外部时钟为基准进行音视频同步的方式播放视频文件

2 FFMpeg命令

主要是视频流转换输出用
命令格式:
ffmpeg -i [输入文件名] [参数选项] -f [格式] [输出文件]
ffmpeg [[options][`-i’ input_file]]… {[options] output_file}…
1、参数选项:
(1) -an: 去掉音频
(2) -acodec: 音频选项, 一般后面加copy表示拷贝
(3) -vcodec:视频选项,一般后面加copy表示拷贝
2、格式:
(1) h264: 表示输出的是h264的视频裸流
(2) mp4: 表示输出的是mp4的视频
(3)mpegts: 表示ts视频流

2.1 转流

H264视频转ts视频流

ffmpeg -i test.h264 -vcodec copy -f mpegts test.ts

H264视频转mp4

ffmpeg -i test.h264 -vcodec copy -f mp4 test.mp4

ts视频转mp4

ffmpeg -i test.ts -acodec copy -vcodec copy -f mp4 test.mp4

mp4视频转flv

ffmpeg -i test.mp4 -acodec copy -vcodec copy -f flv test.flv

2.2 转音频

转MP3为wav

ffmpeg -i input.mp3 -acodec pcm_s16le -ac 2 -ar 44100 output.wav

m4a为wav

ffmpeg -i input.m4a -acodec pcm_s16le -ac 2 -ar 44100 output.wav

wav与PCM的相互转换

ffmpeg -i input.wav -f s16le -ar 44100 -acodec pcm_s16le output.raw

PCM转wav

ffmpeg -f s16le -ar 44100 -ac 2 -acodec pcm_s16le -i input.raw output.wav

ffmpeg -i ad.m4a -ar 48000 -ac 2 -f s16le ad_48000_2_s16le.pcm

ffmpeg -i ad.m4a -ar 48000 -ac 2 -f s16le ad_48000_2_s16le.pcm

aac to ac3:

ffmpeg -i audio.aac -acodec ac3 audio.ac3

ffmpeg -i input.wav -acodec ac3 output.ac3

提取左右声道的视频

ffmpeg -i ad.mp4 -af “pan=stereo|c1=FR” -y ad-right.mp4

ffmpeg -i ad.mp4 -af “pan=stereo|c0=FL” -y d-left.mp44

2.3 拉流

网络流转本地文件:

ffmpeg -i http://www.xxx.com/xxx.m3u8 name.mp4

ffmpeg强制使用TCP方式处理rtsp流 ,输出都cc.ts

ffmpeg -rtsp_transport tcp -i rtsp://182.131.121.48:12059/CMSBK/0021.ts cc.ts

2.4 推流

本机推流:UDP封装的MPEG-TS

ffmpeg -re -i sintel.ts -f mpegts udp://127.0.0.1:8880

ffmpeg -stream_loop 3 -re -i D:\apache\Apache24\htdocs\chongsheng1.mp4 -f mpegts udp://172.31.10.9:8880

本机推流:首先经过RTP封装,然后经过UDP封装的MPEG-TS

ffmpeg -re -i sintel.ts -f rtp_mpegts udp://127.0.0.1:8880

ffmpeg -stream_loop 3 -re -i D:\apache\Apache24\htdocs\chongsheng1.mp4 -f rtp_mpegts udp://172.31.10.9:8880

本地推流:RTP协议流(视频流)

ffmpeg -re -i D:\apache\Apache24\htdocs\chongsheng1.mp4 -c:v copy -an -f rtp_mpegts rtp://172.31.10.9:8881

本地推流:RTP协议流(音频流)

ffmpeg -re -i D:\apache\Apache24\htdocs\chongsheng1.mp4 -vn -acodec copy -f rtp_mpegts rtp://172.31.10.9:8881

本地推流:RTP协议流(音视频流)

参考:https://www.codenong.com/cs106467422/

ffmpeg -re -i D:\apache\Apache24\htdocs\chongsheng1.mp4 -c:v copy -an -f rtp_mpegts rtp://172.31.10.9:8881 -vn -acodec copy -f rtp rtp://172.31.10.9:8882

2.3 抽帧

每隔10秒抽帧:

ffmpeg -skip_frame nokey -i D:\videos\jljt_hevc_aac_60fps.ts -vf select=‘not(mod(floor(t-start_t),10))+gt(t-start_t,selected_n*10)’,scale=128:72,tile=8x8 -an -vsync 0 keyframes%03d.png

每隔5秒抽帧:

ffmpeg -skip_frame nokey -i http://xxxx.m3u8 -vf select=‘(isnan(prev_selected_t)+gte(t-prev_selected_t,5))(not(mod(floor(t-start_t),10))+gt(floor(t-start_t),selected_n10))’,scale=400:200,tile=6x6 -an -vsync 0 vod_new/test3_1/%d.jpg

2.5 图像转换

图片转yuv:

ffmpeg -i C:\Users\Administrator\Desktop\screenshot1.png -s 1920x1080 -pix_fmt yuvj420p C:\Users\Administrator\Desktop\screenshot1.yuv

yuv转JPG:

ffmpeg -pix_fmt yuvj420p -s 1920x1080 -i C:\Users\Administrator\Desktop\screenshot1.yuv C:\Users\Administrator\Desktop\b.jpg

2.6 编码

YUV编码H264:

ffmpeg -s 1920x1080 -i src01_1920x1080.yuv -b:v 7776k -r 25 -vcodec libx264 -x264opts ssim src01_1920x1080_0.150.h264

YUV编码mpg:

ffmpeg -s 1920x1080 -i src01_1920x1080.yuv -b:v 7776k -r 25 -vcodec mpeg2video src01_1920x1080_0.150.mpg

2.7 MP4转H264

ffmpeg -i D:\zhibo\video\douyin.mp4 -vcodec copy -bsf h264_mp4toannexb -f h264 douyin.h264

说明:

-i douyin.mp4 :是输入的MP4文件

-vcodec copy:从MP4封装中进行拷贝

-bsf h264_mp4toannexb:从MP4拷贝到annexB封装

-f h264:采用h.264格式

douyin:输出的文件名称

ffmpeg.exe -i http://mobaliyun.res.mgxx.com/new_video/2022/05/10/1295/60DF4C8228F500CE5584E23968DE2739_20220510_1_1_1241.mp4?sftc=vnds1_vtp4 -vcodec copy -bsf h264_mp4toannexb -f h264 douyin.h264

H264转Mp4

ffmpeg -i test.264 -vcodec copy -f mp4 test.mp4

2.8 H264 转YUV

ffmpeg -i src01_1920x1080_0.150.h264 src01_1920x1080_0.150_264.yuv

ffmpeg -i src01_1920x1080_0.150.mpg src01_1920x1080_0.150_mpg2.yuv

2.9 图片和yuv 转换

ffmpeg -s 1280x720 -pix_fmt yuv420p -i yuv420p_1280x720.yuv -pix_fmt rgb24 rgb24_1280x720.rgb

ffplay -pixel_format rbg24 -video_size 1280x720 -i rgb24_1280x720.rgb

ffmpeg -i a.jpg -s 640x480 -pix_fmt yuv422p a.yuv

ffmpeg -pix_fmt yuv422p -s 640x480 -i a.yuv b.jpg

3 推流

3.1 打包成HLS点播流

ffmpeg -i ad.mp4 -c:v libx264 -c:a copy -f hls m3u8\ad.m3u8
打包后的流放到服务器即可访问

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:1.920000,
ad1.ts
#EXTINF:3.680000,
ad2.ts
#EXTINF:2.560000,
ad3.ts
#EXTINF:1.800000,
ad4.ts
#EXTINF:1.680000,
ad5.ts
#EXT-X-ENDLIST

-segment_time每隔十秒切一个文件

ffmpeg -i dnf.mp4 -codec:v libx264 -codec:a mp3 -map 0 -f ssegment -segment_format mpegts -segment_list video/index.m3u8 -segment_time 10 video/%03d.ts

4 获取帧信息

ffprobe -show_frames We_Are_Young.mp4 > frames.info

在这里插入图片描述

统计I帧数量

keyframe=1 : key frame

pict_type=I : I-frame

cat frames.info | grep “pict_type=I” |wc -l

统计视频帧数量

cat frames.info | grep “media_type=video” |wc -l

ffprobe -show_format -show_streams filename

相关文章:

FFPlay命令全集合

FFPlay是以FFmpeg框架为基础,外加渲染音视频的库libSDL构建的媒体文件播放器。 ffplay工具下载并播放视频,可以辅助卡看流信息。 官网下载地址:http://ffmpeg.org/download.html#build-windows 下载build好的exe程序: 此处下载…...

Mono里运行C#脚本34—内部函数调用的过程

本文来分析Mono运行脚本时,会调用一些C实现的函数代码。 而这个过程又是怎么样实现的呢? 比如前面分析的脚本: IL_0000: call string class MonoEmbed::gimme() 在这里会调用C函数实现的MonoEmbed::gimme()函数。 而这个函数是在C程序内部实现,通过下面的代码来注册到运行…...

rust feature h和 workspace相关知识 (十一)

feature 相关作用和描述 在 Rust 中,features(特性) 是一种控制可选功能和依赖的机制。它允许你在编译时根据不同的需求启用或禁用某些功能,优化构建,甚至改变代码的行为。Rust 的特性使得你可以轻松地为库提供不同的…...

-bash: ./uninstall.command: /bin/sh^M: 坏的解释器: 没有那个文件或目录

终端报错: -bash: ./uninstall.command: /bin/sh^M: 坏的解释器: 没有那个文件或目录原因:由于文件行尾符不匹配导致的。当脚本文件在Windows环境中创建或编辑后,行尾符为CRLF(即回车和换行,\r\n)&#xf…...

【Redis】Redis入门以及什么是分布式系统{Redis引入+分布式系统介绍}

文章目录 介绍redis的引入 分布式系统单机架构应用服务和数据库服务分离【负载均衡】引入更多的应用服务器节点 单机架构 分布式是什么 数据库分离和负载均衡 理解负载均衡 数据库读写分离 引入缓存 数据库分库分表 引入微服务 介绍 The open source, in-memory data store us…...

C#高级:常用的扩展方法大全

1.String public static class StringExtensions {/// <summary>/// 字符串转List&#xff08;中逗 英逗分隔&#xff09;/// </summary>public static List<string> SplitCommaToList(this string data){if (string.IsNullOrEmpty(data)){return new List&…...

Consul持久化配置报错1067---consul_start

报错都是文件写的有问题或者格式问题&#xff0c;直接复制我的这个改改地址就行 先创建文本文件consul_start.txt--->再复制代码保存---->再把.txt改成.bat 持久化存储的地址在&#xff1a;mydata 注&#xff1a;D:\consul\consul_1.20.2_windows_386改成自己consul的…...

「 机器人 」扑翼飞行器控制策略浅谈

1. 研究背景 • 自然界中的蜂鸟以极高的机动能力著称,能够在短至0.2秒内完成如急转弯、快速加速、倒飞、躲避威胁等极限机动。这种表现对微型飞行器(Flapping Wing Micro Air Vehicles, FWMAVs)具有重要的仿生启示。 • 目前的微型飞行器距离自然生物的飞行能力仍有相当差距…...

Qt信号与槽底层实现原理

在Qt中,信号与槽是实现对象间通信的核心机制, 类似于观察者模式。当某个事件发生后,比如按钮被点击,就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,将想要处理的信号和自己的一个函数(称为槽…...

QT QTableWidget控件 全面详解

本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、…...

Flutter_学习记录_基本组件的使用记录

1.TextWidge的常用属性 1.1TextAlign: 文本对齐属性 常用的样式有&#xff1a; TextAlign.center 居中TextAlign.left 左对齐TextAlign.right 有对齐 使用案例&#xff1a; body: Center(child: Text(开启 TextWidget 的旅程吧&#xff0c;珠珠, 开启 TextWidget 的旅程吧&a…...

基于JAVA的微信点餐小程序设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…...

计算机毕业设计hadoop+spark+hive民宿推荐系统 酒店推荐系统 民宿价格预测 酒店价格 预测 机器学习 深度学习 Python爬虫 HDFS集群

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

亲测有效!解决PyCharm下PyEMD安装报错 ModuleNotFoundError: No module named ‘PyEMD‘

解决PyCharm下PyEMD安装报错 PyEMD安装报错解决方案 PyEMD安装报错 PyCharm下通过右键自动安装PyEMD后运行报错ModuleNotFoundError: No module named ‘PyEMD’ 解决方案 通过PyCharm IDE python package搜索EMD-signal&#xff0c;选择版本后点击“install”执行安装...

Gin 应用并注册 pprof

pprof 配置与使用步骤 1. 引言 通过下面操作&#xff0c;你可以顺利集成和使用 pprof 来收集和分析 Gin 应用的性能数据。你可以查看 CPU 使用情况、内存占用、以及其他运行时性能数据&#xff0c;并通过图形化界面进行深度分析。 1. 安装依赖 首先&#xff0c;确保安装了 gi…...

Jenkins 启动

废话 这一阵子感觉空虚&#xff0c;心里空捞捞的&#xff0c;总想找点事情做&#xff0c;即使这是一件微小的事情&#xff0c;空余时间除了骑车、打球&#xff0c;偶尔朋友聚会 … 还能干什么呢&#xff1f; 当独自一人时&#xff0c;究竟可以做点什么&#xff0c;填补这空虚…...

第20篇:Python 开发进阶:使用Django进行Web开发详解

第20篇&#xff1a;使用Django进行Web开发 内容简介 在上一篇文章中&#xff0c;我们深入探讨了Flask框架的高级功能&#xff0c;并通过构建一个博客系统展示了其实际应用。本篇文章将转向Django&#xff0c;另一个功能强大且广泛使用的Python Web框架。我们将介绍Django的核…...

文献引用指南ChatGPT提示词分享

文献引用指南 在学术写作中&#xff0c;准确引用是至关重要的环节。它不仅能够为您的研究提供坚实的学术基础&#xff0c;还能确保您尊重并认可他人的学术成果&#xff0c;从而有效避免抄袭的问题。而ChatGPT在这一方面同样能够为您提供有力的支持。借助ChatGPT&#xff0c;您…...

程序代码篇---C++类.c\.h

文章目录 前言第一部分&#xff1a;C中的类1.类的定义2.成员变量&#xff08;属性&#xff09;3.成员函数&#xff08;方法&#xff09;4.访问修饰符私有受保护公有 5.构造函数和析构函数成员初始化列表方法重载 6.继承7.多态8.友元 第二部分&#xff1a;.c与.h文件头文件&…...

@RabbitListener处理重试机制完成后的异常捕获

application.properties中配置开启手动签收 spring.rabbitmq.listener.direct.acknowledge-modemanual spring.rabbitmq.listener.simple.acknowledge-modemanual定义一个重试器 Slf4j Configuration public class RabbitMQRetryConfing {Bean("customRetry")publi…...

Mac 上管理本地 Go 版本

在 Mac 上修改本地 Go 版本可以通过多种方法实现。以下是几种常见且详细的操作方案&#xff1a; 方法一&#xff1a;使用 goenv 管理多版本&#xff08;推荐&#xff09; 适用场景&#xff1a;需要频繁切换不同 Go 版本&#xff0c;适合长期开发者。 步骤&#xff1a; 安装 g…...

低代码系统-产品架构案例介绍、得帆云(八)

产品名称 得帆云DeCode低代码平台-私有化 得帆云DeMDM主数据管理平台 得帆云DeCode低代码平台-公有云 得帆云DePortal企业门户 得帆云DeFusion融合集成平台 得帆云DeHoop数据中台 名词 概念 云原生 指自己搭建的运维平台&#xff0c;区别于阿里云、腾讯云 Dehoop 指…...

免费GPU算力,不花钱部署DeepSeek-R1

在人工智能和大模型技术飞速发展的今天&#xff0c;越来越多的开发者和研究者希望能够亲自体验和微调大模型&#xff0c;以便更好地理解和应用这些先进的技术。然而&#xff0c;高昂的GPU算力成本往往成为了阻碍大家探索的瓶颈。幸运的是&#xff0c;腾讯云Cloud Studio提供了免…...

JavaEE:多线程进阶

JavaEE&#xff1a;多线程进阶 一、对比不同锁策略之间的应用场景及其区别1. 悲观锁 和 乐观锁1.1 定义和原理1.2 应用场景1.3 示例代码 2. 重量级锁 和 轻量级锁2.1 定义和原理2.2 应用场景2.3 示例代码 3. 挂起等待锁 和 自旋锁3.1 定义和原理3.2 应用场景3.3 示例代码 4. 几…...

不只是mini-react第二节:实现最简fiber

省流|总结 首先&#xff0c;我们编写JSX文件&#xff0c;并通过Babel等转换工具将其转化为createElement()函数的调用&#xff0c;最终生成虚拟 DOM&#xff08;Vdom&#xff09;格式。举个例子&#xff1a; // 原始 JSX const App <div>hi-mini-react</div>;//…...

C++实现设计模式---命令模式 (Command)

命令模式 (Command) 命令模式 是一种行为型设计模式&#xff0c;它将请求封装为一个对象&#xff0c;从而使得可以用不同的请求对客户端进行参数化、对请求排队或记录日志&#xff0c;以及支持可撤销的操作。 意图 将操作的调用者与接收者分离&#xff0c;通过将请求封装为独…...

设计模式的艺术-享元模式

结构性模式的名称、定义、学习难度和使用频率如下表所示&#xff1a; 1.如何理解享元模式 当一个软件系统在运行时产生的对象数量太多&#xff0c;将导致运行代价过高&#xff0c;带来系统性能下降等问题。 在享元模式中&#xff0c;存储这些共享实例对象的地方称为享元池&…...

Linux的权限和一些shell原理

目录 shell的原理 Linux权限 sudo命令提权 权限 文件的属性 ⽂件类型&#xff1a; 基本权限&#xff1a; chmod改权限 umask chown 该拥有者 chgrp 改所属组 最后&#xff1a; 目录权限 粘滞位 shell的原理 我们广义上的Linux系统 Linux内核Linux外壳 Linux严格…...

【Postgres_Python】使用python脚本批量创建和导入多个PG数据库

之前批量创建和导入数据库分为2个python脚本进行&#xff0c;现整合优化代码合并为一个python脚本&#xff0c;可同步实现数据库的创建和数据导入。之前的文章链接&#xff1a; 【Postgres_Python】使用python脚本批量创建PG数据库 【Postgres_Python】使用python脚本将多个.S…...

Ubuntu安装GitLab

在 Ubuntu 上安装 GitLab 的步骤如下。这里以 GitLab Community Edition&#xff08;CE&#xff09;为例&#xff1a; 前提条件 确保你的 Ubuntu 系统是 20.04 或更高版本。确保你的系统满足 GitLab 的硬件要求。 步骤 更新系统包&#xff1a; sudo apt update sudo apt upg…...