video - 我应该如何使用带有 xfade 和 zoompan 过滤器的 ffmpeg 从图像中创建视频幻灯片
问题描述
我正在尝试从多个图像创建单个视频幻灯片,使用 xfade 过滤器实现过渡效果,并使用每张幻灯片的 zoompan 过滤器实现放大/缩小效果
图像可以有不同的分辨率/纵横比/方向
在大多数情况下,我成功了,将其分为两个步骤:
- 将每个图像转换为具有放大/缩小效果的视频,将所有视频缩放到相同大小(xfade 要求输入具有相同的分辨率)
- 使用 xfade 过滤器将 (1) 中的输出视频合并到单个视频
但是,在某些情况下,OOM 会杀死这些进程,而其他进程会在超时时终止。
我正在使用以下命令(一些参数是由 PHP-FFMpeg 包添加的):
图片转视频
/usr/local/bin/ffmpeg -y -r 1 -loop 1 -i 'image1.jpg' -ss 0 '-t' '3' -filter_complex 'scale=trunc(1200/2)*2:trunc(801/2)*2:force_original_aspect_ratio=1,pad=trunc(1200/2)*2:trunc(801/2)*2:(ow-iw)/2:(oh-ih)/2,fps=25,crop=w=trunc(1200/2)*2:h=trunc(801/2)*2,scale=4000:2000,zoompan=z='\''min(max(zoom, pzoom)+0.002667,1.200000)'\'':d=1:x='\''iw/2-(iw/zoom/2)'\'':y='\''ih/2-(ih/zoom/2)'\'',setsar=1,scale=trunc(1200/2)*2:trunc(801/2)*2:force_original_aspect_ratio=1,pad=trunc(1200/2)*2:trunc(801/2)*2:(ow-iw)/2:(oh-ih)/2[video]' -map '[video]' -crf 17 -preset fast -threads 8 -vcodec 'libx264' -acodec 'aac' -b:v '1000k' -refs '6' -coder 1 -sc_threshold '40' -flags '+loop' -me_range '16' -subq '7' -i_qfactor '0.71' -qcomp '0.6' -qdiff '4' -trellis '1' -b:a '128k' /output.mp4
将多个视频连接到单个视频(幻灯片)
/usr/local/bin/ffmpeg -y -i 'output1.mp4' -i 'output2.mp4' -i 'output3.mp4' -filter_complex '[0][1]xfade=transition=fade:duration=1.0:offset=2.0[s0];[s0][2]xfade=transition=fade:duration=1.0:offset=4.0[s1];[s1]format=yuv420p[video]' -map '[video]' -crf '17' -preset 'fast' -threads 8 -vcodec 'libx264' -acodec 'aac' -b:v '1000k' -refs '6' -coder '1' -sc_threshold '40' -flags '+loop' -me_range '16' -subq '7' -i_qfactor '0.71' -qcomp '0.6' -qdiff '4' -trellis '1' -b:a '128k' final.mp4
你能帮我优化命令吗?在添加放大/缩小效果时,必须添加多个缩放以消除口吃/抖动
也许我把一个简单的任务复杂化了?也许有不同的工具/包来实现这一点?
解决方案
推荐阅读
- c# - 在这种情况下如何使用正则表达式?
- elasticsearch - 弹性搜索过滤器不适用于多值 json
- node.js - 更改显示名称和声音
- firebase - 1 个项目的 Google FIT API 验证,其中 3 个 Android 应用使用相同的密钥库签名
- python - 具有上一列的数据框填充
- entity-framework - Entity Framework Core 全局动态查询过滤器
- c# - C# Discord Bot - Docker 容器中的 SQLite 错误
- reactjs - 如何将多个功能集成到一个输入字段?
- node.js - 来自同一文件的nodejs中的多个超时
- android - 如何使用node-rsa加密node.js中的数据并解密android中的加密数据?