如何自动将提交信息嵌入到我正在跟踪的字幕文件中?

Posted

技术标签:

【中文标题】如何自动将提交信息嵌入到我正在跟踪的字幕文件中?【英文标题】:How can I automatically embed commit information into a subtitles file that I'm tracking? 【发布时间】:2014-08-23 16:45:43 【问题描述】:

我使用git 来跟踪*.ass 字幕文件。 这是*.ass 文件的示例:

[Script Info]
; Script generated by Aegisub 3.1.2
; http://www.aegisub.org/
Title: Default Aegisub file
ScriptType: v4.00+

[V4+ Styles]
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour,    BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
Style: Default,Arial,20,&H00FFFFFF,&H000000FF,&H00000000,&H00000000,0,0,0,0,100,100,0,0,1,2,2,2,10,10,10,1
Style: titr,DejaVu     

Sans,20,&H007DDBFA,&H000000FF,&H00000000,&HFF000000,0,0,0,0,100,100,0,0,1,2,2,1,10,10,10,1

[Events]
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
Dialogue: 0,0:00:00.46,0:00:11.22,Default,,0,0,0,,Если это можно было бы
Dialogue: 0,0:00:03.44,0:00:08.96,titr,,0,0,0,,\pos(20,240)\fad(600,600)бывший министр

提交后,我将字幕刻录到视频中:

ffmpeg -i video.avi -vf "ass=subtitle.ass" out.avi

我的目标是在电影开始时显示 10 秒的提交日期。这应该是自动完成的。

1) 自己修改subtitle.ass就可以轻松搞定,但是commit后就不行了,还有其他原因。

2) 可以通过命令行ffmpeg 完成:How to use ffmpeg to add a text to avi video?

问题是,在这种情况下,文本将显示整部电影。

3) 我可以将 *.ass 文件复制到临时目录,插入日期,渲染和删除 *.ass 文件。

有没有更简单的方法?

【问题讨论】:

第三种方法(将提交日期添加到临时文件,使用它,然后删除它)似乎是最简单的。您能否编辑您的问题以添加您的一个 *.ass 文件的标题(例如前 20 行),以便我们知道它们是由什么组成的? 【参考方案1】:

您的第三种方法似乎很简单。这是它的一种可能实现方式。

我使用的树形结构是

$ tree
.
├── burn_sub_w_commit_date
├── sub_repo
│   └── sub.ass
└── test_video.avi

在哪里

burn_sub_w_commit_date 是一个 shell (bash) 脚本, sub.ass 是您在问题中发布的原始字幕文件, sub_repo 是一个 Git 存储库,用于跟踪您在 sub.ass 上的工作(并且包含至少一个提交), test_video.avi 只是我在 Youtube 上找到的一些视频。

这里是burn_sub_w_commit_date的内容:

#!/bin/sh
# burn last commit date with subtitles in video

# exit on any errors
set -e

# extract the head of test.ass and copy it to a temporary file
sed '/Dialogue:/,$d' sub.ass > temp_head.ass

# extract the tail of test.ass and copy it to a second temporary file
sed -n '/Dialogue:/,$p' sub.ass > temp_tail.ass

# write the commit date to a third temporary file
printf "Dialogue: 0,0:00:00.00,0:00:10.00,Default,,0,0,0,,`git log -1 --format="%cD" | sed 's/ [+\-][0-9]\4\//'`\n" > temp_mid.ass

# concatenate all three temporary files into a fourth one
cat temp_head.ass temp_mid.ass temp_tail.ass > temp.ass

# clean up (delete the first three temporary files)
rm temp_head.ass temp_tail.ass temp_mid.ass

# burn subtitles into the video
ffmpeg -i "../test_video.avi" -vf "ass='temp.ass'" "../test_video_out.avi"

# clean up (delete the last temporary file)
rm temp.ass

现在,如果你 cdtest_video/sub_repo 并运行

sh ../burn_sub_w_commit_date

在我的情况下,字幕将被刻录到视频中以及当前分支上最后一次提交的日期

Sun, 24 Aug 2014 00:01:23

一开始会显示 10 秒。

当然,您可能想要改进自动化;使脚本可执行并让它接受相关路径作为参数似乎是下一个明显的步骤......但基本思想就在那里。

【讨论】:

哦,谢谢详细解答!没有什么可以让我做的了! ))

以上是关于如何自动将提交信息嵌入到我正在跟踪的字幕文件中?的主要内容,如果未能解决你的问题,请参考以下文章

怎么把字幕放到电影里 把字幕嵌入视频

在 iOS 中将字幕嵌入到视频文件中

将文件添加到我的应用程序以跟踪帐户详细信息

如何将字幕合成视频文件里面

怎么把字幕文件嵌入视频

怎么把字幕放到电影里 把字幕嵌入视频