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

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_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.kler.cn/a/444198.html

相关文章:

  • VSCode 搭建Python编程环境 2024新版图文安装教程(Python环境搭建+VSCode安装+运行测试+背景图设置)
  • 如何删除Pycharm中无效的Python Interpreter
  • huggingface NLP -Transformers库
  • Flink执行模式(批和流)如何选择
  • EfficientNet模型Pytorch版本具体实现
  • 电脑突然连接不上网络,网络能连接但是频繁掉线,怎么处理
  • Spring发布-订阅模式:解耦与异步通信的高效实现
  • 【尚硅谷 - SSM+SpringBoot+SpringSecurity框架整合项目 】作业已完成
  • 面试题整理8----buffers与cached的区别
  • 第二十三天 神经网络构建-多层感知机(MLP)
  • 基于Spring Boot的新能源汽车个性化推荐系统
  • 深度学习-75-大语言模型LLM之基于llama.cpp和Transformers与Qwen(通义千问)因果语言模型交互
  • Qt生成随机数的方法
  • C++小工具封装 —— NetWork(TCP、UDP)
  • 从零开始:PHP基础教程系列-第13篇:构建简单的Web应用
  • SQL 中 INNER JOIN 和 LEFT JOIN 的区别和用法
  • 2024年第50周ETF周报
  • maven离线模式引用依赖
  • 机器人变换关系
  • 【redis的使用、账号流程、游戏服Handler的反射调用】1.自增id 2.全局用户名这样子名字唯一 3.