145 lines
3.4 KiB
Go
145 lines
3.4 KiB
Go
package main
|
||
|
||
import (
|
||
"encoding/base64"
|
||
"fmt"
|
||
"github.com/manifoldco/promptui"
|
||
"os"
|
||
"path/filepath"
|
||
"strings"
|
||
)
|
||
|
||
func img(video *Video) {
|
||
tip("图片信息,可以是图片URL或图片在此电脑上的本地图片。")
|
||
tip("图片URL:请确保图片URL可被访问。eg:https://ark-project.tos-cn-beijing.volces.com/doc_image/i2v_foxrgirl.png")
|
||
tip("本地图片:请确保图片存在的jpg/jpge/png图片,路径名称请用英文,避免不必要的错误。eg:C:\\Users\\Administrator\\Desktop\\sucai\\fox.png")
|
||
for {
|
||
input("请设置图片信息: ")
|
||
m, _ := reader.ReadString('\n')
|
||
video.Url = strings.TrimSpace(m)
|
||
if isURL(video.Url) { //判断是否为URL
|
||
isImg, err := checkURL(video.Url)
|
||
if !isImg {
|
||
warning("URL内容不是图片,请检查URL是否正确!")
|
||
continue
|
||
}
|
||
if err != nil {
|
||
warning("URL不可访问,请检查网络或URL是否正确!")
|
||
continue
|
||
}
|
||
}
|
||
|
||
if isLocalPath(video.Url) {
|
||
fileExt := strings.ToLower(filepath.Ext(video.Url))
|
||
var mimeType string
|
||
switch fileExt {
|
||
case ".jpg", ".jpeg":
|
||
mimeType = "jpeg"
|
||
case ".png":
|
||
mimeType = "png"
|
||
default:
|
||
warning("不支持的图片格式: %s", fileExt)
|
||
}
|
||
content, err := os.ReadFile(video.Url)
|
||
if err != nil {
|
||
warning("无法读取文件: %v", err)
|
||
continue
|
||
}
|
||
// 将文件内容编码为Base64字符串
|
||
dataURL := fmt.Sprintf("data:image/%s;base64,%s", mimeType, base64.StdEncoding.EncodeToString(content))
|
||
video.Url = dataURL
|
||
}
|
||
break
|
||
}
|
||
}
|
||
|
||
func desc(video *Video) {
|
||
var d strings.Builder
|
||
tip("描述信息,请输入一段描述文字,描述文字越多,生成视频越精彩。")
|
||
input("请设置描述信息: ")
|
||
text, _ := reader.ReadString('\n')
|
||
d.WriteString(fmt.Sprintf("%s ", strings.TrimSpace(text)))
|
||
d.WriteString("--watermark ")
|
||
d.WriteString("false ")
|
||
for {
|
||
prompt := promptui.Select{
|
||
Label: "分辨率: ",
|
||
Items: []string{"480p", "720p"},
|
||
}
|
||
_, r, err := prompt.Run()
|
||
if err != nil {
|
||
warning("Prompt failed %v\n", err)
|
||
continue
|
||
}
|
||
d.WriteString("--resolution ")
|
||
d.WriteString(r)
|
||
d.WriteString(" ")
|
||
break
|
||
}
|
||
|
||
for {
|
||
prompt := promptui.Select{
|
||
Label: "视频时长(秒): ",
|
||
Items: []string{"5", "10"},
|
||
}
|
||
_, r, err := prompt.Run()
|
||
if err != nil {
|
||
warning("Prompt failed %v\n", err)
|
||
continue
|
||
}
|
||
d.WriteString("--dur ")
|
||
d.WriteString(r)
|
||
d.WriteString(" ")
|
||
break
|
||
}
|
||
tip("adaptive:根据所上传图片的比例,自动选择最合适的宽高比。")
|
||
for {
|
||
prompt := promptui.Select{
|
||
Label: "视频的宽高比例: ",
|
||
Items: []string{"adaptive", "16:9", "9:16", "4:3", "3:4", "21:9", "9:21", "1:1"},
|
||
}
|
||
_, r, err := prompt.Run()
|
||
if err != nil {
|
||
warning("Prompt failed %v\n", err)
|
||
continue
|
||
}
|
||
d.WriteString("--ratio ")
|
||
d.WriteString(r)
|
||
d.WriteString(" ")
|
||
break
|
||
}
|
||
|
||
for {
|
||
prompt := promptui.Select{
|
||
Label: "帧率: ",
|
||
Items: []string{"16", "24"},
|
||
}
|
||
_, r, err := prompt.Run()
|
||
if err != nil {
|
||
warning("Prompt failed %v\n", err)
|
||
continue
|
||
}
|
||
d.WriteString("--framepersecond ")
|
||
d.WriteString(r)
|
||
d.WriteString(" ")
|
||
break
|
||
}
|
||
|
||
for {
|
||
prompt := promptui.Select{
|
||
Label: "是否固定摄像头: ",
|
||
Items: []string{"false", "true"},
|
||
}
|
||
_, r, err := prompt.Run()
|
||
if err != nil {
|
||
warning("Prompt failed %v\n", err)
|
||
continue
|
||
}
|
||
d.WriteString("--camerafixed ")
|
||
d.WriteString(r)
|
||
d.WriteString(" ")
|
||
break
|
||
}
|
||
video.Text = d.String()
|
||
}
|