【发布时间】:2017-11-29 19:07:32
【问题描述】:
我需要在录制的视频上叠加多个带有动画位置、alpha 和旋转的图像。实现这一目标的最佳方法是什么?
目前我正在查看 ffmpeg,是否可以使用 ffmpeg 将位置动画添加到叠加层?
【问题讨论】:
我需要在录制的视频上叠加多个带有动画位置、alpha 和旋转的图像。实现这一目标的最佳方法是什么?
目前我正在查看 ffmpeg,是否可以使用 ffmpeg 将位置动画添加到叠加层?
【问题讨论】:
ffmpeg -y -i video.mp4 -i overlay.png -filter_complex "[0][1]overlay=x=mod((1080/4 + sin(t)*1080/4)\,1920):y=mod(t*300\,1080)[res];" -map "[res]" -preset ultrafast out.mp4
使用评估 x=mod((1080/4 + sin(t)*1080/4)\,1920) 在输入 [0] (video.mp4) 上叠加输入 [1] (overlay.png) 和位置叠加:y=mod(t*300\,1080),其中 t = 时间,以毫秒为单位。然后将叠加结果映射到流[res],并输出到out.mp4。
具有多个叠加层并使用 gif 作为叠加层的更复杂示例:
ffmpeg -y -i video.mp4 -ignore_loop 0 -i overlay.gif -filter_complex `
>> "[0][1]overlay=x=mod((1080/4 + sin(t)*1080/4)\,1920):y=mod(t*300\,1080):shortest=1[res];`
>> [res][1]overlay=x=mod((200*1 + 1080/4 - sin(2*t)*1080/4)\,1920):y=mod(100 + t*300\,1080):shortest=1[res];`
>> [res][1]overlay=x=mod((200*2 + 1080/4 - sin(-90 + t/2)*1080/4)\,1920):y=mod(150 + t*250\,1080):shortest=1[res];`
>> [res][1]overlay=x=mod((200*3 + 1080/4 - sin(90 + 3*t)*1080/4)\,1920):y=mod(200 + t*100\,1080):shortest=1[res];`
>> [res][1]overlay=x=mod((200*4 + 1080/4 - sin(180 + t)*1080/4)\,1920):y=mod(t*250\,1080):shortest=1[res];`
>> [res][1]overlay=x=mod((200*5 + 1080/4 - sin(-180 + t)*1080/4)\,1920):y=mod(t*100\,1080):shortest=1[res];`
>> [res][1]overlay=x=mod((200*6 + 1080/4 - sin(2*t)*1080/4)\,1920):y=100 + mod(100 + t*300\,1080):shortest=1[res]`
>> " -map "[res]" -preset ultrafast out.mp4
【讨论】: