feat: add durations
This commit is contained in:
@@ -16,6 +16,7 @@ import (
|
|||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
log "github.com/sirupsen/logrus"
|
log "github.com/sirupsen/logrus"
|
||||||
|
"github.com/spf13/cast"
|
||||||
)
|
)
|
||||||
|
|
||||||
// @provider
|
// @provider
|
||||||
@@ -268,3 +269,27 @@ func (d *DiscoverMedias) getPrice(dir string) (uint, error) {
|
|||||||
|
|
||||||
return uint(p), nil
|
return uint(p), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// getMediaDuration get the duration of a media file
|
||||||
|
func (d *DiscoverMedias) getMediaDuration(file string) (float64, error) {
|
||||||
|
// ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 input_video.mp4
|
||||||
|
args := []string{
|
||||||
|
"-v", "error",
|
||||||
|
"-show_entries", "format=duration",
|
||||||
|
"-of", "default=noprint_wrappers=1:nokey=1",
|
||||||
|
file,
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Infof("cmd: ffprobe %s", strings.Join(args, " "))
|
||||||
|
out, err := exec.Command("ffprobe", args...).CombinedOutput()
|
||||||
|
if err != nil {
|
||||||
|
return 0, errors.Wrapf(err, "get media duration: %s", file)
|
||||||
|
}
|
||||||
|
|
||||||
|
duration, err := cast.ToFloat64E(strings.TrimSpace(string(out)))
|
||||||
|
if err != nil {
|
||||||
|
return 0, errors.Wrapf(err, "get media duration: %s", file)
|
||||||
|
}
|
||||||
|
|
||||||
|
return duration, nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -74,3 +74,11 @@ func (t *DiscoverMediasTestSuite) Test_item() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *DiscoverMediasTestSuite) TestDiscoverMedias_getMediaDuration() {
|
||||||
|
Convey("TestDiscoverMedias_getMediaDuration", t.T(), func() {
|
||||||
|
duration, err := t.Svc.getMediaDuration("/projects/mp-qvyun/backend/fixtures/medias/video.mp4")
|
||||||
|
So(err, ShouldBeNil)
|
||||||
|
t.T().Logf("Duration: %0.8f", duration)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user