天天看點

QT軟體開發: 擷取媒體詳細資訊(視訊/音頻)

一、環境介紹

作業系統介紹:win10 64位

QT版本: 5.12.6

編譯器:  MinGW32

FFMPEG: 4.2.2

下載下傳位址: 

二、軟體效果
QT軟體開發: 擷取媒體詳細資訊(視訊/音頻)
QT軟體開發: 擷取媒體詳細資訊(視訊/音頻)
 ​三、核心代碼  3.1 widget.cpp

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      

繼續閱讀