Answers:
下面的批处理脚本就是这样做的。针对网络进行了优化,可生成预览视频,其中包含从原始视频中拍摄的10张图像。每张图片显示1秒。该脚本相应地获取图像样本,以便从整个视频中获取预览图像。
仅需要ffmpeg。(和ffprobe是ffmpeg包的一部分)
输出:mp4 / h.264~120Kb(无论原始视频大小如何)。
完全可配置。
优化的lanczos和锐化滤镜。
通过将原始视频的纵横比安装在16:9(384x216)的框架中(必要时在两侧填充黑条)来保持原始视频的纵横比。
没有使用临时文件。(从ffmpeg到ffmpeg的实时管道)
HTML5友好。
以下是两个仅供预览的gif示例。 实际输出为mp4 / h.264:
16:9视频源。输出:
4:3视频源。输出:
在Windows上运行但可以轻松转换为bash脚本(Linux)。
该脚本创建一个文件夹./preview
,用于存储所有生成的预览:
/My videos
movie1.mp4 ~ any size
movie2.mp4 ~ any size
/preview
movie1.mp4 ~ 120Kb
movie2.mp4 ~ 120Kb
可以调整它以在单个文件上运行。
previewGenerator.cmd:
REM ----------------------------------------------
set folder=C:\My videos
set vframes=10
set width=384
set height=216
rem w = h*16/9
set filetypes=*.mp4
REM ----------------------------------------------
setlocal EnableDelayedExpansion
pushd "%folder%"
if not exist preview md preview
for /f "usebackq delims=" %%f in (`dir /b %filetypes%`) do (
if not exist "preview\%%~nf.mp4" (
for /f %%i in ('ffprobe -v error -show_entries format^=duration "%%f" -of default^=noprint_wrappers^=1:nokey^=1') do set length=%%i
set /a length=!length!+0
set /a fps=!length!/%vframes%
ffmpeg -threads 2 -i "%%f" -an -qscale:v 1 -vf "fps=1/!fps!, scale=iw*min(%width%/iw\,%height%/ih):ih*min(%width%/iw\,%height%/ih):flags=lanczos, pad=%width%:%height%:(%width%-iw*min(%width%/iw\,%height%/ih))/2:(%height%-ih*min(%width%/iw\,%height%/ih))/2, unsharp=5:5:0.5:5:5:0.5" -vframes %vframes% -f image2pipe -vcodec ppm - ^
| ffmpeg -y -threads 2 -framerate 1 -i pipe:0 -c:v libx264 -profile:v baseline -level 3.0 -tune stillimage -r 30 -pix_fmt yuv420p "preview\%%~nf.mp4"
)
cls
)
更新:
您可以轻松地控制HTML5播放速率<video>
如图所示这里
.gif格式质量最差(像素颜色/最多256种颜色)
.gif文件大小至少大2倍。
构建完成后,无法控制播放速度/暂停gif动画。