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

FFmpeg库之ffplay

文章目录

  • FFmpeg环境搭建
  • ffplay使用
    • 通用选项
    • 视频选项
    • 音频选项
    • 快捷键使用
    • 滤镜
    • 直播拉流

FFmpeg环境搭建

FFmpeg官网

FFmpeg环境搭建

./configure \--prefix="$HOME/ffmpeg" \--extra-cflags="-I$HOME/ffmpeg/include" \--extra-ldflags="-L$HOME/ffmpeg/lib" \--extra-libs=-lpthread \--extra-libs=-lm \--bindir="$HOME/ffmpeg/bin" \--enable-gpl \--enable-nonfree \--enable-shared \--enable-decoder=h264 \--enable-parser=h264 

我这里用的是cmake配置,mingw编译,不用移动文件夹

  • CMakeLists.txt
cmake_minimum_required ( VERSION 3.16 )project ( ffmpegTest VERSION 0.1 LANGUAGES CXX )set ( CMAKE_AUTOUIC ON )
set ( CMAKE_AUTOMOC ON )
set ( CMAKE_AUTORCC ON )set ( CMAKE_CXX_STANDARD 17 )
set ( CMAKE_CXX_STANDARD_REQUIRED ON )# 查找FFmpeg库
find_package ( PkgConfig REQUIRED )
set ( ENV{PKG_CONFIG_PATH} "G:/msys64/home/PVer/ffmpeg/lib/pkgconfig" )
pkg_check_modules ( FFMPEG REQUIRED libavcodec libavformat libavutil libswscale libavdevice )if ( FFMPEG_FOUND )include_directories ( ${FFMPEG_INCLUDE_DIRS} )link_directories ( ${FFMPEG_LIBRARY_DIRS} )
endif ()find_package ( QT NAMES Qt6 Qt5 REQUIRED COMPONENTS Widgets )
find_package ( Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets )set ( PROJECT_SOURCESmain.cppWidget.cppWidget.hWidget.ui
)qt_add_executable ( ffmpegTestMANUAL_FINALIZATION${PROJECT_SOURCES}
)target_link_libraries ( ffmpegTest PRIVATE Qt${QT_VERSION_MAJOR}::Widgets )
target_link_libraries ( ffmpegTest PRIVATE ${FFMPEG_LIBRARIES} )set_target_properties ( ffmpegTest PROPERTIESMACOSX_BUNDLE ONWIN32_EXECUTABLE OFF
)include ( GNUInstallDirs )install ( TARGETS ffmpegTestBUNDLE DESTINATION .LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
  • Widget.cpp
#include "Widget.h"
#include "./ui_Widget.h"
extern "C"
{
#include <libavcodec/avcodec.h>
#include <libavdevice/avdevice.h>
#include <libavformat/avformat.h>
#include <libavformat/version.h>
#include <libavutil/mathematics.h>
#include <libavutil/time.h>
#include <libswscale/swscale.h>
}Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);av_log_set_level(AV_LOG_DEBUG);av_log(nullptr, AV_LOG_INFO, "Hello World!\n"); // 初始化FFmpegav_log(nullptr, AV_LOG_INFO, "ffmpeg version:%s\n", av_version_info());
}Widget::~Widget()
{delete ui;
}

ffplay使用

需要把之前编译好的bin文件夹加入环境变量,我的是G:\msys64\home\PVer\ffmpeg\bin在这里插入图片描述
FFplay是一个非常简单的便携式媒体播放器,使用FFmpeg库和SDL库。它主要用作各种FFmpeg api的测试平台。

语法格式:

ffplay [options] [input_url]

通用选项

