• 大小: 25KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-06-07
  • 语言: C/C++
  • 标签: 字幕  SRT  SSA  ASS  SMI  

资源简介

SRT SSA ASS SMI视频字幕文件解析程序,C++ 支持入口文件:SubtitleParser.cpp

资源截图

代码片段和文件信息

//////////////////////////////////////////////////////////////////////////
//
// smiparse.cpp
//////////////////////////////////////////////////////////////////////////

#include “stdafx.h“
#include “smiparser.h“

CSmiParse::CSmiParse() : m_langid(0)
{

}

CSmiParse::~CSmiParse()
{
Destroy();
}

BOOL CSmiParse::HasSmiSubtitle(wchar_t* strFileName)
{
wchar_t* p1 = wcsrchr(strFileName L‘.‘);

wchar_t strTmp1[256] = {0};
wcsncpy(strTmp1 strFileName p1 - strFileName);

wchar_t smifile[256];
swprintf(smifile L“%s.smi“ strTmp1);

HANDLE hFile = CreateFileW(smifile GENERIC_READ FILE_SHARE_READ NULL OPEN_EXISTING FILE_ATTRIBUTE_NORMAL NULL);
if(hFile == INVALID_HANDLE_VALUE)
{
return FALSE;
}

BOOL bRet = TRUE;

BYTE* pBuf = new BYTE[1024];
DWORD dwRead;

BOOL bSYNCStart = FALSE;

do
{
ReadFile(hFile pBuf 2 &dwRead NULL);
if(dwRead < 2)
{
bRet = FALSE;
break;
}

if(pBuf[0] == 0xff && pBuf[1] == 0xfe)
{
m_encoding = unicode;

//
ReadFile(hFile pBuf 16 &dwRead NULL);
if(dwRead < 16)
{
bRet = FALSE;
break;
}

wchar_t* p2 = (wchar_t*)pBuf;
if(_wcsnicmp(p2 L““ 6) != 0)
{
bRet = FALSE;
break;
}
}
else
{
m_encoding = ascii;
//
ReadFile(hFile pBuf + 2 6 &dwRead NULL);
if(dwRead < 6)
{
bRet = FALSE;
break;
}

char* p2 = (char*)pBuf;
if(_strnicmp(p2 ““ 6) != 0)
{
bRet = FALSE;
break;
}
}

//////////////////////////////////////////////////////////////////////////
//
subtext* pSubtext = NULL;
subtext::subitem* si;

while(ReadLine(hFile pBuf))
{
wchar_t tmptext[512] = {0};
if(m_encoding == unicode)
{
wcscpy(tmptext (wchar_t*)pBuf);
}
else
{
//MultiByteToWideChar(Core_GetDefCodePage() 0 (char*)pBuf strlen((char*)pBuf) tmptext 512);
MultiByteToWideChar(CMT_Pub::GetLangCodePage(g_PubSetting.uCurLang) 0 (char*)pBuf strlen((char*)pBuf) tmptext 512);
}

wchar_t* p3 = (wchar_t*)tmptext;

do
{
int len = wcslen(p3);

// language mark
if(p3[0] == L‘.‘)
{
LangMark lm;

// mark
wchar_t* mark = lm.langid;
mark[0] = L‘\0‘;
int i1 = 1;
for(; i1 < len; i1++)
{
if(p3[i1] != L‘ ‘)
{
*mark++ = p3[i1];
}
else
{
*mark++ = L‘\0‘;
break;
}
}

// name
wchar_t* name = lm.lang;
name[0] = L‘\0‘;
int i2 = i1;
for(; i2 < len; i2++)
{
if(_wcsnicmp(p3 + i2 L“Name:“ 4) == 0)
{
int i3 = i2 + 5;
for(; i3 < len; i3++)
{
if(isalpha(p3[i3]))
{
break;
}
}

int i4 = i3;
for(; i4 < len; i4++)
{
if(!isalpha(p3[i4]))
{
*name++ = L‘\0‘;
br

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       2300  2011-09-06 23:01  SubtitleParser.cpp

     文件       1413  2011-09-06 23:01  SubtitleParser.h

     文件       8276  2011-09-06 23:01  SmiParser.cpp

     文件       1130  2010-12-29 12:08  SmiParser.h

     文件      11008  2011-09-06 23:02  SrtParser.cpp

     文件       1254  2010-04-08 11:43  SrtParser.h

     文件      26128  2011-09-06 23:02  SsaParser.cpp

     文件       1288  2010-04-08 11:43  SsaParser.h

     文件      24749  2010-04-07 19:02  WxList.cpp

     文件      20087  2010-04-07 19:02  WxList.h

----------- ---------  ---------- -----  ----

                97633                    10


评论

共有 条评论