FFmpeg库之ffplay

news2025/3/10 15:09:14

文章目录

  • 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_SOURCES
    main.cpp
    Widget.cpp
    Widget.h
    Widget.ui
)

qt_add_executable ( ffmpegTest
        MANUAL_FINALIZATION
        ${PROJECT_SOURCES}
)

target_link_libraries ( ffmpegTest PRIVATE Qt${QT_VERSION_MAJOR}::Widgets )
target_link_libraries ( ffmpegTest PRIVATE ${FFMPEG_LIBRARIES} )

set_target_properties ( ffmpegTest PROPERTIES
    MACOSX_BUNDLE ON
    WIN32_EXECUTABLE OFF
)

include ( GNUInstallDirs )

install ( TARGETS ffmpegTest
    BUNDLE 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"); // 初始化FFmpeg
    av_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

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

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

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

相关文章

HTTP 协议报文结构 | 返回状态码详解

注&#xff1a;本文为 “HTTP 历史 | 协议报文结构 | 返回状态码” 相关文章合辑。 未整理去重。 HTTP 历史 wangjunliang 最后更新: 2024/3/16 上午10:29 超文本传输协议(英语:HyperTextTransferProtocol,缩写:HTTP)是 万维网(World Wide Web)的基础协议&#xff61;自 蒂姆…

springboot444新冠物资管理系统的设计与实现(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装新冠物资管理系统软件来发挥其高效地信息处理的作用&#x…

【数字信号处理】数字信号处理试题及答案,离散序列,Z变换,傅里叶变换

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…

【系统】Mac crontab 无法退出编辑模式问题

【系统】Mac crontab 无法退出编辑模式问题 背景一、问题回答1.定位原因&#xff1a;2.确认编辑器类型3.确保编辑器进入正确3.1 确认是否有crontab调度任务3.2 进入编辑器并确保编辑器正常3.3 保存操作 4.确认crontab任务存在5.确保脚本的可执行性和正确性 二、后续 背景 之前…

6.3.1 MR实战:计算总分与平均分

在本次实战中&#xff0c;我们的目标是利用Apache Hadoop的MapReduce框架来处理和分析学生成绩数据。具体来说&#xff0c;我们将计算一个包含五名学生五门科目成绩的数据集的总分和平均分。这个过程包括在云主机上准备数据&#xff0c;将成绩数据存储为文本文件&#xff0c;并…

开发平台接口规范:北斗终端->客户平台(上行)| 时空信息产品

文章目录 引言I 技术架构和业务流程II 渠道接口验证签名白名单IP渠道配置表设计III 其他辅助功能TCP 发送消息到消息中心nginx转发网关服务异常捕获日志采集IV 知识扩展对请求参数进行校验引言 开发平台的应用场景:平台需要开发能力给下游平台需要接收上游的回调数据,例如接收…

MySQL知识汇总(一)

一些命令行操作注意加 分号 “ ; ” show databases 查看所有数据库 use 数据库名 切换数据库 show tables 查看数据库中所有表 describe 表名 显示表中所有信息 create database [if not exists] 新库名 创…

vsCode怎么使用vue指令快捷生成代码

1.下载Vetur插件 2.在文件-首选项-配置代码片段中找到vue.json文件 &#xff08;注&#xff1a;旧版本的编辑器路径为文件-首选项-用户片段&#xff09; 3.在打开的配置代码片段弹窗中搜索vue.json&#xff0c;找到并打开 &#xff08;注&#xff1a;如果搜不到的话就按住鼠标…

QAnything源码学习

以下解读基于时间&#xff1a;20241218 概述 官方架构图如下&#xff1a; 该有的模块基本上都有了&#xff1a; Query理解检索 召回重排 大模型生成数据入库 下面就从以上几个模块分别看看对应的源码 讲源码之前还是想先讲讲这个项目的目录结构&#xff0c;这样可能会更方…

【LeetCode】每日一题 2024_12_19 找到稳定山的下标(模拟)

前言 每天和你一起刷 LeetCode 每日一题~ 最近力扣的每日一题出的比较烂&#xff0c;难度过山车&#xff0c;导致近期的更新都三天打鱼&#xff0c;两天断更了 . . . LeetCode 启动&#xff01; 题目&#xff1a;找到稳定山的下标 代码与解题思路 先读题&#xff1a;最重要…

Android笔记【19】

具体示例 run: val result someObject.run {// 这里可以使用 thisthis.someMethod() }let: val result someObject?.let {// 这里使用 itit.someMethod() }with: val result with(someObject) {// 这里使用 thissomeMethod() }apply: val obj SomeClass().apply {// 这里使…

【一篇搞定配置】如何在Ubuntu上配置单机/伪分布式Hadoop

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;各种软件安装与配置_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1.…

Webpack简单介绍及安装

一、介绍 Webpack 是一个现代 JavaScript 应用程序的静态模块打包器&#xff08;module bundler&#xff09;。它将应用程序中的所有依赖项&#xff08;JavaScript、图片、CSS 等&#xff09;打包成一个或多个 bundle。这样做的主要目的是减少加载时间和提高应用程序的加载性能…

moviepy 给视频添加字幕 - python 实现

DataBall 助力快速掌握数据集的信息和使用方式&#xff0c;会员享有 百种数据集&#xff0c;持续增加中。 需要更多数据资源和技术解决方案&#xff0c;知识星球&#xff1a; “DataBall - X 数据球(free)” -------------------------------------------------------------…

用户体验与SEO的结合:如何优化网站以提升谷歌排名?

在SEO领域&#xff0c;算法、关键词和技术手段固然重要&#xff0c;但归根结底&#xff0c;谷歌的核心理念是提供最优质的用户体验。无论算法如何变化&#xff0c;用户体验始终是影响谷歌排名的重要因素之一。一个友好、直观的网站不仅能留住用户&#xff0c;还能直接提升搜索引…

python总说的cd是什么

以下适用于windows环境 cd就是change directory的缩写&#xff0c;即改变目录。 讲cd命令之前&#xff0c;先来看看提示符是什么意思。现在的提示符是c:\> c:说明现在的工作盘是c盘&#xff0c;\告诉我们当前的工作目录是根目录。 >的作用是把工作目录和我们要输入的…

电感的基本概念

电感的定义&#xff1a; 电感一般是由导线绕成空芯线圈或带铁芯的线圈而制成。 当线圈中有电流通过时&#xff0c;线圈周围就会产生磁场&#xff0c;当线圈中流过的是直流电流时&#xff0c;线圆周围就会产生固定的磁场&#xff0c;线圈产生的物理现象就是电磁铁&#xff0c;当…

基于 mzt-biz-log 实现接口调用日志记录

&#x1f3af;导读&#xff1a;mzt-biz-log 是一个用于记录操作日志的通用组件&#xff0c;旨在追踪系统中“谁”在“何时”对“何事”执行了“何种操作”。该组件通过简单的注解配置&#xff0c;如 LogRecord&#xff0c;即可实现接口调用的日志记录&#xff0c;支持成功与失败…

芯片级IO (Pad) Ring IP Checklist

SoC top顶层数字后端实现都会涉及到IO Ring &#xff08;PAD Ring&#xff09;的设计。这里面包括VDD IO,VDDIO IO, Signal IO, Corner IO&#xff0c;Filler IO&#xff0c;IO power cut cell等等。 数字后端零基础入门系列 | Innovus零基础LAB学习Day2 数字IC后端实现TOP F…

OpenHarmony-3.HDF Display子系统(6)

Display 子系统 1.Display驱动模型介绍 当前操作系统和 SOC 种类繁多&#xff0c;各厂商的显示屏器件也各有不同&#xff0c;随之针对器件的驱动代码也不尽相同&#xff0c;往往是某一款器件驱动&#xff0c;只适用于某单一内核系统或 SOC&#xff0c;如果要迁移到其他内核或者…