命令说明
-x width设置显示宽度
-y height设置显示高度
-fs以全屏模式启动
-an禁用音频
-vn禁用视频
-sn禁用字幕
-ss pos将画面从指定位置播放,单位是秒,例如 -ss 10就是从视频开始的第10秒的位置开始播放
-t duration播放音频/视频的持续时间(单位:秒)
-bytes指定快进/快退事使用的字节数
-seek_interval设置自定义间隔(秒),以便使用左/右键进行快进/快退。默认值为10秒
-nodisp禁用图形显示
-noborder无边框窗口
-alwaysontop窗口总是在顶部
-volume设置启动音量。0表示静音,100表示最大音量,负值是0,超过100的是100
-f fmt按照指定的格式来解析文件,例如MP4,s16le(音频格式)
-window_title title设置窗口标题(默认为输入文件名)
-left title设置窗口左侧的x位置(默认为居中窗口)
-top title设置窗口顶部的y位置(默认为居中)
-loop number循环播放视频的次数。0表示永远
-showmode mode设置要是用的显示模式。0:显示视频 1:显示音频波形 2:用RDFT(实离散傅里叶变换)表示音频频带
-i input_url指定输入文件url。输入文件可以是本地文件,管道,也可以是网络流
-sync type设置主时钟为audio(type =audio)、video(type=video)或external(type =ext)。默认是音频,主时钟用于控制音视频同步,大多数媒体播放器是用音频作为主时钟,但在某些情况下(流媒体或高质量广播),有必要改变这一点。这个选项主要用于调试目的。
-ast audio_stream_specifier使用给的的流说明符选择所需的音频流。流说明符在流说明符一章中有描述,如果未指定此选项,则在已选视频流的程序中选择最佳音频流
-vst video_stream_specifier使用给定的流说明符选择所需的视频流。如果未指定,则选择最佳视频流
-sst subtitle_stream_specifier使用给定的流说明符选择所需的字幕流。如果未指定,则选择最佳
-autoexit视频播放完成后退出
-exitonkeydown按任意键退出
-exitonmousedown鼠标任意键退出
-codec:media_specifier codec_name对media_specifier标识的流强制执行特定的解码器实现,该实现可以采用值a(audio)、v(video)和s(subtitle)
-acodec codec_name强制使用特定的音频解码器
-vcodec codec_name强制使用特定的视频解码器
-scodec codec_name强制使用特定的字幕解码器
-autorotate根据文件元数据自动旋转视频。默认启用, -noautorotate 禁用它
-framedrop如果视频不同步,则丢弃视频帧。如果主时钟未设置为video,则默认启用。使用此选项为所有主时钟源启动丢帧,使用 -noframedrop来禁用它

在这里插入图片描述

视频选项

命令说明
-pixel_format fmt_name设置视频像素格式
-video_size 分辨率设置视频分辨率
-framerate 帧率FPS设置视频帧率

在这里插入图片描述

音频选项

命令说明
-ar 采样率 (decoding/encoding,audio)设置音频采样率
-ac 声道数 此命令7.1版本不支持设置音频声道数

在这里插入图片描述

快捷键使用

命令说明
q或者Esc退出
p或者空格暂停
f或者左键双击全屏/取消全屏
m静音/取消静音
9或者/减少音量
0或者*增加音量
a切换音频流
v切换视频流
t切换字幕流
c切换节目
s逐帧播放
左箭头快退10s
右箭头
上箭头快进1分钟
下箭头
鼠标右键视频跳转到指定位置,根据鼠标位置相对于当前窗口的宽度计算

滤镜

命令说明
ffplay 文件路径 -vf transpose=旋转角度视频旋转。旋转角度选项如下:0 逆时针90度+垂直翻转 ,1 顺时针90度,2 逆时针90度,3顺时针90度+垂直翻转
ffplay 文件路径 -vf vflip视频垂直翻转
ffplay 文件路径 -vf hflip视频水平翻转
ffplay 文件路径 -af atempo=速度值音频倍速播放
ffplay 文件路径 -vf setpts=速度值视频倍速播放

在这里插入图片描述

直播拉流

ffplay rtmp地址
例如
ffplay rtmp://127.0.0.1/live/room

在这里插入图片描述
在这里插入图片描述

相关文章:

FFmpeg库之ffplay

文章目录 FFmpeg环境搭建ffplay使用通用选项视频选项音频选项快捷键使用滤镜直播拉流 FFmpeg环境搭建 FFmpeg官网 FFmpeg环境搭建 ./configure \--prefix"$HOME/ffmpeg" \--extra-cflags"-I$HOME/ffmpeg/include" \--extra-ldflags"-L$HOME/ffmpeg…...

scala中模式匹配的应用

