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

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


http://www.mrgr.cn/news/80911.html

相关文章:

  • pyQt5基本需求v1.0
  • 《操作系统真象还原》第八章(一) —— 位图及其实现
  • Swin transformer 论文阅读记录 代码分析
  • 使用VLC 搭建 RTSP 服务器
  • 【WRF教程第3.2期】预处理系统 WPS详解:以4.5版本为例
  • 高校成人教育学籍管理系统设计与实现
  • 2024.2 ACM Explainability for Large Language Models: A Survey
  • 计算机组成原理的学习笔记(2)--数据表示与运算·其二 逻辑门和加减乘
  • 细说STM32F407单片机轮询方式读写SPI FLASH W25Q16BV
  • 微信小程序的轮播图学习报告
  • UDP系统控制器_音量控制、电脑关机、文件打开、PPT演示、任务栏自动隐藏
  • JS子页面调用父页面函数,监听刷新事件
  • Spring学习之——Sping-XML
  • Linux文件:动静态库制作 动态库链接原理解析
  • 深度学习中,用损失的均值或者总和反向传播的区别
  • 以腾讯混元模型为例,在管理平台上集成一个智能助手
  • 黑马Java面试教程_P8_并发编程
  • PyQt5学习笔记
  • Linux之文件相关命令
  • jvm类加载器
  • 挑战一个月基本掌握C++(第七天)了解指针,引用,时间,输入输出,结构体,vector容器,数据结构 - 通用完结
  • Spring Security 6 系列之五 - 授权管理
  • 相机雷达外参标定综述“Automatic targetless LiDAR–camera calibration: a survey“
  • electron-vite【实战系列教程】
  • 【Leetcode 热题 100】114. 二叉树展开为链表
  • 【软考高级】系统架构设计师复习笔记-精华版