首页 > 编程知识 正文

qt播放音乐(qt播放mp3)

时间:2023-05-05 01:25:03 阅读:81579 作者:1641

## 一、前言

格式转换工具大部分由格式工厂等通过ffmpeg进行处理。 在ffmpeg编译之后生成的可执行文件(如ffmpeg.exe、ffplay.exe和ffprobe.exe )实际上封装了许多强大的功能。 ffprobe是一种显示媒体文件头信息的工具。特别是ffmpeg.exe,是一种可以转换任何媒体文件的强大的媒体文件转换工具,可以通过自己的音频过滤器和视频过滤器进行处理和编辑,如下所示

1 .支持的格式列表: ffmpeg -formats

2 .剪切媒体文件的一部分。 FMPEG-I输入. MP4-SS 00336000336050.0 -编解码器复印- t 20输出. MP4

3 .从视频文件中提取音频文件。 FMPEG-I输入. MP4-VN -编码解码输出. M4A

4 .视频静音,即只保留视频: ffmpeg-I input.MP4-AN-vcodeccopyoutput.MP4

5 .从MP4文件提取视频流,并导出为裸露的H264数据。 FMPEG-I输出. MP4 -开放式编码副本- BSF 3360 VH 264 _ MP4隧道输出. H264

6 .使用AAC音频数据和H264视频生成MP4文件: ffmpeg-itest.AAC-itest.h 264 -编解码器拷贝- BSF 3360 aaac _ adtstoasc-vcodec编解码器

7 .音频格式转换: ffmpeg-I输入. wav-acodeclibfdk _ AAC输出. AAC

8 .将一个MP4的文件转换为一个GIF视频: FFMPEG-I input.MP4-VF scale=100:-1-T5-R10图像. GIF

这些工具这么强大,不应该考虑直接让程序调用这些可执行文件进行处理的功能吗? 当然,QProcess出现了。 他可以直接调用可执行程序,也可以直接执行命令。 然后,可以拦截并输出打印的信息。 read以管道形式出现后,变得非常直观,可以在调用和运行可执行文件时输出所有打印信息。

## 二、功能特点

1.用多线程实时播放视频流的本地视频USB摄像头等。

支持windows linux mac,支持ffmpeg3和ffmpeg4,支持32位和64位。

3 .用多线程显示图像,不会卡在主界面上。

4 .自动重新连接网络摄像机。

5 .可以设定框的大小,即偏移量和框的颜色。

6 .可以设置是否绘制OSD标签,即标签的文本或图像和标签的位置。

7 .可以设定2种OSD的位置和样式。

8 .可以设定是否保存到文件和文件名。

9 .可以直接将文件拖动到ffmpeg小部件上进行播放。

10 .支持一般视频流,如h265视频流rtmp。

11 .可以暂停播放,继续播放。

12 .支持保存单个视频文件和计划保存的视频文件。

13 .可以定制顶部悬架,发送点击信号通知,设置是否有效。

14 .可以设定画面的拉伸填充或等比例填充。

15 .可设定的解码为速度优先、质量优先、均衡处理。

16 .可以进行视频的屏幕快照(原始图像)和屏幕快照。

17 .录像文件存储支持裸机传输和MP4文件。

18 .支持qsv、dxva2、d3d11va等硬件解码。

19 .支持OpenGL绘图视频数据,CPU占有率极低。

20 .支持嵌入式linux,交叉编译即可。

## 三、效果图

## 四、相关站点

1.国内网站: [ https://Gitee.com/Feiyang Qingyun/Qwidgetdemo ] 65https://Gitee.com/Feiyang Qingyun/Qwidgetdemo ]

2 .国际网站: [ https://Github.com/Feiyang Qingyun/Qwidgetdemo ] [ 3359 Github.com/Feiyang Qingyun/Qwidgetdemo ]

3 .个人主页: [ https://博客. csdn.net/Feiyang Qingyun ] [ https://博客. csdn.net/Feiyang Qingyun ]

知乎主页: [ https://www.zhihu.co

m/people/feiyangqingyun/](https://www.zhihu.com/people/feiyangqingyun/)

5. 体验地址:[https://blog.csdn.net/feiyangqingyun/article/details/97565652](https://blog.csdn.net/feiyangqingyun/article/details/97565652)

## 五、核心代码

FFmpegTool::FFmpegTool(QObject *parent) : QObject(parent) { //绑定信号槽 connect(&process, SIGNAL(started()), this, SIGNAL(started())); connect(&process, SIGNAL(finished(int)), this, SIGNAL(finished())); connect(&process, SIGNAL(readyReadStandardOutput()), this, SLOT(readData())); process.setProcessChannelMode(QProcess::MergedChannels); } void FFmpegTool::readData() { QString data = process.readAllStandardOutput(); emit receiveData(data); } void FFmpegTool::start(const QString &command) { process.start(command); } void FFmpegTool::start(const QString &program, const QStringList &arguments) { process.start(program, arguments); } void FFmpegTool::getMediaInfo(const QString &mediaFile, bool json) { //ffprobe -print_format json -show_streams d:/out.mp4 //不同平台可执行文件路径改成自己的 QString jsonArg = "-print_format json -show_streams"; QString binFile = qApp->applicationDirPath() + "/ffprobe.exe"; QString cmd = QString("%1 %2 %3").arg(binFile).arg(json ? jsonArg : "").arg(mediaFile); start(cmd); } void FFmpegTool::h264ToMp4ByCmd(const QString &h264File, const QString &aacFile, const QString &mp4File) { if (!QFile(h264File).exists() || mp4File.isEmpty()) { return; } //具体参数可以参考 https://www.cnblogs.com/renhui/p/9223969.html //ffmpeg.exe -y -i d:/1.aac -i d:/1.mp4 -map 0:0 -map 1:0 d:/out.mp4 //-y参数表示默认yes覆盖文件 //不同平台可执行文件路径改成自己的 QString binFile = qApp->applicationDirPath() + "/ffmpeg.exe"; //下面两种方法都可以,怎么方便怎么来 #if 0 QString cmd = QString("%1 -y -i %2 -i %3 -map 0:0 -map 1:0 %4").arg(binFile).arg(h264File).arg(aacFile).arg(mp4File); start(cmd); #else QStringList args; args << "-y"; args << "-i" << h264File; //如果存在音频文件则添加 if (QFile(aacFile).exists()) { args << "-i" << aacFile; } //args << "-map" << "0:0"; //args << "-map" << "1:0"; args << mp4File; start(binFile, args); #endif }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。