aboutsummaryrefslogtreecommitdiff
path: root/transcoder/src/subtitles.rs
diff options
context:
space:
mode:
Diffstat (limited to 'transcoder/src/subtitles.rs')
-rw-r--r--transcoder/src/subtitles.rs18
1 files changed, 11 insertions, 7 deletions
diff --git a/transcoder/src/subtitles.rs b/transcoder/src/subtitles.rs
index 2532781..db23d5b 100644
--- a/transcoder/src/subtitles.rs
+++ b/transcoder/src/subtitles.rs
@@ -10,7 +10,7 @@ use std::fmt::Write;
pub fn parse_subtitles(
codec: &str,
codec_private: Option<Vec<u8>>,
- blocks: Vec<(u64, u64, Vec<u8>)>,
+ blocks: Vec<(u64, Option<u64>, Vec<u8>)>,
) -> anyhow::Result<Vec<SubtitleCue>> {
match codec {
"D_WEBVTT/SUBTITLES" => parse_webvtt_blocks(blocks),
@@ -46,26 +46,30 @@ pub fn write_webvtt(title: String, subtitles: &[SubtitleCue]) -> anyhow::Result<
Ok(out)
}
-pub fn parse_webvtt_blocks(blocks: Vec<(u64, u64, Vec<u8>)>) -> anyhow::Result<Vec<SubtitleCue>> {
+pub fn parse_webvtt_blocks(
+ blocks: Vec<(u64, Option<u64>, Vec<u8>)>,
+) -> anyhow::Result<Vec<SubtitleCue>> {
let mut out = Vec::new();
for (pts, dur, block) in blocks {
let content = String::from_utf8_lossy(&block).trim().to_string();
out.push(SubtitleCue {
content,
start: pts as f64 / 1000.,
- end: (pts + dur) as f64 / 1000.,
+ end: (pts + dur.unwrap_or(1000)) as f64 / 1000.,
})
}
Ok(out)
}
-pub fn parse_subrip_blocks(blocks: Vec<(u64, u64, Vec<u8>)>) -> anyhow::Result<Vec<SubtitleCue>> {
+pub fn parse_subrip_blocks(
+ blocks: Vec<(u64, Option<u64>, Vec<u8>)>,
+) -> anyhow::Result<Vec<SubtitleCue>> {
let mut out = Vec::new();
for (pts, dur, block) in blocks {
let content = String::from_utf8_lossy(&block).trim().to_string();
out.push(SubtitleCue {
content,
start: pts as f64 / 1000.,
- end: (pts + dur) as f64 / 1000.,
+ end: (pts + dur.unwrap_or(1000)) as f64 / 1000.,
});
}
Ok(out)
@@ -73,7 +77,7 @@ pub fn parse_subrip_blocks(blocks: Vec<(u64, u64, Vec<u8>)>) -> anyhow::Result<V
pub fn parse_ass_blocks(
_codec_private: Vec<u8>,
- blocks: Vec<(u64, u64, Vec<u8>)>,
+ blocks: Vec<(u64, Option<u64>, Vec<u8>)>,
) -> anyhow::Result<Vec<SubtitleCue>> {
// TODO dont ignore codec_private
@@ -98,7 +102,7 @@ pub fn parse_ass_blocks(
out.push(SubtitleCue {
content: text.to_owned(),
start: pts as f64 / 1000.,
- end: (pts + dur) as f64 / 1000.,
+ end: (pts + dur.unwrap_or(1000)) as f64 / 1000.,
})
}
Ok(out)