`
isiqi
  • 浏览: 16485485 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

调整 srt 字幕文件时间戳的程序

 
阅读更多

/***************************************************************************

* Description:
* A tool to adjust the timestamps of srt subtitle files.
* Version 0.1
* Author : wplxb
* Language: C
* Date : 2007-07-01
***************************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define MAX_LINE_LEN 400
#define TIMESTAMP_LEN 27

void print_help(char * filename)
{
printf("Usage: %s [Options] file\n", filename);
printf("Options:\n");
printf(" +sec Add sec seconds to the subtitle file specified.\n");
printf(" -sec Subtract sec seconds to the subtitle file specified.\n");
printf(" --help Display this information.\n");
printf(" -h Display this information.\n");
printf(" -? Display this information.\n");
printf("\n");
printf("Note that the adjusted subtitle will be outputed to the standard output.\n");
}

void preprocess(int argc, char *argv[])
{
char * filename = "timestamp";
char * arg1;

if (1 == argc)
{
print_help(filename);
exit(1);
}

arg1 = argv[1];

if (0 == strcmp("-h", arg1)
|| 0 == strcmp("--help", arg1)
|| 0 == strcmp("-?", arg1))
{
print_help(filename);
exit(0);
}
else if (argc < 3)
{
print_help(filename);
exit(1);
}
else if ('+' != arg1[0] && '-' != arg1[0])
{
print_help(filename);
exit(1);
}

if (strspn(arg1 + 1, "0123456789") != strlen(arg1 + 1))
{
print_help(filename);
exit(1);
}
}

int is_timestamp_line(char * line)
{
if (!line)
{
return 0;
}

line = strpbrk(line, "0123456789");
if (line)
{
if (strlen(line) >= TIMESTAMP_LEN
&& ':' == line[2]
&& ':' == line[5]
&& ',' == line[8])
{
return 1;
}
}

return 0;
}

int main(int argc, char * argv[])
{
FILE * srt;
int seconds;
char timestamp_line[MAX_LINE_LEN];

preprocess(argc, argv);

seconds = atoi(argv[1] + 1);
if ('-' == argv[1][0])
{
seconds = -seconds;
}


if (NULL == (srt = fopen(argv[2], "r")))
{
printf("Can't open file \"%s\"!\n", argv[2]);
exit(errno);
}

/* The real process starts here. */
while (fgets(timestamp_line, sizeof(timestamp_line), srt))
{
if (is_timestamp_line(timestamp_line))
{
int start_hour;
int start_minute;
int start_second;
int start_millisecond;
int start_time;
int end_hour;
int end_minute;
int end_second;
int end_millisecond;
int end_time;

sscanf(timestamp_line, "%d", &start_hour);
sscanf(timestamp_line + 3, "%d", &start_minute);
sscanf(timestamp_line + 6, "%d", &start_second);
sscanf(timestamp_line + 9, "%d", &start_millisecond);
start_time = start_hour;
start_time = start_time * 60 + start_minute;
start_time = start_time * 60 + start_second;
start_time += seconds;
start_second = start_time % 60;
start_time /= 60;
start_minute = start_time % 60;
start_time /= 60;
start_hour = start_time;

sscanf(timestamp_line + 17, "%d", &end_hour);
sscanf(timestamp_line + 20, "%d", &end_minute);
sscanf(timestamp_line + 23, "%d", &end_second);
sscanf(timestamp_line + 26, "%d", &end_millisecond);
end_time = end_hour;
end_time = end_time * 60 + end_minute;
end_time = end_time * 60 + end_second;
end_time += seconds;
end_second = end_time % 60;
end_time /= 60;
end_minute = end_time % 60;
end_time /= 60;
end_hour = end_time;

printf("%02d:%02d:%02d,%03d --> %02d:%02d:%02d,%03d\n",
start_hour, start_minute, start_second, start_millisecond,
end_hour, end_minute, end_second, end_millisecond);
}
else
{
printf("%s", timestamp_line);
}
}

fclose(srt);

return 0;
}
分享到:
评论

相关推荐

    SRT的整体调整小工具

    标题中的"SRT的整体调整小工具"指的是一个专用于调整SRT字幕文件时间戳的工具。SRT(SubRip Subtitle)是一种常见的字幕文件格式,广泛应用于视频字幕的制作和编辑。这个工具的设计目标是让用户能够方便地整体提前或...

    SRT字幕调整器By知了(带源码)

    标题中的"SRT字幕调整器By知了(带源码)"表明这是一个专门用于调整SRT字幕格式的软件,并且附带了源代码。SRT(SubRip Text)是一种常用的字幕文件格式,主要用于电影、视频等媒体的字幕同步。开发者“知了”发现...

    Srt字幕整体时间调整工具

    总的来说,Srt字幕整体时间调整工具为用户提供了便捷的方式来调整SRT字幕的显示时间,确保字幕与视频的完美同步。尽管压缩包中的其他文件可能并非直接与字幕调整相关,但它们展示了用户可能接触到的不同类型的数字...

    批量修改字幕文件时间小工具

    SRT是一种常见的字幕文件格式,包含时间代码和对应的字幕文本,用户可以使用这个工具对其进行时间调整。 批量处理字幕文件的时间信息对于字幕翻译团队、字幕爱好者或者需要自定义字幕同步的用户来说非常实用。通过...

    android 外挂字幕,目前仅支持SRT格式

    "android 外挂字幕,目前仅支持SRT格式"这一标题揭示了这个项目专注于实现对SRT(SubRip)字幕文件的支持。SRT是一种常见的字幕格式,其结构简单,易于读写,因此成为许多应用程序的首选。 描述中提到,开发者可以...

    修改SRT字幕的软件

    标题中的“修改SRT字幕的软件”指的是用于编辑和调整SRT字幕格式的工具。SRT(SubRip Text)是一种常见的字幕文件格式,广泛用于视频字幕制作和本地化。这类软件通常具备的功能包括时间轴调整、文本编辑、格式规范等...

    电影字幕处理程序,对srt格式的字幕进行处理,更改其显示的时间

    总的来说,电影字幕处理程序是针对srt字幕文件的一种实用工具,其核心功能在于调整字幕的显示时间。借助直观的GUI界面,用户可以轻松完成字幕同步工作,提升观影享受。无论是个人娱乐还是专业制作,这样的软件都能...

    基于python的srt字幕合并.rar

    在本项目"基于python的srt字幕合并.rar"中,我们探讨的是如何利用Python来自动合并SRT字幕文件。SRT(SubRip Text)是一种常见的字幕格式,广泛用于电影、视频和电视节目,便于为听障人士或非母语观众提供字幕服务。...

    python编写的纯文本txt转字幕文件srt/ass格式程序

    概述:本程序使用python编写,其中UI使用pyqt5编写,主要功能是将纯文本txt内容的文字转换为SRT或者ASS格式的字幕文件,适合于制作短视频时额外字幕的制作。有些视频编辑工具,字幕添加比较麻烦,本程序可以单独对...

    Krc转Lrc,Lrc转Srt工具

    SRT(SubRip Subtitle)文件则广泛应用于视频字幕,它包含了一连串的子标题序列,每个序列都有起始和结束时间,以及对应的字幕文本。SRT格式被多数视频播放器支持,是国际上比较通用的字幕格式。 "KrcLrc2srt.exe...

    校准电影字幕的时间,视音频与字幕同步

    调整时间.exe`可能是一个程序,用于手动或自动调整SRT文件中每个字幕条目的时间戳。用户可以输入新的起始和结束时间,或者程序根据音频分析自动同步字幕。 3. **编号调整**:在某些情况下,字幕的顺序可能会出错,`...

    Python-srtsync基于视频中语音活动的字幕自动同步器

    为了更好地使用srtsync,开发者需要了解一些基础知识,如音频处理的基本概念,SRT字幕文件的格式,以及Python编程基础。此外,熟悉NumPy和SciPy等科学计算库将有助于理解其内部算法。srtsync的源代码也是学习的好...

    视频加字幕64位应用程序

    程序支持多种字幕格式的导入,如SRT、ASS、VTT等,这些都是常见的字幕文件类型,广泛应用于各种视频编辑软件和播放器中。 字幕编辑功能强大,不仅允许用户输入文字,还支持字体、大小、颜色、位置的自定义调整,以...

    播放器加载字幕软件.rar

    字幕文件一般以特定的格式存在,如SRT、ASS、SSA、VTT等。这些文件包含了时间戳和对应的文本,播放器通过读取这些时间戳来在正确的时间点显示相应的文字。 "vobsub223.exe" 是压缩包中的主要程序,这可能是一款名为...

    火鸟字幕合并器

    然后,通过软件导入这些分隔的字幕文件,程序会自动检测并尝试合并它们。用户可能需要按照软件的提示进行操作,比如选择输入文件、设置输出格式和路径,以及进行预览以检查合并后的效果。 字幕合并的过程中,可能...

    字幕叠加的简单实现 vc实现

    6. **用户界面**:为了实现“亲临卡拉OK现场”的效果,可能还需要一个用户友好的界面,让用户能够加载字幕文件、调整字幕位置、颜色等参数,甚至实时预览效果。 总结起来,使用VC++实现字幕叠加涉及多个层面的技术...

    SubValidator:将字幕文件从英语翻译成其他语言时,有时必须更改时间。 该程序通过报告与计时相关的错误来验证完成的翻译字幕文件(例如,字幕在同一时间运行,或者开始时间晚于结束时间)

    3. **格式兼容性**:SubValidator 支持多种字幕文件格式,如 SRT、ASS 和 VTT 等,这些都是常见的字幕文件格式。这意味着它能够处理多种来源的字幕文件,适应不同的项目需求。 4. **错误报告**:程序会生成详细的...

    卡拉OK字幕

    - SRT或LRC格式:兼容标准字幕文件格式,方便用户导入导出。 - 音乐库集成:连接在线音乐平台,自动获取歌词和音频。 综上所述,“卡拉OK字幕”项目涉及歌词处理、时间同步、动画设计、用户界面开发等多个方面,...

    C#实现滚动字幕完整源码-W6F.rar

    - **字幕格式支持**:如果需要处理不同格式的字幕文件(如SRT、ASS),需要解析这些文件,将字幕内容按时间戳和文本分组,然后在适当的时间触发滚动。 - **多行滚动**:为了支持多行字幕,可以使用多个Label或Text...

    ass2srt.vbs(ass/ssa批量转换srt的脚本)

    在介绍的脚本文件ass2srt.vbs中,脚本的主要功能是批量将ASS或SSA格式的字幕文件转换为SRT格式。这个脚本使用了Windows Script Host(WSH)环境,WSH允许通过脚本文件来调用各种Windows资源,比如文件系统、注册表等...

Global site tag (gtag.js) - Google Analytics