mirror of
https://github.com/fxkt-tech/liv
synced 2025-09-26 20:11:20 +08:00
提交代码-qjw
This commit is contained in:
4
.gitignore
vendored
4
.gitignore
vendored
@@ -22,4 +22,6 @@
|
||||
*.jpeg
|
||||
*.mp3
|
||||
*.aac
|
||||
*.wav
|
||||
*.wav
|
||||
*.srt
|
||||
*.ttf
|
46
examples/ffmpeg/mask/main.go
Normal file
46
examples/ffmpeg/mask/main.go
Normal file
@@ -0,0 +1,46 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/fxkt-tech/liv/ffmpeg"
|
||||
"github.com/fxkt-tech/liv/ffmpeg/codec"
|
||||
"github.com/fxkt-tech/liv/ffmpeg/filter"
|
||||
"github.com/fxkt-tech/liv/ffmpeg/input"
|
||||
"github.com/fxkt-tech/liv/ffmpeg/output"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var (
|
||||
ctx = context.Background()
|
||||
|
||||
// inputs
|
||||
iMain = input.WithSimple("in.mp4")
|
||||
|
||||
// filters
|
||||
fDelogo = filter.Crop("iw*0.8", "ih*0.08", "iw*0.1", "ih*0.91").Use(iMain.V())
|
||||
fGBlur = filter.GBlur(25).Use(fDelogo)
|
||||
fOverlay = filter.Overlay("W*0.1", "H*0.91").Use(iMain.V(), fGBlur)
|
||||
|
||||
oOnly = output.New(
|
||||
output.Map(fOverlay),
|
||||
output.Map(iMain.MayA()),
|
||||
output.VideoCodec(codec.X264),
|
||||
output.AudioCodec(codec.Copy),
|
||||
output.File("out.mp4"),
|
||||
)
|
||||
)
|
||||
|
||||
err := ffmpeg.New(
|
||||
ffmpeg.WithDebug(true),
|
||||
ffmpeg.WithDry(true),
|
||||
).
|
||||
AddInput(iMain).
|
||||
AddFilter(fDelogo, fGBlur, fOverlay).
|
||||
AddOutput(oOnly).
|
||||
Run(ctx)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
47
examples/ffmpeg/subtitles/main.go
Normal file
47
examples/ffmpeg/subtitles/main.go
Normal file
@@ -0,0 +1,47 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/fxkt-tech/liv/ffmpeg"
|
||||
"github.com/fxkt-tech/liv/ffmpeg/codec"
|
||||
"github.com/fxkt-tech/liv/ffmpeg/filter"
|
||||
"github.com/fxkt-tech/liv/ffmpeg/input"
|
||||
"github.com/fxkt-tech/liv/ffmpeg/output"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var (
|
||||
ctx = context.Background()
|
||||
|
||||
// inputs
|
||||
iMain = input.WithSimple("in.mp4")
|
||||
|
||||
// filters
|
||||
fDelogo = filter.Crop("iw*0.8", "ih*0.08", "iw*0.1", "ih*0.91").Use(iMain.V())
|
||||
fGBlur = filter.GBlur(25).Use(fDelogo)
|
||||
fOverlay = filter.Overlay("W*0.1", "H*0.91").Use(iMain.V(), fGBlur)
|
||||
fSubtitles = filter.Subtitles("subtitle.srt", "", "MarginV=26,Alignment=6").Use(fOverlay)
|
||||
|
||||
oOnly = output.New(
|
||||
output.Map(fSubtitles),
|
||||
output.Map(iMain.MayA()),
|
||||
output.VideoCodec(codec.X264),
|
||||
output.AudioCodec(codec.Copy),
|
||||
output.File("out2.mp4"),
|
||||
)
|
||||
)
|
||||
|
||||
err := ffmpeg.New(
|
||||
ffmpeg.WithDebug(true),
|
||||
ffmpeg.WithDry(true),
|
||||
).
|
||||
AddInput(iMain).
|
||||
AddFilter(fDelogo, fGBlur, fOverlay, fSubtitles).
|
||||
AddOutput(oOnly).
|
||||
Run(ctx)
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
}
|
@@ -87,12 +87,22 @@ func Color(c string, w, h int32, d float32) *SingleFilter {
|
||||
}
|
||||
|
||||
// 裁切
|
||||
func Crop[T Expr](x, y, w, h T) *SingleFilter {
|
||||
func Crop[T Expr](w, h, x, y T) *SingleFilter {
|
||||
return &SingleFilter{
|
||||
name: naming.Default.Gen(),
|
||||
content: fmt.Sprintf(
|
||||
"crop=%v:%v:%v:%v",
|
||||
x, y, w, h,
|
||||
w, h, x, y,
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
// 高斯模糊
|
||||
func GBlur(sigma int32) *SingleFilter {
|
||||
return &SingleFilter{
|
||||
name: naming.Default.Gen(),
|
||||
content: fmt.Sprintf(
|
||||
"gblur=sigma=%d", sigma,
|
||||
),
|
||||
}
|
||||
}
|
||||
@@ -108,6 +118,17 @@ func Fade(t string, st, d float32, c string) *SingleFilter {
|
||||
}
|
||||
}
|
||||
|
||||
// 字幕
|
||||
func Subtitles(filename, fontsdir, forceStyle string) *SingleFilter {
|
||||
return &SingleFilter{
|
||||
name: naming.Default.Gen(),
|
||||
content: fmt.Sprintf(
|
||||
"subtitles=f=%s:fontsdir=%s:force_style='%s'",
|
||||
filename, fontsdir, forceStyle,
|
||||
),
|
||||
}
|
||||
}
|
||||
|
||||
// 视频帧显示时间戳
|
||||
func SetPTS(expr string) *SingleFilter {
|
||||
return &SingleFilter{
|
||||
|
Reference in New Issue
Block a user