夸克缓存视频合并小工具
生活随笔
收集整理的這篇文章主要介紹了
夸克缓存视频合并小工具
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
原理
使用windows的命令行的copy命令來合并
copy /b 0+1+2+3 new.ts分析緩存目錄結構,發現都是一個m3u8文件帶一個同名文件夾
?所以分析m3u8并把原來的路徑換成這個緩存文件夾路徑并按順序合并即可。
其中碰到的難點是Qprocess在windows不好使,索性直接存成.bat批處理文件再執行
還有就是中文問題,具體在代碼里都說了。
代碼 (環境Qt5.7.0)
這是mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow>namespace Ui { class MainWindow; }class MainWindow : public QMainWindow {Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();QStringList getfiles(const QString &dir_path); private slots:void on_pushButton_clicked();void on_pushButton_2_clicked();private:Ui::MainWindow *ui; };#endif // MAINWINDOW_H這是mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h"#include <QTextCodec>#include <QDebug> #include <QFileDialog> #include <QDirIterator> #include <QProcess> #include <QFile> #include <QTextStream> #include <QMessageBox> #include <QTextCodec>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this); }MainWindow::~MainWindow() {delete ui; }void MainWindow::on_pushButton_clicked() {QString a = QFileDialog::getExistingDirectory(this,"選擇文件夾","");if(a.isEmpty()) {QMessageBox::warning(this,"注意","請選擇一個合法目錄!"); return;}QStringList aa = getfiles(a);//過濾后綴for(int i=0 ; i<aa.count() ;i++){if(!aa.at(i).contains(".m3u8")){aa[i].clear();}}aa.removeAll("");ui->comboBox->addItems(aa); }//遞歸遍歷所有文件 QStringList MainWindow::getfiles(const QString &dir_path) {QStringList get_files;QDir dir(dir_path);if(!dir.exists()){qDebug() << "it is not true dir_path";}/*設置過濾參數,QDir::NoDotAndDotDot表示不會去遍歷上層目錄*/QDirIterator dir_iterator(dir_path,QDir::Files | QDir::Dirs | QDir::NoDotAndDotDot,QDirIterator::Subdirectories);while(dir_iterator.hasNext()){dir_iterator.next();QFileInfo file_info = dir_iterator.fileInfo();QString files = file_info.absoluteFilePath();get_files.append(files);}return get_files; }//開始轉換 void MainWindow::on_pushButton_2_clicked() {QString FileName = ui->comboBox->currentText();QFileInfo fileinfo = QFileInfo(FileName);QStringList lines1,lines2;//1文件源內容;2過濾出的有效行參數///解析m3u8讀文件QFile file(FileName);if( file.open(QIODevice::ReadOnly) ){QTextStream in(&file);in.setCodec("UTF-8");while ( !in.atEnd() ){QString line = in.readLine();lines1 << line;file.close();}}else{return;}//找到所在目錄QString floder;///排序,返回順序的Qstringlist文件名for(int i=0 ; i<lines1.count() ;i++){if(lines1.at(i).contains("/storage"))//包含某共同目錄{QString temp = lines1.at(i);//更換路徑temp.replace("/storage/emulated/0/Quark/Download/","");floder = fileinfo.absolutePath() + "/" + temp.split("/").first();temp = temp.split("/").last();temp.insert(0,"\"");temp.append("\"");temp.append("+ ");lines2<<temp;}}lines2.last().replace("+","");///命令行組裝QStringList args;//切目錄args <<"cd"<<floder<<"\n";//復制指令args <<"copy /b ";for(int i=0;i<lines2.size();i++){QString temmm = lines2.at(i);args<< temmm;}QString objFilename = fileinfo.fileName().replace(".m3u8",".ts") ;objFilename = QString("%1%2%3").arg("\"").arg(objFilename).arg("\""); //QStringLiteral();args<<objFilename;args<<"\n";//復制目標視頻到指定位置args <<"copy"<<objFilename<<"\"C:\\Users\\surface\\Desktop\\cache\\\"";//必須用\這種斜杠,不然windows不認-cq20220309//刪除目錄 // args<<"del c:\a\b*.txt";QString process = args.join(" ");//對每個參數加空格qDebug()<<process;//寫命令 // QTextCodec *codec = QTextCodec::codecForLocale();QTextCodec *codec = QTextCodec::codecForName("GBK");QFile note("./temp.bat");note.remove();//刪除舊的if(note.open(QIODevice::ReadWrite | QIODevice::Text)){QByteArray encodedString = codec->fromUnicode(process);note.write(encodedString);note.close();}///執行命令行QProcess p;p.start("./temp.bat" );//輸出改名p.waitForStarted();p.waitForFinished();qDebug()<<QString::fromLocal8Bit(p.readAllStandardOutput()); //獲得輸出ui->textBrowser->append(QString::fromLocal8Bit(p.readAllStandardOutput()));//命令行拼接-- copy /b 0+1+2+3 new.ts//下一條處理if(ui->comboBox->currentIndex()+1 == ui->comboBox->count()){QMessageBox::information(this,"已經完成了","到底了");return;}ui->comboBox->setCurrentIndex(ui->comboBox->currentIndex()+1); }這是ui
總結
以上是生活随笔為你收集整理的夸克缓存视频合并小工具的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 背景调查市场现状及未来发展趋势
- 下一篇: BurpSuite的https代理原理