当前位置: 首页 > 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…...

OpenLayers 可视化之热力图

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 热力图&#xff08;Heatmap&#xff09;又叫热点图&#xff0c;是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

ubuntu搭建nfs服务centos挂载访问

在Ubuntu上设置NFS服务器 在Ubuntu上&#xff0c;你可以使用apt包管理器来安装NFS服务器。打开终端并运行&#xff1a; sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享&#xff0c;例如/shared&#xff1a; sudo mkdir /shared sud…...

相机从app启动流程

一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容&#xff0c;使用AI&#xff08;2025&#xff09;可以参考以下方法&#xff1a; 四个洞见 模型已经比人聪明&#xff1a;以ChatGPT o3为代表的AI非常强大&#xff0c;能运用高级理论解释道理、引用最新学术论文&#xff0c;生成对顶尖科学家都有用的…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

Caliper 负载(Workload)详细解析

Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器

一、原理介绍 传统滑模观测器采用如下结构&#xff1a; 传统SMO中LPF会带来相位延迟和幅值衰减&#xff0c;并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF)&#xff0c;可以去除高次谐波&#xff0c;并且不用相位补偿就可以获得一个误差较小的转子位…...

算法刷题-回溯

今天给大家分享的还是一道关于dfs回溯的问题&#xff0c;对于这类问题大家还是要多刷和总结&#xff0c;总体难度还是偏大。 对于回溯问题有几个关键点&#xff1a; 1.首先对于这类回溯可以节点可以随机选择的问题&#xff0c;要做mian函数中循环调用dfs&#xff08;i&#x…...

window 显示驱动开发-如何查询视频处理功能(三)

​D3DDDICAPS_GETPROCAMPRANGE请求类型 UMD 返回指向 DXVADDI_VALUERANGE 结构的指针&#xff0c;该结构包含特定视频流上特定 ProcAmp 控件属性允许的值范围。 Direct3D 运行时在D3DDDIARG_GETCAPS的 pInfo 成员指向的变量中为特定视频流的 ProcAmp 控件属性指定DXVADDI_QUER…...