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) | 设置音频采样率 |
此命令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