text overlay x & y pos as params
This commit is contained in:
+21
-1
@@ -31,7 +31,10 @@ type appArgs struct {
|
|||||||
audioFlowDefFile string
|
audioFlowDefFile string
|
||||||
pattern string
|
pattern string
|
||||||
listPatterns bool
|
listPatterns bool
|
||||||
|
|
||||||
textOverlay string
|
textOverlay string
|
||||||
|
overlayX int
|
||||||
|
overlayY int
|
||||||
|
|
||||||
videoWidth uint
|
videoWidth uint
|
||||||
videoHeight uint
|
videoHeight uint
|
||||||
@@ -249,7 +252,11 @@ func flagSetAddFlags(fs *pflag.FlagSet, args *appArgs) {
|
|||||||
// Video pattern flags
|
// Video pattern flags
|
||||||
fs.StringVarP(&args.pattern, "pattern", "p", "bars", "Video pattern type")
|
fs.StringVarP(&args.pattern, "pattern", "p", "bars", "Video pattern type")
|
||||||
fs.BoolVar(&args.listPatterns, "list-patterns", false, "List video available video patterns and exit")
|
fs.BoolVar(&args.listPatterns, "list-patterns", false, "List video available video patterns and exit")
|
||||||
|
|
||||||
fs.StringVarP(&args.textOverlay, "text", "t", "", "Text overlay above video pattern")
|
fs.StringVarP(&args.textOverlay, "text", "t", "", "Text overlay above video pattern")
|
||||||
|
fs.IntVar(&args.overlayX, "text-x", 0, "Text overlay X position in px")
|
||||||
|
fs.IntVar(&args.overlayY, "text-y", 0, "Text overlay Y position in px")
|
||||||
|
|
||||||
fs.UintVar(&args.videoWidth, "width", 1920, "Video pattern width")
|
fs.UintVar(&args.videoWidth, "width", 1920, "Video pattern width")
|
||||||
fs.UintVar(&args.videoHeight, "height", 1080, "Video pattern height")
|
fs.UintVar(&args.videoHeight, "height", 1080, "Video pattern height")
|
||||||
fs.StringVar(&args.videoFPS, "fps", "25", "Video pattern FPS")
|
fs.StringVar(&args.videoFPS, "fps", "25", "Video pattern FPS")
|
||||||
@@ -341,7 +348,20 @@ func main() {
|
|||||||
log.Fatalf("text overlay init failed: %v", err)
|
log.Fatalf("text overlay init failed: %v", err)
|
||||||
}
|
}
|
||||||
defer face.Close()
|
defer face.Close()
|
||||||
overlay, err = generator.NewTextOverlay(args.textOverlay, int(vi.width), int(vi.height), face)
|
if args.overlayX < 0 ||
|
||||||
|
args.overlayX > int(vi.width) ||
|
||||||
|
args.overlayY < 0 ||
|
||||||
|
args.overlayY > int(vi.height) {
|
||||||
|
log.Fatalf("Overlay X/Y pos can't be negative or greater, than video width/height")
|
||||||
|
}
|
||||||
|
overlay, err = generator.NewTextOverlay(
|
||||||
|
args.textOverlay,
|
||||||
|
int(vi.width),
|
||||||
|
int(vi.height),
|
||||||
|
args.overlayX,
|
||||||
|
args.overlayY,
|
||||||
|
face,
|
||||||
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("text overlay init failed: %v", err)
|
log.Fatalf("text overlay init failed: %v", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ func LoadFace(path string, size float64) (font.Face, error) {
|
|||||||
// NewTextOverlay rasterizes text (white, anti-aliased) onto a black backing
|
// NewTextOverlay rasterizes text (white, anti-aliased) onto a black backing
|
||||||
// box, centered horizontally. Box width and x are multiples of 6 so the box
|
// box, centered horizontally. Box width and x are multiples of 6 so the box
|
||||||
// covers whole v210 blocks and the per-frame copy is word-aligned.
|
// covers whole v210 blocks and the per-frame copy is word-aligned.
|
||||||
func NewTextOverlay(text string, frameW, frameH int, face font.Face) (*TextOverlay, error) {
|
func NewTextOverlay(text string, frameW, frameH, posX, posY int, face font.Face) (*TextOverlay, error) {
|
||||||
if text == "" {
|
if text == "" {
|
||||||
return nil, fmt.Errorf("text: empty string")
|
return nil, fmt.Errorf("text: empty string")
|
||||||
}
|
}
|
||||||
@@ -89,10 +89,12 @@ func NewTextOverlay(text string, frameW, frameH int, face font.Face) (*TextOverl
|
|||||||
return nil, fmt.Errorf("text: box %dpx does not fit frame height %dpx", topMargin+h, frameH)
|
return nil, fmt.Errorf("text: box %dpx does not fit frame height %dpx", topMargin+h, frameH)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// posX = ((frameW - w) / 2 / 6) * 6
|
||||||
|
// posY = topMargin
|
||||||
o := &TextOverlay{
|
o := &TextOverlay{
|
||||||
frameW: frameW,
|
frameW: frameW,
|
||||||
x: ((frameW - w) / 2 / 6) * 6,
|
x: posX,
|
||||||
y: topMargin,
|
y: posY,
|
||||||
w: w,
|
w: w,
|
||||||
h: h,
|
h: h,
|
||||||
cov: make([]byte, w*h),
|
cov: make([]byte, w*h),
|
||||||
|
|||||||
Reference in New Issue
Block a user