package test34object test6 {case class Person(name:String)case class Student(name:String, className:String)// match case 能根据 类名和属性的信息&#xff0c;匹配到对应的类// 注意&#xff1a;// 1 匹配的时候&#xff0c;case class的属性个数要对上// 2 属性名不需…...

WebRTC搭建与应用(一)-ICE服务搭建

WebRTC搭建与应用(一) 近期由于项目需要在研究前端WebGL渲染转为云渲染&#xff0c;借此机会对WebRTC、ICE信令协议等有了初步了解&#xff0c;在此记录一下&#xff0c;以防遗忘。 第一章 ICE服务搭建 文章目录 WebRTC搭建与应用(一)前言一、ICE是什么&#xff1f;二、什么…...

【计算机视觉基础CV】03-深度学习图像分类实战:鲜花数据集加载与预处理详解

本文将深入介绍鲜花分类数据集的加载与处理方式&#xff0c;同时详细解释代码的每一步骤并给出更丰富的实践建议和拓展思路。以实用为导向&#xff0c;为读者提供从数据组织、预处理、加载到可视化展示的完整过程&#xff0c;并为后续模型训练打下基础。 前言 在计算机视觉的深…...

Kafka学习篇

Architecture 系统间解耦&#xff0c;异步通信&#xff0c;削峰填谷 Topic 消息主题&#xff0c;用于存储消息 Partition 分区&#xff0c;通过扩大分区&#xff0c;可以提高存储量 Broker 部署Kafka服务的设备 Leader kafka主分区 Follwer kafka从分区 高性能之道&#xff1a…...

冬日养仓鼠小指南:温暖与陪伴同行

随着冬日的脚步悄然来临&#xff0c;家中可爱的小仓鼠也需要我们给予更多的关怀与呵护。仓鼠虽小&#xff0c;但它们的冬日养护却大有学问&#xff0c;关乎着这些小生命能否健康快乐地度过寒冷季节。 保暖是冬季养仓鼠的首要任务。我们可以为仓鼠的小窝增添一些保暖材料&#…...

【计算机视觉基础CV】05 - 深入解析ResNet与GoogLeNet:从基础理论到实际应用

引言 在上一篇文章中&#xff0c;我们详细介绍了ResNet与GoogLeNet的网络结构、设计理念及其在图像分类中的应用。本文将继续深入探讨如何在实际项目中应用这些模型&#xff0c;特别是如何保存训练好的模型、加载模型以及使用模型进行新图像的预测。通过这些步骤&#xff0c;读…...

Python爬虫之代理的设置

【1】urllib中使用公开代理 import urllib.requesturl http://www.baidu.com/s?wdipheaders {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.159 Safari/537.36 }# 请求对象的定制 request urllib.req…...

Canoe E2E校验自定义Checksum算法

文章目录 一、添加 DBC文件二、导入要仿真的ECU节点三、编写 CAPL脚本1. 创建 .can 文件2. 设置counter递增3. 设置 CRC 算法&#xff0c;以profile01 8-bit SAE J1850 CRC校验为例 四、开始仿真五、运行结果CRC在线校验 当E2E的 CRC算法非常规算法&#xff0c;则需要自己编写代…...

[HNCTF 2022 Week1]你想学密码吗?

下载附件用记事本打开 把这些代码放在pytho中 # encode utf-8 # python3 # pycryptodemo 3.12.0import Crypto.PublicKey as pk from hashlib import md5 from functools import reducea sum([len(str(i)) for i in pk.__dict__]) funcs list(pk.__dict__.keys()) b reduc…...

端到端自动驾驶大模型:视觉-语言-动作模型 VLA

模型框架定义、模型快速迭代能力是考查智驾团队出活能力的两个核心指标。在展开讨论Vision-Language-Action Models(VLA)之前&#xff0c;咱们先来讨论端到端自动驾驶大模型设计。 目录 1. 端到端自动驾驶大模型设计 1.1 模型输入设计 1.2 模型输出设计 1.3 实现难点分析 …...

druid与pgsql结合踩坑记

最近项目里面突然出现一个怪问题&#xff0c;数据库是pgsql&#xff0c;jdbc连接池是alibaba开源的druid&#xff0c;idea里面直接启动没问题&#xff0c;打完包放在centos上和windows上cmd窗口都能直接用java -jar命令启动&#xff0c;但是放到国产信创系统上就是报错&#xf…...

【xxl-job】XXL-Job源码深度剖析:分布式任务调度的艺术与实践

XXL-Job源码深度剖析 核心概念1、调度中心2、执行器3、任务 来个Demo1、搭建调度中心2、执行器和任务添加3、创建执行器和任务 从执行器启动说起1、初始化JobHandler2、创建一个Http服务器3、注册到调度中心 任务触发原理⭐⭐⭐1、任务如何触发&#xff1f;调度线程scheduleThr…...

图漾相机-ROS1_SDK_ubuntu版本编译(新版本)

文章目录 官网编译文档链接官网SDK下载链接1、下载 Camport ROS1 SDK1.下载git2、下载链接 2、准备编译工作1、安装 catkin2、配置环境变量3. 将Camport3中的linux库文件拷贝到 user/lib目录下4、修改lunch文件制定相机&#xff08;可以放在最后可以参考在线文档&#xff09;**…...

项目二十三:电阻测量(需要简单的外围检测电路,将电阻转换为电压)测量100,1k,4.7k,10k,20k的电阻阻值,由数码管显示。要求测试误差 <10%

资料查找&#xff1a; 01 方案选择 使用单片机测量电阻有多种方法&#xff0c;以下是一些常见的方法及其原理&#xff1a; 串联分压法&#xff08;ADC&#xff09; 原理&#xff1a;根据串联电路的分压原理&#xff0c;通过测量已知电阻和待测电阻上的电压&#xff0c;计算出…...

【NLP 17、NLP的基础——分词】

我始终相信&#xff0c;世间所有的安排都有它的道理&#xff1b;失之东隅&#xff0c;收之桑榆 —— 24.12.20 一、中文分词的介绍 1.为什么讲分词&#xff1f; ① 分词是一个被长期研究的任务&#xff0c;通过了解分词算法的发展&#xff0c;可以看到NLP的研究历程 ② 分词…...

uniapp blob格式转换为video .mp4文件使用ffmpeg工具

前言 介绍一下这三种对象使用场景 您前端一旦涉及到文件或图片上传Q到服务器&#xff0c;就势必离不了 Blob/File /base64 三种主流的类型它们之间 互转 也成了常态 Blob - FileBlob -Base64Base64 - BlobFile-Base64Base64 _ File uniapp 上传文件 现在已获取到了blob格式的…...

【无标题】 [蓝桥杯 2024 省 B] 好数

[蓝桥杯 2024 省 B] 好数 好数 一个整数如果按从低位到高位的顺序&#xff0c;奇数位&#xff08;个位、百位、万位……&#xff09;上的数字是奇数&#xff0c;偶数位&#xff08;十位、千位、十万位……&#xff09;上的数字是偶数&#xff0c;我们就称之为“好数”。 给定一…...

Leecode刷题C语言之同位字符串连接的最小长度

执行结果:通过 执行用时和内存消耗如下&#xff1a; bool check(char *s, int m) {int n strlen(s), count0[26] {0};for (int j 0; j < n; j m) {int count1[26] {0};for (int k j; k < j m; k) {count1[s[k] - a];}if (j > 0 && memcmp(count0, cou…...

Pytorch | 利用BIM/I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用BIM/I-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集BIM介绍基本原理算法流程特点应用场景 BIM代码实现BIM算法实现攻击效果 代码汇总bim.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器&#xff1a; Pytorch | 从零构建AlexNet对CIFAR1…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例

一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

练习(含atoi的模拟实现,自定义类型等练习)

一、结构体大小的计算及位段 &#xff08;结构体大小计算及位段 详解请看&#xff1a;自定义类型&#xff1a;结构体进阶-CSDN博客&#xff09; 1.在32位系统环境&#xff0c;编译选项为4字节对齐&#xff0c;那么sizeof(A)和sizeof(B)是多少&#xff1f; #pragma pack(4)st…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

python/java环境配置

环境变量放一起 python&#xff1a; 1.首先下载Python Python下载地址&#xff1a;Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个&#xff0c;然后自定义&#xff0c;全选 可以把前4个选上 3.环境配置 1&#xff09;搜高级系统设置 2…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中&#xff0c;各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过&#xff0c;在涉及到多个子类派生于基类进行多态模拟的场景下&#xff0c;…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台&#xff0c;以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中&#xff0c;Producer&#xff08;生产者&#xff09; 是连接客户端应用与消息队列的第一步。生产者…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...