QT多媒体 播放视频并显示字幕
标签: # Qt qt 多媒体 字幕 视频播放
QVideoWidget *videoWidget = new QVideoWidget();QMediaPlayer *player = new QMediaPlayer();player->setMedia(QUrl::fromLocalFile("/Users/pikachu/Movies/《千与千寻》片段.mp4"));player->setVideoOutput(videoWidget);setCentralWidget(videoWidget);player->play();resize(1920, 1080);
但是 QMediaPlayer却没有办法播放字幕
一个做法是自己把字幕画上去
想法来源:https://forum.qt.io/topic/47378/again-how-show-a-subtitle-on-qmediaplayer
我根据这个想法,做了一个实现
resize(1440, 720);auto videoItem = new QGraphicsVideoItem();auto srtTextItem = new QGraphicsTextItem();auto scene = new QGraphicsScene();auto view = new QGraphicsView(scene);scene->addItem(videoItem);scene->addItem(srtTextItem);srtTextItem->setPlainText("SRT TEXT");setCentralWidget(view);QMediaPlayer *player = new QMediaPlayer(this, QMediaPlayer::VideoSurface);player->setMedia(QUrl::fromLocalFile("/Users/pikachu/Movies/《千与千寻》片段.mp4"));player->setVideoOutput(videoItem);player->play();view->show();videoItem->setSize(size());
这样就能显示文字了,最后就是把文字显示在视频的底部中间部分
调一下字的位置
auto textRectSize = srtTextItem->boundingRect().size();auto target_y = videoItem->size().height() - textRectSize.height();auto target_x = (videoItem->size().width() - textRectSize.width()) / 2;srtTextItem->setPos(target_x, target_y);
字幕一般是白色,且比目前我的这个稍微大一点
srtTextItem->setDefaultTextColor(QColorConstants::White);auto font = srtTextItem->font();font.setPixelSize(26);srtTextItem->setFont(font);
- 1
- 2
- 3
- 4
- 5
这样就达到我的预期了。
后面就是如何读取SRT字幕文件,并根据时间显示不同的字幕文字。
这里就不写了,剩下的部分,在我写的一个稍微大的项目里整合了在一起。
附
所有代码
// 头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>class MainWindow : public QMainWindow
{Q_OBJECTpublic:MainWindow(QWidget *parent = nullptr);~MainWindow();
};
#endif // MAINWINDOW_H// 源文件
#include "mainwindow.h"
#include <QtWidgets>
#include <QVideoWidget>
#include <QtMultimedia>
#include <QGraphicsVideoItem>
#include <QGraphicsTextItem>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)
{resize(1440, 720);auto videoItem = new QGraphicsVideoItem();auto srtTextItem = new QGraphicsTextItem();auto scene = new QGraphicsScene();auto view = new QGraphicsView(scene);scene->addItem(videoItem);scene->addItem(srtTextItem);srtTextItem->setPlainText("SRT TEXT");setCentralWidget(view);QMediaPlayer *player = new QMediaPlayer(this, QMediaPlayer::VideoSurface);player->setMedia(QUrl::fromLocalFile("/Users/pikachu/Movies/《千与千寻》片段.mp4"));player->setVideoOutput(videoItem);player->play();view->show();videoItem->setSize(size());srtTextItem->setDefaultTextColor(QColorConstants::White);auto font = srtTextItem->font();font.setPixelSize(26);srtTextItem->setFont(font);auto textRectSize = srtTextItem->boundingRect().size();auto target_y = videoItem->size().height() - textRectSize.height();auto target_x = (videoItem->size().width() - textRectSize.width()) / 2;srtTextItem->setPos(target_x, target_y);
}MainWindow::~MainWindow()
{
}
补充:
如果只用纯白色的文字,在白色的背景下就看不见,所以要加一个阴影。
代码如下
QGraphicsDropShadowEffect *e2 = new QGraphicsDropShadowEffect(this);e2->setOffset(1,1);srtTextItem->setGraphicsEffect(e2);
QT多媒体 播放视频并显示字幕相关推荐
- pyqt播放视频不能显示 解决
pyqt本来播放视频能显示,后来不能显示,最终排查,找到原因: self.setAttribute(Qt.WA_TranslucentBackground, True) 后来查了一下,这句代码的意思是 ...
- 1.QT中播放视频,录音程序的编写
1 通过process的方式播放视频 T22VideoPlayer.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gu ...
- jquery点击弹出播放视频并显示遮罩层
最近在做视频播放的时候,发现用jquery的播放视频可以很好的实现我所需要的效果.在之前请把插件引用进来,废话不多说,代码如下: <!DOCTYPE html> <html>& ...
- Qt QWidget播放视频背景图片闪烁
播放软件主窗口重新实现函数changeEvent,解决最小化之后界面不刷新问题. void VRS::changeEvent(QEvent * event) {//最小化之后再恢复到之前状态,界面会出 ...
- opencv播放视频实时显示帧速(FPS),即是每秒帧数
FPS是测量用于保存.显示动态视频的信息数量.通俗来讲就是指每秒变化的画面数. getTickCount: 它返回从操作系统启动到当前所经过的毫秒数,常常用来判断某个方法执行的时间,其函数原型是DWO ...
- html怎么让视频只显示字幕,视频加字幕快速调整字幕显示位置 视频画面任意位置添加艺术字幕...
快捷精确调整字幕位置,有多种方法: 方法一.通过九宫格快速定位字幕位置 通过"字体设置"栏目,"快速定位摆放的位置"处的九宫格,即可快捷定位字幕位置. 不建议仅 ...
- 关于KMPlayer播放器不显示字幕的解决方法
今天用KMPlayer看时,我的srt字幕文件总是不显示,后来参考了网上的答案,把问题解决了. 解决方法:打开KMP播放器,右键-视频(高级)-视频渲染器-VMR7未渲染(HQ字幕) 参考答案:脑小胖 ...
- QT界面中实现视频帧显示的多种方法及应用
QT界面中实现视频帧显示的多种方法及应用 (一) 引言 1.1 视频帧在QT界面中的应用场景 1.2 不同方法的性能和适用性分析 1.2.1 使用QLabel和QPixmap 1.2.2 使用QPai ...
- Unity 基础 之 在 UGUI 上简单实现VideoPlayer视频播放的功能,简单暂停播放/显示视频名称/显示时长/拖拽播放等
Unity 基础 之 在 UGUI 上简单实现VideoPlayer视频播放的功能,简单暂停播放/显示视频名称/显示时长/拖拽播放等 目录 Unity 基础 之 在 UGUI 上简单实现VideoPl ...
最新文章
- [数分提高]2014-2015-2第4教学周第2次课
- error C2057: expected constant expression (C语言中数组的大小可以在程序运行时定义吗? )
- Python 字典 fromkeys()方法
- Java黑皮书课后题第5章:**5.7(金融应用:计算将来的学费)假设今年某大学的大学为10000美元,学费的年增长率为5%,一年后,学费将是10500美元。编写程序,计算10年后的学费,10~13费
- ORACLE初始化参数文件详细文档
- 手把手教你搭建springboot程序
- 对于单输入多输出系统matlab,求助!!如何把多输入多输出系统的传函转换为状态空间表达式?...
- yolov5模型框架详解
- 项目管理中成本管理相关指标
- MTK平台修改Bootloader源代码,让Android设备一通电就自动开机
- 【五线谱】重音记号、渐强记号、渐弱记号
- git报错 warning: Clone succeeded, but checkout failed.
- 遗传算法python与matlab_遗传算法之Python实现代码
- 直观理解Dilated Convolution
- POI操作excel基本使用
- java print 格式化输出_java 格式化输出方法
- SSL数字证书是什么?
- 多进程concurrent.futures的ProcessPoolExecutor的一个注意点
- BFT News|科技行业重点新闻一周概览
- 万网mysql管理_万网虚拟主机mysql/sql server数据库怎样通过DMS在线管理?
热门文章
- iptables规则的查看、添加、删除和修改
- Android 中加载网络资源时的优化 缓存和异步机制
- android拍照自动裁剪_新功能上线!智能人像抠图、图片自由裁剪,PPT 还能这么玩?...
- 计算机发现概述教案,计算机网络概述教案
- asp.net oracle参数传递,asp.net – Oracle参数问题中的链接数据库
- 装有linux的硬盘装到不同主机,把ubuntu系统安装进移动硬盘,可在不同电脑上运行...
- pb调用c语言dll,PB调用C#编写的Dll类库
- 天眼探空经济发展_【砥砺奋进的五年】观神州 惠民生:“天眼”探空惊艳全球...
- php如何防止消息被篡改,php如何用libevent处理rabbitmq发来的消息,防止消息丢失或者人为的中断导致消息没有被处理完整...
- php中post提交参数_PHP中Http协议post请求参数