Sync subtitles: Difference between revisions
Content added Content deleted
m (→{{header|Phix}}: and a floor(milliseconds) issue.) |
(→{{header|Phix}}: Added Wren) |
||
Line 214: | Line 214: | ||
00:02:13,416 --> 00:02:16,419 |
00:02:13,416 --> 00:02:16,419 |
||
00:02:16,503 --> 00:02:20,048 |
00:02:16,503 --> 00:02:20,048 |
||
With our advanced technology, I shrank it down. |
|||
</pre> |
|||
=={{header|Wren}}== |
|||
{{libheader|Wren-date}} |
|||
{{libheader|Wren-ioutil}} |
|||
<syntaxhighlight lang="wren">import "./date" for Date |
|||
import "./ioutil" for File, FileUtil |
|||
var syncSubtitles = Fn.new { |fileIn, fileOut, secs| |
|||
var nl = FileUtil.lineBreak |
|||
var fmt = "hh|:|MM|:|ss|,|ttt" |
|||
var f = File.create(fileOut) |
|||
for (line in FileUtil.readLines(fileIn)) { |
|||
if (line.contains("-->")) { |
|||
var start = line[0..11] |
|||
var startDate = Date.parse(start, fmt).addSeconds(secs) |
|||
start = startDate.format(fmt) |
|||
var end = line[17..28] |
|||
var endDate = Date.parse(end, fmt).addSeconds(secs) |
|||
end = endDate.format(fmt) |
|||
f.writeBytes(start + " --> " + end + nl) |
|||
} else { |
|||
f.writeBytes(line + nl) |
|||
} |
|||
} |
|||
f.close() |
|||
} |
|||
System.print("After fast-forwarding 9 seconds:\n") |
|||
syncSubtitles.call("movie.srt", "movie_corrected.srt", 9) |
|||
System.print(File.read("movie_corrected.srt")) |
|||
System.print("After rolling-back 9 seconds:\n") |
|||
syncSubtitles.call("movie.srt", "movie_corrected2.srt", -9) |
|||
System.print(File.read("movie_corrected2.srt"))</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
After fast-forwarding 9 seconds: |
|||
1 |
|||
00:01:40,550 --> 00:01:45,347 |
|||
Four billion years ago, |
|||
the first marine life forms. |
|||
2 |
|||
00:01:45,555 --> 00:01:51,019 |
|||
First came the fish...then slowly |
|||
other life forms evolved. |
|||
3 |
|||
00:01:51,144 --> 00:01:52,979 |
|||
Therefore, our ancestors... |
|||
4 |
|||
00:01:52,979 --> 00:01:54,898 |
|||
...came from fish. |
|||
5 |
|||
00:01:55,232 --> 00:01:56,608 |
|||
Everyone, come and see this. |
|||
6 |
|||
00:01:56,733 --> 00:01:59,361 |
|||
Cretaceous Tyrannosaurus. |
|||
7 |
|||
00:01:59,736 --> 00:02:01,488 |
|||
Ferocious! |
|||
8 |
|||
00:02:07,035 --> 00:02:07,869 |
|||
Red, |
|||
9 |
|||
00:02:08,203 --> 00:02:09,079 |
|||
Pong! |
|||
10 |
|||
00:02:11,540 --> 00:02:12,999 |
|||
Isn't this a gecko? |
|||
11 |
|||
00:02:13,416 --> 00:02:16,419 |
|||
How else can I get a 15 ton T-Rex in here? |
|||
12 |
|||
00:02:16,503 --> 00:02:20,048 |
|||
With our advanced technology, I shrank it down. |
|||
After rolling-back 9 seconds: |
|||
1 |
|||
00:01:22,550 --> 00:01:27,347 |
|||
Four billion years ago, |
|||
the first marine life forms. |
|||
2 |
|||
00:01:27,555 --> 00:01:33,019 |
|||
First came the fish...then slowly |
|||
other life forms evolved. |
|||
3 |
|||
00:01:33,144 --> 00:01:34,979 |
|||
Therefore, our ancestors... |
|||
4 |
|||
00:01:34,979 --> 00:01:36,898 |
|||
...came from fish. |
|||
5 |
|||
00:01:37,232 --> 00:01:38,608 |
|||
Everyone, come and see this. |
|||
6 |
|||
00:01:38,733 --> 00:01:41,361 |
|||
Cretaceous Tyrannosaurus. |
|||
7 |
|||
00:01:41,736 --> 00:01:43,488 |
|||
Ferocious! |
|||
8 |
|||
00:01:49,035 --> 00:01:49,869 |
|||
Red, |
|||
9 |
|||
00:01:50,203 --> 00:01:51,079 |
|||
Pong! |
|||
10 |
|||
00:01:53,540 --> 00:01:54,999 |
|||
Isn't this a gecko? |
|||
11 |
|||
00:01:55,416 --> 00:01:58,419 |
|||
How else can I get a 15 ton T-Rex in here? |
|||
12 |
|||
00:01:58,503 --> 00:02:02,048 |
|||
With our advanced technology, I shrank it down. |
With our advanced technology, I shrank it down. |
||
</pre> |
</pre> |
Revision as of 07:57, 15 June 2024
Sync subtitles
You are encouraged to solve this task according to the task description, using any language you may know.
You are encouraged to solve this task according to the task description, using any language you may know.
Sync subtitles
Sync subtitles
Sometimes, when you download a movie, the subtitles are out of sync with the audio in this movie. Video players like VLC solve the problem, but it must be done manually.
Make a program that takes the "movie.srt" file, and synchronizes the subtitles "n" seconds.
- Try to fast-forward the subtitles by 9 seconds.
- Try rolling back the subtitles by 9 seconds.
Take the excerpt from the following subtitles file as an example:
movie.srt
1 00:01:31,550 --> 00:01:36,347 Four billion years ago, the first marine life forms. 2 00:01:36,555 --> 00:01:42,019 First came the fish...then slowly other life forms evolved. 3 00:01:42,144 --> 00:01:43,979 Therefore, our ancestors... 4 00:01:43,979 --> 00:01:45,898 ...came from fish. 5 00:01:46,232 --> 00:01:47,608 Everyone, come and see this. 6 00:01:47,733 --> 00:01:50,361 Cretaceous Tyrannosaurus. 7 00:01:50,736 --> 00:01:52,488 Ferocious! 8 00:01:58,035 --> 00:01:58,869 Red, 9 00:01:59,203 --> 00:02:00,079 Pong! 10 00:02:02,540 --> 00:02:03,999 Isn't this a gecko? 11 00:02:04,416 --> 00:02:07,419 How else can I get a 15 ton T-Rex in here? 12 00:02:07,503 --> 00:02:11,048 With our advanced technology, I shrank it down.
Amazing Hopper
#include <basico.h>
algoritmo
fd=0
abrir para leer ( "movie.srt", fd )
iterar
s="", t1=0, t2=0, s1=0, s2=0
usando '1000', leer línea desde 'fd', mover a 's'
cuando ( "-->", está exactamente en 's' ){
[1:8] obtener de 's', ---copiar en 's1'---
convertir a segundos, sumarle '9', convertir a hora, guardar en 't1'
[18:25] obtener de 's', ---copiar en 's2'---
convertir a segundos, sumarle '9', convertir a hora, guardar en 't2'
transformar(s1,t1,s), guardar en 's'
transformar(s2,t2,s), guardar en 's'
}
imprimir ( s, "\n")
mientras ' no sea fin de archivo (fd ) '
cerrar archivo 'fd'
terminar
- Output:
$ hopper3 basica/modsrt.bas > movie_corrected.srt $ cat movie_corrected.srt 1 00:01:40,550 --> 00:01:45,347 Four billion years ago, the first marine life forms. 2 00:01:45,555 --> 00:01:51,019 First came the fish...then slowly other life forms evolved. 3 00:01:51,144 --> 00:01:52,979 Therefore, our ancestors... 4 00:01:52,979 --> 00:01:54,898 ...came from fish. 5 00:01:55,232 --> 00:01:56,608 Everyone, come and see this. 6 00:01:56,733 --> 00:01:59,361 Cretaceous Tyrannosaurus. 7 00:01:59,736 --> 00:02:01,488 Ferocious! 8 00:02:07,035 --> 00:02:07,869 Red, 9 00:02:08,203 --> 00:02:09,079 Pong! 10 00:02:11,540 --> 00:02:12,999 Isn't this a gecko? 11 00:02:13,416 --> 00:02:16,419 How else can I get a 15 ton T-Rex in here? 12 00:02:16,503 --> 00:02:20,048 With our advanced technology, I shrank it down.
Phix
Needed a bugfix to adjust_timedate() for time-only handling, in that a y,m,d of 0,0,0 pre-dates the introduction of the Gregorian calendar. There was also a floor(milliseconds) which should have been/is now round(milliseconds). Fixes can be grabbed from github if needed.
requires("1.0.6") -- (a time-only handling bugfix in adjust_timedate)
constant movie_srt = `
1
00:01:31,550 --> 00:01:36,347
Four billion years ago,
00:01:36,555 --> 00:01:42,019
00:01:42,144 --> 00:01:43,979
00:01:43,979 --> 00:01:45,898
00:01:46,232 --> 00:01:47,608
00:01:47,733 --> 00:01:50,361
00:01:50,736 --> 00:01:52,488
00:01:58,035 --> 00:01:58,869
00:01:59,203 --> 00:02:00,079
00:02:02,540 --> 00:02:03,999
00:02:04,416 --> 00:02:07,419
00:02:07,503 --> 00:02:11,048
With our advanced technology, I shrank it down.
`,
sep = ` --> `,
fmt = `hh:mm:ss,ms`
include timedate.e
for line in split(movie_srt,'\n') do
if match(sep,line) then
line = split(line,sep)
for i,t in line do
timedate td = parse_date_string(t,{fmt})
line[i] = format_timedate(adjust_timedate(td,9),fmt)
end for
line = join(line,sep)
end if
printf(1,"%s\n",line)
end for
- Output:
1 00:01:40,550 --> 00:01:45,347 Four billion years ago, 00:01:45,555 --> 00:01:51,019 00:01:51,144 --> 00:01:52,979 00:01:52,979 --> 00:01:54,898 00:01:55,232 --> 00:01:56,608 00:01:56,733 --> 00:01:59,361 00:01:59,736 --> 00:02:01,488 00:02:07,035 --> 00:02:07,869 00:02:08,203 --> 00:02:09,079 00:02:11,540 --> 00:02:12,999 00:02:13,416 --> 00:02:16,419 00:02:16,503 --> 00:02:20,048 With our advanced technology, I shrank it down.
Wren
import "./date" for Date
import "./ioutil" for File, FileUtil
var syncSubtitles = Fn.new { |fileIn, fileOut, secs|
var nl = FileUtil.lineBreak
var fmt = "hh|:|MM|:|ss|,|ttt"
var f = File.create(fileOut)
for (line in FileUtil.readLines(fileIn)) {
if (line.contains("-->")) {
var start = line[0..11]
var startDate = Date.parse(start, fmt).addSeconds(secs)
start = startDate.format(fmt)
var end = line[17..28]
var endDate = Date.parse(end, fmt).addSeconds(secs)
end = endDate.format(fmt)
f.writeBytes(start + " --> " + end + nl)
} else {
f.writeBytes(line + nl)
}
}
f.close()
}
System.print("After fast-forwarding 9 seconds:\n")
syncSubtitles.call("movie.srt", "movie_corrected.srt", 9)
System.print(File.read("movie_corrected.srt"))
System.print("After rolling-back 9 seconds:\n")
syncSubtitles.call("movie.srt", "movie_corrected2.srt", -9)
System.print(File.read("movie_corrected2.srt"))
- Output:
After fast-forwarding 9 seconds: 1 00:01:40,550 --> 00:01:45,347 Four billion years ago, the first marine life forms. 2 00:01:45,555 --> 00:01:51,019 First came the fish...then slowly other life forms evolved. 3 00:01:51,144 --> 00:01:52,979 Therefore, our ancestors... 4 00:01:52,979 --> 00:01:54,898 ...came from fish. 5 00:01:55,232 --> 00:01:56,608 Everyone, come and see this. 6 00:01:56,733 --> 00:01:59,361 Cretaceous Tyrannosaurus. 7 00:01:59,736 --> 00:02:01,488 Ferocious! 8 00:02:07,035 --> 00:02:07,869 Red, 9 00:02:08,203 --> 00:02:09,079 Pong! 10 00:02:11,540 --> 00:02:12,999 Isn't this a gecko? 11 00:02:13,416 --> 00:02:16,419 How else can I get a 15 ton T-Rex in here? 12 00:02:16,503 --> 00:02:20,048 With our advanced technology, I shrank it down. After rolling-back 9 seconds: 1 00:01:22,550 --> 00:01:27,347 Four billion years ago, the first marine life forms. 2 00:01:27,555 --> 00:01:33,019 First came the fish...then slowly other life forms evolved. 3 00:01:33,144 --> 00:01:34,979 Therefore, our ancestors... 4 00:01:34,979 --> 00:01:36,898 ...came from fish. 5 00:01:37,232 --> 00:01:38,608 Everyone, come and see this. 6 00:01:38,733 --> 00:01:41,361 Cretaceous Tyrannosaurus. 7 00:01:41,736 --> 00:01:43,488 Ferocious! 8 00:01:49,035 --> 00:01:49,869 Red, 9 00:01:50,203 --> 00:01:51,079 Pong! 10 00:01:53,540 --> 00:01:54,999 Isn't this a gecko? 11 00:01:55,416 --> 00:01:58,419 How else can I get a 15 ton T-Rex in here? 12 00:01:58,503 --> 00:02:02,048 With our advanced technology, I shrank it down.