文章目录
亚洲篇
中国
先画个五角星
- 在100x100的画布P1中,先画一个三角形M
ffplay -f lavfi -i color=ffffff00:100x100[white];[white]geq=r='if(gt(X*tan(72*PI/180),Y),r(X,Y),255)':g='if(gt(X*tan(72*PI/180),Y),g(X,Y),255)':b='if(gt(X*tan(72*PI/180),Y),b(X,Y),0)' - 此三角形M水平镜像后得到M1, M1与M水平方向并列排布,得到200x100的画布P2,内部为等腰三角形,三角形包含了向上方向的三角形
ffplay -f lavfi -i color=ffffff00:100x100[white];[white]geq=r='if(gt(X*tan(72*PI/180),Y),r(X,Y),255)':g='if(gt(X*tan(72*PI/180),Y),g(X,Y),255)':b='if(gt(X*tan(72*PI/180),Y),b(X,Y),0)'[triangle];[triangle]split=2[T1][T2];[T2]hflip[T22];[T22][T1]hstack=2 - 针对200x100的画布P2,底部再填充200x100的白色,变为 200x200的画布P3,此时等腰三角形在画布上半部,注意使用colorkey filter将背景白色抠图为透明色
ffplay -f lavfi -i color=ffffff00:100x100[white];[white]geq=r='if(gt(X*tan(72*PI/180),Y),r(X,Y),255)':g='if(gt(X*tan(72*PI/180),Y),g(X,Y),255)':b='if(gt(X*tan(72*PI/180),Y),b(X,Y),0)'[triangle];[triangle]split=2[T1][T2];[T2]hflip[T22];[T22][T1]hstack=2[UP];[UP]pad=iw:ih*2:0:0:ffffff00[T];[T]colorkey=white - 画布P3,一分为五,分布旋转0/72/144/216/288度,得到五个方向的三角形,overly排布后即可.
ffplay -f lavfi -i color=ffffff00:100x100[white];[white]geq=r='if(gt(X*tan(72*PI/180),Y),r(X,Y),255)':g='if(gt(X*tan(72*PI/180),Y),g(X,Y),255)':b='if(gt(X*tan(72*PI/180),Y),b(X,Y),0)'[triangle];[triangle]split=2[T1][T2];[T2]hflip[T22];[T22][T1]hstack=2[UP];[UP]pad=iw:ih*2:0:0:ffffff00[T];[T]colorkey=white[RAW];[RAW]split=5[T1][T2][T3][T4][T5];[T2]rotate=a=(72*PI/180):c=ffffff00[R2];[T3]rotate=a=(144*PI/180):c=ffffff00[R3];[T4]rotate=a=(216*PI/180):c=ffffff00[R4];[T5]rotate=a=(288*PI/180):c=ffffff00[R5];[R2][R3]overlay[U1];[R4][R5]overlay[U2];[U1][U2]overlay[V1];[V1][T1]overlay - 由于三角形的边缘的颜色,旋转之后会导致一些边缘出现在五角星内部,故要除去此边缘,
ffplay -f lavfi -i color=ffffff00:100x100[white];[white]geq=r='if(gt(X*tan(72*PI/180),Y),r(X,Y),255)':g='if(gt(X*tan(72*PI/180),Y),g(X,Y),255)':b='if(gt(X*tan(72*PI/180),Y),b(X,Y),0)'[triangle];[triangle]split=2[T1][T2];[T2]hflip[T22];[T22][T1]hstack=2[UP];[UP]pad=iw:ih*2:0:0:ffffff00[T];[T]colorkey=white[RAW];[RAW]split=5[T1][T2][T3][T4][T5];[T2]rotate=a=(72*PI/180):c=ffffff00[R2];[T3]rotate=a=(144*PI/180):c=ffffff00[R3];[T4]rotate=a=(216*PI/180):c=ffffff00[R4];[T5]rotate=a=(288*PI/180):c=ffffff00[R5];[R2][R3]overlay[U1];[R4][R5]overlay[U2];[U1][U2]overlay[V1];[V1][T1]overlay[star];[star]geq=r='if(gt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2),1468*H*H/(200*200)),r(X,Y),255)':g='if(gt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2),1468*H*H/(200*200)),g(X,Y),255)':b='if(gt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2),1468*H*H/(200*200)),b(X,Y),0)'
画图命令为:
ffmpeg -f lavfi -i color=ffffff00:100x100[white];[white]geq=r='if(gt(X*tan(72*PI/180),Y),r(X,Y),255)':g='if(gt(X*tan(72*PI/180),Y),g(X,Y),255)':b='if(gt(X*tan(72*PI/180),Y),b(X,Y),0)'[triangle];[triangle]split=2[T1][T2];[T2]hflip[T22];[T22][T1]hstack=2[UP];[UP]pad=iw:ih*2:0:0:ffffff00[T];[T]colorkey=white[RAW];[RAW]split=5[T1][T2][T3][T4][T5];[T2]rotate=a=(72*PI/180):c=ffffff00[R2];[T3]rotate=a=(144*PI/180):c=ffffff00[R3];[T4]rotate=a=(216*PI/180):c=ffffff00[R4];[T5]rotate=a=(288*PI/180):c=ffffff00[R5];[R2][R3]overlay[U1];[R4][R5]overlay[U2];[U1][U2]overlay[V1];[V1][T1]overlay[star];[star]geq=r='if(gt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2),1468*H*H/(200*200)),r(X,Y),255)':g='if(gt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2),1468*H*H/(200*200)),g(X,Y),255)':b='if(gt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2),1468*H*H/(200*200)),b(X,Y),0) -frames:v 1 -y five_pointed_star.png

