mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Use FFmpeg scene detection for video previews
Generating a video preview by capturing only the first frame of a video is problematic for videos that begin with a fade in from black. By using keyframe and scene detection that is built in to FFmpeg, we can generate a more representative preview.
This commit is contained in:
parent
8e9d550aee
commit
3397924e66
2 changed files with 16 additions and 2 deletions
|
@ -28,7 +28,21 @@ module ActiveStorage
|
||||||
|
|
||||||
private
|
private
|
||||||
def draw_relevant_frame_from(file, &block)
|
def draw_relevant_frame_from(file, &block)
|
||||||
draw self.class.ffmpeg_path, "-i", file.path, "-y", "-vframes", "1", "-f", "image2", "-", &block
|
ffmpeg_args = [
|
||||||
|
"-i", file.path,
|
||||||
|
"-vf",
|
||||||
|
# Select the first video frame, plus keyframes and frames
|
||||||
|
# that meet the scene change threshold.
|
||||||
|
'select=eq(n\,0)+eq(key\,1)+gt(scene\,0.015),' +
|
||||||
|
# Loop the first 1-2 selected frames in case we were only
|
||||||
|
# able to select 1 frame, then drop the first looped frame.
|
||||||
|
# This lets us use the first video frame as a fallback.
|
||||||
|
"loop=loop=-1:size=2,trim=start_frame=1",
|
||||||
|
"-frames:v", "1",
|
||||||
|
"-f", "image2", "-",
|
||||||
|
]
|
||||||
|
|
||||||
|
draw self.class.ffmpeg_path, *ffmpeg_args, &block
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -559,7 +559,7 @@ the box, Active Storage supports previewing videos and PDF documents.
|
||||||
</ul>
|
</ul>
|
||||||
```
|
```
|
||||||
|
|
||||||
WARNING: Extracting previews requires third-party applications, FFmpeg for
|
WARNING: Extracting previews requires third-party applications, FFmpeg v3.4+ for
|
||||||
video and muPDF for PDFs, and on macOS also XQuartz and Poppler.
|
video and muPDF for PDFs, and on macOS also XQuartz and Poppler.
|
||||||
These libraries are not provided by Rails. You must install them yourself to
|
These libraries are not provided by Rails. You must install them yourself to
|
||||||
use the built-in previewers. Before you install and use third-party software,
|
use the built-in previewers. Before you install and use third-party software,
|
||||||
|
|
Loading…
Reference in a new issue