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
질문에 있는 버튼을 사용하여 마이그레이션을 요청하십시오.