标签: # 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多媒体 播放视频并显示字幕相关推荐

  1. pyqt播放视频不能显示 解决

    pyqt本来播放视频能显示,后来不能显示,最终排查,找到原因: self.setAttribute(Qt.WA_TranslucentBackground, True) 后来查了一下,这句代码的意思是 ...

  2. 1.QT中播放视频,录音程序的编写

     1  通过process的方式播放视频 T22VideoPlayer.pro HEADERS += \ MyWidget.h SOURCES += \ MyWidget.cpp QT += gu ...

  3. jquery点击弹出播放视频并显示遮罩层

    最近在做视频播放的时候,发现用jquery的播放视频可以很好的实现我所需要的效果.在之前请把插件引用进来,废话不多说,代码如下: <!DOCTYPE html> <html>& ...

  4. Qt QWidget播放视频背景图片闪烁

    播放软件主窗口重新实现函数changeEvent,解决最小化之后界面不刷新问题. void VRS::changeEvent(QEvent * event) {//最小化之后再恢复到之前状态,界面会出 ...

  5. opencv播放视频实时显示帧速(FPS),即是每秒帧数

    FPS是测量用于保存.显示动态视频的信息数量.通俗来讲就是指每秒变化的画面数. getTickCount: 它返回从操作系统启动到当前所经过的毫秒数,常常用来判断某个方法执行的时间,其函数原型是DWO ...

  6. html怎么让视频只显示字幕,视频加字幕快速调整字幕显示位置 视频画面任意位置添加艺术字幕...

    快捷精确调整字幕位置,有多种方法: 方法一.通过九宫格快速定位字幕位置 通过"字体设置"栏目,"快速定位摆放的位置"处的九宫格,即可快捷定位字幕位置. 不建议仅 ...

  7. 关于KMPlayer播放器不显示字幕的解决方法

    今天用KMPlayer看时,我的srt字幕文件总是不显示,后来参考了网上的答案,把问题解决了. 解决方法:打开KMP播放器,右键-视频(高级)-视频渲染器-VMR7未渲染(HQ字幕) 参考答案:脑小胖 ...

  8. QT界面中实现视频帧显示的多种方法及应用

    QT界面中实现视频帧显示的多种方法及应用 (一) 引言 1.1 视频帧在QT界面中的应用场景 1.2 不同方法的性能和适用性分析 1.2.1 使用QLabel和QPixmap 1.2.2 使用QPai ...

  9. Unity 基础 之 在 UGUI 上简单实现VideoPlayer视频播放的功能,简单暂停播放/显示视频名称/显示时长/拖拽播放等

    Unity 基础 之 在 UGUI 上简单实现VideoPlayer视频播放的功能,简单暂停播放/显示视频名称/显示时长/拖拽播放等 目录 Unity 基础 之 在 UGUI 上简单实现VideoPl ...

最新文章

  1. [数分提高]2014-2015-2第4教学周第2次课
  2. error C2057: expected constant expression (C语言中数组的大小可以在程序运行时定义吗? )
  3. Python 字典 fromkeys()方法
  4. Java黑皮书课后题第5章:**5.7(金融应用:计算将来的学费)假设今年某大学的大学为10000美元,学费的年增长率为5%,一年后,学费将是10500美元。编写程序,计算10年后的学费,10~13费
  5. ORACLE初始化参数文件详细文档
  6. 手把手教你搭建springboot程序
  7. 对于单输入多输出系统matlab,求助!!如何把多输入多输出系统的传函转换为状态空间表达式?...
  8. yolov5模型框架详解
  9. 项目管理中成本管理相关指标
  10. MTK平台修改Bootloader源代码,让Android设备一通电就自动开机
  11. 【五线谱】重音记号、渐强记号、渐弱记号
  12. git报错 warning: Clone succeeded, but checkout failed.
  13. 遗传算法python与matlab_遗传算法之Python实现代码
  14. 直观理解Dilated Convolution
  15. POI操作excel基本使用
  16. java print 格式化输出_java 格式化输出方法
  17. SSL数字证书是什么?
  18. 多进程concurrent.futures的ProcessPoolExecutor的一个注意点
  19. BFT News|科技行业重点新闻一周概览
  20. 万网mysql管理_万网虚拟主机mysql/sql server数据库怎样通过DMS在线管理?

热门文章

  1. iptables规则的查看、添加、删除和修改
  2. Android 中加载网络资源时的优化 缓存和异步机制
  3. android拍照自动裁剪_新功能上线!智能人像抠图、图片自由裁剪,PPT 还能这么玩?...
  4. 计算机发现概述教案,计算机网络概述教案
  5. asp.net oracle参数传递,asp.net – Oracle参数问题中的链接数据库
  6. 装有linux的硬盘装到不同主机,把ubuntu系统安装进移动硬盘,可在不同电脑上运行...
  7. pb调用c语言dll,PB调用C#编写的Dll类库
  8. 天眼探空经济发展_【砥砺奋进的五年】观神州 惠民生:“天眼”探空惊艳全球...
  9. php如何防止消息被篡改,php如何用libevent处理rabbitmq发来的消息,防止消息丢失或者人为的中断导致消息没有被处理完整...
  10. php中post提交参数_PHP中Http协议post请求参数