我使用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
本身可以轻松完成,但在提交后我无法完成,还有其他原因。
2)可以通过ffmpeg
从命令行完成:How to use ffmpeg to add a text to avi video?
问题是,在这种情况下,将显示整个电影长度的文本。
3)我可以将* .ass文件复制到临时目录,插入日期,渲染和删除* .ass文件。
有更简单的方法吗?
答案 0 :(得分:2)
你的第三种方法似乎很容易。这是一个可能的实现。
我使用的树结构是
$ 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
现在,如果您cd
到test_video/sub_repo
并运行
sh ../burn_sub_w_commit_date
在我的情况下,字幕将刻录到视频和当前分支上次提交的日期
Sun, 24 Aug 2014 00:01:23
将在一开始显示10秒钟。
当然,您可能希望改善自动化;使脚本可执行并让它接受相关路径作为参数似乎是下一个明显的步骤......但基本的想法就在那里。