OK,再来看下维基百科上中国国旗的绘画方法

其中红色色号为 #ee1c25, 黄色色号为 #ffff00,其中的尺寸特征
- 宽高为3000x2000,
- 大五角星的外圆半径为300,叠加坐标为(200, 200),小五角星的外圆半径为100,叠加坐标分别为(900, 100), (1100, 300) (1100, 600),(900, 800)
- 四颗小五角星的旋转角度分别为逆时针 90+arctan(3/5), 90+arctan(1/7), 90+arctan(7/2), 90+arctan(5/4)
- OK, 开始绘画
- 绘制透明的大五角星
ffmpeg -f lavfi -i color=white:300x300[white];[white]geq=r='if(gt(X*tan(72*PI/180),Y),r(X,Y),255)':g='if(gt(X*tan(72*PI/180),Y),g(X,Y),255)':b='if(gt(X*tan(72*PI/180),Y),b(X,Y),0)'[triangle];[triangle]split=2[T1][T2];[T2]hflip[T22];[T22][T1]hstack=2[UP];[UP]pad=iw:ih*2:0:0:white[T];[T]colorkey=white[RAW];[RAW]split=5[T1][T2][T3][T4][T5];[T2]rotate=a=(72*PI/180):c=white[R2];[T3]rotate=a=(144*PI/180):c=white[R3];[T4]rotate=a=(216*PI/180):c=white[R4];[T5]rotate=a=(288*PI/180):c=white[R5];[R2][R3]overlay[U1];[R4][R5]overlay[U2];[U1][U2]overlay[V1];[V1][T1]overlay[star];[star]geq=r='if(gt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2),1468*H*H/(200*200)),r(X,Y),255)':g='if(gt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2),1468*H*H/(200*200)),g(X,Y),255)':b='if(gt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2),1468*H*H/(200*200)),b(X,Y),0)'[s1];[s1]colorkey=white:0.35 -frames:v 1 -y big_star.png
- 绘制小的五角星,无须透明
ffmpeg -f lavfi -i color=white:100x100[white];[white]geq=r='if(gt(X*tan(72*PI/180),Y),r(X,Y),

博客介绍了使用FFmpeg绘制多国国旗的方法,涉及亚洲的中国、朝鲜、韩国等,以及欧洲的爱沙尼亚、俄罗斯、德国等。详细说明了各国国旗的绘制步骤,如中国国旗通过三角形旋转叠加等操作,部分绘制因命令过长或颜色色差等存在问题。

1146

被折叠的 条评论
为什么被折叠?



