ฉันได้เพิ่มคำตอบที่สองนี้เพราะมันทำงานเป็นเพลย์ลิสต์ปกติใน SMPlayer และดีกว่าที่นี่เพื่อความชัดเจน ...
ฉันได้ทำงานอย่างไม่มีที่ติผ่านเพลย์ลิสต์ ...
วิธีนี้ต้องการการรวบรวมใหม่ของ SMPlayer และวิธีการตั้งชื่อไฟล์ที่เฉพาะเจาะจง ... มีการแก้ไขฟังก์ชันเดียวในแหล่งที่มาของ SMPlayer และมีการเพิ่มส่วนหัว 3 ส่วนลงในไฟล์ต้นฉบับเดียว ... ฉันได้รวบรวมsmplayer_0.6.8
สำหรับ Lucid .. . Maveric และ Meerkat ใช้smplayer_0.6.9
.. หนึ่งบรรทัดในรุ่นที่ใหม่กว่านั้นแตกต่างกัน แต่นั่นไม่ได้ทำให้เสียอะไรเลย ... นี่คือฟังก์ชั่นการแก้ไขและส่วนหัวของsmplayer_0.6.8
btw, กล่องโต้ตอบ zenity ในคำตอบก่อนหน้าของฉันยังคงใช้สำหรับการบันทึกเวลาเริ่มต้นและสิ้นสุด ...
คำเตือน - ส่วนของแหล่งข้อมูลต่อไปนี้มีไว้สำหรับsmplayer_0.6.8
... ไฟล์ที่จะแก้ไขคือ: ../smplayer-0.6.9/src/findsubtitles/osparser.cpp
... ส่วนใหม่นั้นเหมือนกันสำหรับ '0.6.8' และ '0.6.9' แต่ต้นฉบับนั้นต่างกันหนึ่งบรรทัด (ใกล้กับ ท้ายที่สุดก่อนสุดท้ายreturn hexhash;
)
เพิ่มบล็อกแรกของบรรทัดด้านล่าง#include
ส่วนหัว ที่มีอยู่ทันที
// ====================
// fred mod begin block
#include <QFileInfo>
#include <QRegExp>
#include <QSettings>
#include "paths.h"
// fred mod end block
// ==================
นี่คือฟังก์ชั่นการปรับเปลี่ยน
QString OSParser::calculateHash(QString filename) {
QFile file(filename);
if (!file.exists()) {
qWarning("OSParser:calculateHash: error hashing file. File doesn't exist.");
return QString();
}
file.open(QIODevice::ReadOnly);
QDataStream in(&file);
in.setByteOrder(QDataStream::LittleEndian);
quint64 size=file.size ();
quint64 hash=size;
quint64 a;
for(int i = 0; i < 8192; i++) {
in >> a ; hash += a;
};
file.seek(size-65536);
for(int i = 0; i < 8192; i++) {
in >> a ; hash += a;
};
// =====================================================================
// fred mod begin block
//
// A mod to enable unique smplayer .ini files to be created for
// content-identical media files whose file-names match
// a specific pattern based on two timestamps.
// This is the naming pattern:
//
// name.[00:11:22].[33.44.55].mkv
//
// The two time stamps indicate the start and end points of a
// clip to be played according to settings in the unique .ini
//
// The so named files can be, and typically will be, soft (or hard) links.
// The "original" file can also named in this manner, if you like,
// but that would make the "original" start playing as a clip,
// NOTE: soft links become invalid when you rename the original file.
//
// Note: For this system to work, you need to enable the following:
// In SMPlayer's GUI, open the Options dialog...
// In the "General" tab... "Media settings"...
// enable: 〼 "Remember settings for all files (audio track, subtitles...)"
// "Remember time position" can be 'on' or 'off'; it is optional1
// but it is disabled for these clips.
// "Store setings in" must be: "multiple ini files"
//
QFileInfo fi(filename);
QString name = fi.fileName();
//
// ===================================================================
// This RegExp expects a name-part,
// followed by 2 .[timestamps] (Begin-time and End-time)
// followed by a .extension
//
// .[ Begin ].[ End ]
// eg. name.[00:11:22].[33.44.55].mkv
//
// Note: The delimiter between each numeric value can be any non-numeric character.
// The leading dot '.' and square brackets '[]' must be as shown
// HH, MM, and SS must each be 2 valid time-digits
//
QRegExp rx("^.+" // NAME
"\\.\\[([0-9][0-9])[^0-9]" // .[HH.
"([0-5][0-9])[^0-9]" // mm.
"([0-5][0-9])\\]" // ss]
"\\.\\[([0-9][0-9])[^0-9]" // .[HH.
"([0-5][0-9])[^0-9]" // mm.
"([0-5][0-9])\\]" // ss]
"\\.([^0-9]+)$"); // .EXTN
//
QString qstrIni;
rx.setPatternSyntax(QRegExp::RegExp);
if(rx.exactMatch(name)) {
bool ok;
QString qstrDlm(".");
QString qstrBegEnd = rx.cap(1) + rx.cap(2) + rx.cap(3)
+ rx.cap(4) + rx.cap(5) + rx.cap(6);
hash += qstrBegEnd.toLongLong(&ok,10); // The UNIQUE-FIER
//
quint32 quiBegSec=(rx.cap(1).toULong(&ok,10)*3600)
+(rx.cap(2).toULong(&ok,10)* 60)
+(rx.cap(3).toULong(&ok,10));
quint32 quiEndSec=(rx.cap(4).toULong(&ok,10)*3600)
+(rx.cap(5).toULong(&ok,10)* 60)
+(rx.cap(6).toULong(&ok,10));
quint32 quiDifSec=(quiEndSec-quiBegSec);
//
QString qstrBegIni = "-ss " + QString::number(quiBegSec);
QString qstrEndIni = "-endpos " + QString::number(quiDifSec);
qstrIni = qstrBegIni + " " + qstrEndIni;
}
// fred mod end block
// =====================================================================
// fred NOTE: the following 2 lines are a single line in smplayer-0.6.9
QString hexhash("");
hexhash.setNum(hash,16);
// =====================================================================
// fred mod begin block
if( !qstrIni.isEmpty() ) {
// ** The next code line is not ideal, but should be okay so long
// as SMPlayer's options are set to use Multiple .ini files.
// The literal "file_settings" is HARDCODED, as It wasnt' straight
// forward to get the value, The rest of the path was easily available
// without any significant mods, which "file_settings" would require.
// TODO: Check for Multiple .ini Option being enabled.
//
QString dir_settings = Paths::configPath() + "/file_settings";
QString fqfn_settings = dir_settings + "/" + hexhash[0] + "/" + hexhash + ".ini";
QSettings set(fqfn_settings, QSettings::IniFormat);
set.beginGroup("file_settings");
set.setValue( "starting_time", "0" );
set.setValue( "mplayer_additional_options", qstrIni );
}
// fred mod end block
// =====================================================================
return hexhash;
}
flag
ปุ่มบนคำถามของคุณและขอให้ทำการโยกย้าย