QT软件开发: 获取媒体详细信息(视频/音频)

Posted DS小龙哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT软件开发: 获取媒体详细信息(视频/音频)相关的知识,希望对你有一定的参考价值。

一、环境介绍

操作系统介绍:win10 64位

QT版本: 5.12.6

编译器:  MinGW32

FFMPEG: 4.2.2

下载地址: 

二、软件效果

 三、核心代码

 3.1 widget.cpp

#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

以上是关于QT软件开发: 获取媒体详细信息(视频/音频)的主要内容,如果未能解决你的问题,请参考以下文章

安卓获取多媒体(包括 视频音频图片)数据

VoIP:如何在 Qt 多媒体中从摄像头捕获实时音频/视频流字节?

超详细Python-一键爬取图片音频视频资源

vLine 媒体会话中的视频滞后于音频

MATLAB 如何将视频和音频写入同一个文件?以视频上下颠倒为例,附带详细注释

MATLAB 如何将视频和音频写入同一个文件?以视频上下颠倒为例,附带详细注释