feat: seek() filter and ffmpeg.SeekPosition, ffmpeg.SeekDuration

* feat: seek() filter and ffmpeg.SeekPosition, ffmpeg.SeekDuration
This commit is contained in:
Adrian Shum 2022-10-23 14:47:09 +08:00 committed by GitHub
parent 7350619928
commit 38b1b200ff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 60 additions and 20 deletions

View file

@ -107,13 +107,21 @@ func (av *AVContext) SelectPosition(f float64) (err error) {
func (av *AVContext) SelectDuration(ts time.Duration) (err error) {
if ts > 0 {
av.selectedDuration = ts
if err = seekDuration(av, ts); err != nil {
if err = av.SeekDuration(ts); err != nil {
return
}
}
return av.ProcessFrames(-1)
}
func (av *AVContext) SeekPosition(f float64) error {
return av.SeekDuration(av.positionToDuration(f))
}
func (av *AVContext) SeekDuration(ts time.Duration) error {
return seekDuration(av, ts)
}
func (av *AVContext) Export(bands int) (buf []byte, err error) {
if err = av.ProcessFrames(-1); err != nil {
return

View file

@ -67,17 +67,6 @@ func TestAVContext(t *testing.T) {
stats, err := os.Stat(path)
require.NoError(t, err)
av, err := LoadAVContext(reader, stats.Size())
require.NoError(t, err)
defer av.Close()
if n == 10 {
require.NoError(t, av.ProcessFrames(n))
} else if n == 99999 {
require.NoError(t, av.SelectDuration(time.Second))
} else if n == 9999 {
require.NoError(t, av.SelectPosition(0.7))
} else if n > -1 {
require.NoError(t, av.SelectFrame(n))
}
meta := av.Metadata()
metaBuf, err := json.Marshal(meta)
require.NoError(t, err)
@ -87,6 +76,19 @@ func TestAVContext(t *testing.T) {
} else {
require.NoError(t, os.WriteFile(goldenFile, metaBuf, 0666))
}
require.NoError(t, err)
defer av.Close()
if n == 10 {
require.NoError(t, av.ProcessFrames(n))
} else if n == 99999 {
require.NoError(t, av.SelectDuration(time.Second))
} else if n == 9999 {
require.NoError(t, av.SelectPosition(0.7))
} else if n == 5 {
require.NoError(t, av.SelectFrame(n))
} else {
require.NoError(t, av.SeekPosition(0.7))
}
bands := 4
if n == 99999 {
bands = 999