Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
2 changed files
with
77 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
--[[ | ||
How to use: | ||
The shortcut to adjust timing is set to ctrl+w by default. | ||
Edit your input.conf and bind "sub-step 1" and "sub-step -1" to two keys, e.g.: | ||
ctrl+z sub-step -1 | ||
ctrl+x sub-step 1 | ||
Start the video, and manually synchronize the first subtitle to audio (waiting | ||
for someone to speak and then selecting the right subtitle with ctrl+z/ctrl+x | ||
works best). Then hit ctrl+w to mark the first point. Go on to a later time | ||
where someone speaks, and synchronize the right subtitle again. Then hit ctrl+w | ||
again to mark this as the second point. The script will choose a sub-delay | ||
and sub-speed value that makes the two points you marked show the subtitles | ||
as you timed them when hitting the shortcut. | ||
Technically, this assumes: | ||
sub_time = (vid_time - sub_delay) / sub_speed | ||
which is probably what mpv does internally. Using two points in time, we can | ||
compute the required sub_delay and sub_speed to get to the two points to display | ||
the 2 subtitle events at the marked times with the same delay. | ||
]] | ||
|
||
sub_time_1 = nil | ||
vid_time_1 = nil | ||
sub_time_2 = nil | ||
vid_time_2 = nil | ||
|
||
function sub_set_time() | ||
local sub_delay = mp.get_property_native("sub-delay") | ||
local vid_time = mp.get_property_native("playback-time") | ||
local sub_speed = mp.get_property_native("sub-speed") | ||
local sub_time = (vid_time - sub_delay) / sub_speed | ||
|
||
if sub_time_1 == nil then | ||
vid_time_1 = vid_time | ||
sub_time_1 = sub_time | ||
mp.osd_message("Mark time 1") | ||
return | ||
end | ||
|
||
if sub_time_2 ~= nil then | ||
sub_time_1 = sub_time_2 | ||
vid_time_1 = vid_time_2 | ||
end | ||
|
||
if sub_time_1 == sub_time or vid_time_1 == vid_time then | ||
return | ||
end | ||
|
||
sub_time_2 = sub_time | ||
vid_time_2 = vid_time | ||
|
||
-- sub_time_1 = (vid_time_1 - delay) / speed | ||
-- sub_time_2 = (vid_time_2 - delay) / speed | ||
|
||
local new_speed = (vid_time_2 - vid_time_1) / (sub_time_2 - sub_time_1) | ||
local new_delay = vid_time_2 - sub_time_2 * new_speed | ||
|
||
print("delay=" .. tostring(new_delay) .. " speed=" .. tostring(new_speed)) | ||
|
||
mp.set_property_native("sub-delay", new_delay) | ||
mp.set_property_native("sub-speed", new_speed) | ||
end | ||
|
||
mp.add_key_binding("ctrl+w", "sub-set-time", sub_set_time) |