FFmpeg库之ffplay

发布于:2024-12-18 ⋅ 阅读:(72) ⋅ 点赞:(0)

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

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


网站公告

今日签到

点亮在社区的每一天
去签到