diff --git a/ffmpeg/ffmpeg.go b/ffmpeg/ffmpeg.go index ddf9608..006008e 100644 --- a/ffmpeg/ffmpeg.go +++ b/ffmpeg/ffmpeg.go @@ -243,9 +243,7 @@ func incrementDuration(av *AVContext, frame *C.AVFrame, i C.int) { ptsToNano := C.int64_t(1000000000 * av.stream.time_base.num / av.stream.time_base.den) newDuration := time.Duration(frame.pts * ptsToNano) av.availableDuration = newDuration - if av.selectedDuration > 0 && i > 0 && newDuration <= av.selectedDuration { - av.selectedIndex = i - } + if !av.durationInFormat && newDuration > av.duration { av.duration = newDuration } @@ -325,6 +323,13 @@ func populateThumbContext(av *AVContext, frames chan *C.AVFrame, n C.int, done < incrementDuration(av, frame, i) frames <- frame frame = nil + if av.selectedDuration > 0 { + if av.availableDuration <= av.selectedDuration { + av.selectedIndex = i + } else { + break + } + } } if av.selectedIndex > av.availableIndex { av.selectedIndex = av.availableIndex diff --git a/ffmpeg/ffmpeg_test.go b/ffmpeg/ffmpeg_test.go index 49f2f6c..b9bbd9a 100644 --- a/ffmpeg/ffmpeg_test.go +++ b/ffmpeg/ffmpeg_test.go @@ -72,7 +72,7 @@ func TestAVContext(t *testing.T) { if n == 10 { require.NoError(t, av.ProcessFrames(n)) } else if n == 99999 { - require.NoError(t, av.SelectDuration(time.Millisecond*500)) + require.NoError(t, av.SelectDuration(time.Second)) } else if n == 9999 { require.NoError(t, av.SelectPosition(0.7)) } else if n > -1 { diff --git a/testdata/golden/export/alpha-webm.webm-99999.jpg b/testdata/golden/export/alpha-webm.webm-99999.jpg index c47ec3d..3b035d3 100644 Binary files a/testdata/golden/export/alpha-webm.webm-99999.jpg and b/testdata/golden/export/alpha-webm.webm-99999.jpg differ diff --git a/testdata/golden/export/everybody-betray-me.mkv-99999.jpg b/testdata/golden/export/everybody-betray-me.mkv-99999.jpg index c0d4dd1..cfd2ad9 100644 Binary files a/testdata/golden/export/everybody-betray-me.mkv-99999.jpg and b/testdata/golden/export/everybody-betray-me.mkv-99999.jpg differ diff --git a/testdata/golden/export/macabre.mp4-99999.jpg b/testdata/golden/export/macabre.mp4-99999.jpg index 3125a1c..59f5451 100644 Binary files a/testdata/golden/export/macabre.mp4-99999.jpg and b/testdata/golden/export/macabre.mp4-99999.jpg differ diff --git a/testdata/golden/export/schizo.flv-99999.jpg b/testdata/golden/export/schizo.flv-99999.jpg index fc32c8b..a86490f 100644 Binary files a/testdata/golden/export/schizo.flv-99999.jpg and b/testdata/golden/export/schizo.flv-99999.jpg differ diff --git a/testdata/golden/export/schizo_0.mp4-99999.jpg b/testdata/golden/export/schizo_0.mp4-99999.jpg index e3e8a55..935ab8e 100644 Binary files a/testdata/golden/export/schizo_0.mp4-99999.jpg and b/testdata/golden/export/schizo_0.mp4-99999.jpg differ diff --git a/testdata/golden/export/schizo_180.mp4-99999.jpg b/testdata/golden/export/schizo_180.mp4-99999.jpg index a3f6b52..15f6245 100644 Binary files a/testdata/golden/export/schizo_180.mp4-99999.jpg and b/testdata/golden/export/schizo_180.mp4-99999.jpg differ diff --git a/testdata/golden/export/schizo_270.mp4-99999.jpg b/testdata/golden/export/schizo_270.mp4-99999.jpg index 76acd37..b367d33 100644 Binary files a/testdata/golden/export/schizo_270.mp4-99999.jpg and b/testdata/golden/export/schizo_270.mp4-99999.jpg differ diff --git a/testdata/golden/export/schizo_90.mp4-99999.jpg b/testdata/golden/export/schizo_90.mp4-99999.jpg index 2efdfe6..e57f442 100644 Binary files a/testdata/golden/export/schizo_90.mp4-99999.jpg and b/testdata/golden/export/schizo_90.mp4-99999.jpg differ diff --git a/testdata/golden/meta/alpha-webm.webm-9999.meta.json b/testdata/golden/meta/alpha-webm.webm-9999.meta.json index 5e0f7c9..0d1dc4f 100644 --- a/testdata/golden/meta/alpha-webm.webm-9999.meta.json +++ b/testdata/golden/meta/alpha-webm.webm-9999.meta.json @@ -1 +1 @@ -{"orientation":1,"duration":12040,"width":720,"height":576,"fps":10.9,"has_video":true,"has_audio":false} \ No newline at end of file +{"orientation":1,"duration":12040,"width":720,"height":576,"fps":9.8,"has_video":true,"has_audio":false} \ No newline at end of file diff --git a/testdata/golden/meta/everybody-betray-me.mkv-9999.meta.json b/testdata/golden/meta/everybody-betray-me.mkv-9999.meta.json index 1c39096..f194f33 100644 --- a/testdata/golden/meta/everybody-betray-me.mkv-9999.meta.json +++ b/testdata/golden/meta/everybody-betray-me.mkv-9999.meta.json @@ -1 +1 @@ -{"orientation":1,"duration":7407,"width":640,"height":480,"fps":9.3,"has_video":true,"has_audio":true} \ No newline at end of file +{"orientation":1,"duration":7407,"width":640,"height":480,"fps":1.2,"has_video":true,"has_audio":true} \ No newline at end of file diff --git a/testdata/golden/meta/everybody-betray-me.mkv-99999.meta.json b/testdata/golden/meta/everybody-betray-me.mkv-99999.meta.json index 0aaf0af..b2449ea 100644 --- a/testdata/golden/meta/everybody-betray-me.mkv-99999.meta.json +++ b/testdata/golden/meta/everybody-betray-me.mkv-99999.meta.json @@ -1 +1 @@ -{"orientation":1,"duration":7407,"width":640,"height":480,"fps":26.3,"has_video":true,"has_audio":true} \ No newline at end of file +{"orientation":1,"duration":7407,"width":640,"height":480,"fps":16,"has_video":true,"has_audio":true} \ No newline at end of file diff --git a/testdata/golden/meta/schizo.flv-9999.meta.json b/testdata/golden/meta/schizo.flv-9999.meta.json index 15bf618..5d8e788 100644 --- a/testdata/golden/meta/schizo.flv-9999.meta.json +++ b/testdata/golden/meta/schizo.flv-9999.meta.json @@ -1 +1 @@ -{"orientation":1,"duration":2560,"width":480,"height":360,"fps":29.7,"has_video":true,"has_audio":true} \ No newline at end of file +{"orientation":1,"duration":2560,"width":480,"height":360,"fps":29.6,"has_video":true,"has_audio":true} \ No newline at end of file diff --git a/testdata/golden/meta/schizo.flv-99999.meta.json b/testdata/golden/meta/schizo.flv-99999.meta.json index 15bf618..66cb6d9 100644 --- a/testdata/golden/meta/schizo.flv-99999.meta.json +++ b/testdata/golden/meta/schizo.flv-99999.meta.json @@ -1 +1 @@ -{"orientation":1,"duration":2560,"width":480,"height":360,"fps":29.7,"has_video":true,"has_audio":true} \ No newline at end of file +{"orientation":1,"duration":2560,"width":480,"height":360,"fps":29.3,"has_video":true,"has_audio":true} \ No newline at end of file