一、环境介绍
操作系统介绍:win10 64位
QT版本: 5.12.6
编译器: MinGW32
FFMPEG: 4.2.2
下载地址:
三、核心代码
1.#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); ui->plainTextEdit->setReadOnly(true); this->setWindowTitle("获取媒体文件信息(支持拖动文件到窗口里)"); setAcceptDrops(true); } Widget::~Widget() { delete ui; } /* 工程: GetMediaInformation 日期: 2021-07-23 作者: DS小龙哥 环境: win10 QT5.12.6 MinGW32 功能: 选择路径 */ void Widget::on_pushButton_select_clicked() { QString filename=QFileDialog::getOpenFileName(this,"选择打开的文件","C:/",tr("*.*")); //filename==选择文件的绝对路径 LoadName(filename); } /* 工程: GetMediaInformation 日期: 2021-07-23 作者: DS小龙哥 环境: win10 QT5.12.6 MinGW32 功能: 传入媒体名称 */ void Widget::LoadName(QString in_file) { if(!in_file.isEmpty()) { ui->lineEdit_info->setText(in_file); QString json=MediainFormation(in_file); ui->plainTextEdit->clear(); ui->plainTextEdit->insertPlainText(json); } } /* 工程: GetMediaInformation 日期: 2021-07-23 作者: DS小龙哥 环境: win10 QT5.12.6 MinGW32 功能: 获取媒体信息 */ QString Widget::MediainFormation(QString in_file) { QString ffmpeg_path=QCoreApplication::applicationDirPath(); //QString strCmd="C:/FFMPEG/ffmpeg_x86_4.2.2/bin/ffprobe.exe -v quiet -of json -i D:/jiyi.mp4 -show_streams"; ffmpeg_path+="ffmpeg422/"; QString strCmd=QString("ffmpeg422/ffprobe.exe -v quiet -of json -i \"%1\" -show_streams").arg(in_file); qDebug()<<"strCmd:"<<strCmd; QProcess process; // process.setWorkingDirectory(ffmpeg_path); // process.setReadChannel(QProcess::StandardOutput); process.start(strCmd); process.waitForFinished(); return process.readAll(); } void Widget::dragEnterEvent(QDragEnterEvent *e) { if (e->mimeData()->hasUrls()) { e->acceptProposedAction(); } } void Widget::dropEvent(QDropEvent *e) { foreach (const QUrl &url, e->mimeData()->urls()) { QString fileName = url.toLocalFile(); LoadName(fileName); } }
3.2 widget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QFileDialog> #include <QProcess> #include <QCoreApplication> #include <QDebug> #include <QDragEnterEvent> #include <QUrl> #include <QMimeData> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE class Widget : public QWidget { Q_OBJECT public: Widget(QWidget *parent = nullptr); ~Widget(); QString MediainFormation(QString in_file); void LoadName(QString in_file); private slots: void on_pushButton_select_clicked(); protected: void dragEnterEvent(QDragEnterEvent *e); void dropEvent(QDropEvent *e); private: Ui::Widget *ui; }; #endif // WIDGET_H