Skip to content

Commit

Permalink
fix: support subtitles outside of range
Browse files Browse the repository at this point in the history
  • Loading branch information
fredrikvedvik committed Jan 11, 2024
1 parent dd61c14 commit ddcf8b4
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 4 deletions.
38 changes: 34 additions & 4 deletions services/transcode/merge.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package transcode

import (
"fmt"
"github.com/bcc-code/bcc-media-flows/paths"
"log"
"math"
"os"
Expand All @@ -11,6 +10,8 @@ import (
"strconv"
"strings"

"github.com/bcc-code/bcc-media-flows/paths"

"github.com/bcc-code/bcc-media-flows/common"
"github.com/bcc-code/bcc-media-flows/services/ffmpeg"
"github.com/bcc-code/bcc-media-flows/utils"
Expand Down Expand Up @@ -233,7 +234,13 @@ func MergeSubtitles(input common.MergeInput, progressCallback ffmpeg.ProgressCal
fileOut := filepath.Join(input.WorkDir.Local(), fmt.Sprintf("%s-%d-out.srt", input.Title, index))
path := item.Path.Local()

cmd := exec.Command("ffmpeg", "-i", path, "-ss", fmt.Sprintf("%f", item.Start), "-to", fmt.Sprintf("%f", item.End), "-y", file)
cmd := exec.Command("ffmpeg",
"-hide_banner",
"-i", path,
"-ss", fmt.Sprintf("%f", item.Start),
"-to", fmt.Sprintf("%f", item.End),
"-y", file,
)

_, err := utils.ExecuteCmd(cmd, nil)
if err != nil {
Expand All @@ -244,13 +251,22 @@ func MergeSubtitles(input common.MergeInput, progressCallback ffmpeg.ProgressCal
return nil, err
}
if fileInfo.Size() == 0 {
err = os.WriteFile(file, []byte(fmt.Sprintf("1\n%s --> %s\n", formatDuration(item.Start), formatDuration(item.End))), os.ModePerm)
contents := fmt.Sprintf("1\n%s --> %s\n\n", formatDuration(item.Start), formatDuration(item.End))
err = os.WriteFile(file,
[]byte(contents),
os.ModePerm,
)
if err != nil {
return nil, err
}
}

cmd = exec.Command("ffmpeg", "-itsoffset", fmt.Sprintf("%f", startAt), "-i", file, "-y", fileOut)
cmd = exec.Command("ffmpeg",
"-hide_banner",
"-itsoffset", fmt.Sprintf("%f", startAt),
"-i", file,
"-y", fileOut,
)
_, err = utils.ExecuteCmd(cmd, nil)
if err != nil {
return nil, err
Expand All @@ -276,10 +292,24 @@ func MergeSubtitles(input common.MergeInput, progressCallback ffmpeg.ProgressCal
return nil, err
}

for _, f := range files {
info, err := os.Stat(f)
if err != nil {
return nil, err
}
if info.Size() == 0 {
err = os.WriteFile(f, []byte("1\n00:00:00,000 --> 00:00:00,000\n"), os.ModePerm)
if err != nil {
return nil, err
}
}
}

concatStr := fmt.Sprintf("concat:%s", strings.Join(files, "|"))

outputFilePath := filepath.Join(input.OutputDir.Local(), filepath.Clean(input.Title)+".srt")
params := []string{
"-hide_banner",
"-progress", "pipe:1",
"-hide_banner",
"-i", concatStr,
Expand Down
21 changes: 21 additions & 0 deletions services/transcode/merge_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package transcode
import (
"github.com/bcc-code/bcc-media-flows/common"
"github.com/bcc-code/bcc-media-flows/paths"
"github.com/bcc-code/bcc-media-flows/services/ffmpeg"
"github.com/stretchr/testify/assert"

"testing"
)
Expand Down Expand Up @@ -62,3 +64,22 @@ func Test_MergeAudio(t *testing.T) {
},
}, nil)
}

func Test_MergeSubtitles(t *testing.T) {
p := paths.MustParse("/mnt/temp/test/RC23_TEMA_TEMA1_MAS_NOR_nor.srt")

_, err := MergeSubtitles(common.MergeInput{
Title: "test",
Items: []common.MergeInputItem{
{
Start: 500,
End: 600,
Path: p,
},
},
OutputDir: paths.MustParse("/mnt/temp/test"),
WorkDir: paths.MustParse("/mnt/temp/test"),
}, func(pr ffmpeg.Progress) {})

assert.Nil(t, err)
}

0 comments on commit ddcf8b4

Please sign in to comment.