FFmpeg|青训营笔记

61 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

一、本地IO

以下是一个代码示例,实现从本地来,到本地去的功能,记得改路径和名称!

package main

import (
	"fmt"
	"os/exec"
)

func main() {
	// 设置视频源文件路径
	inputFile := "input.mp4"
	// 设置转码后文件路径
	outputFile := "output.mp4"

	// 设置 ffmpeg 命令行参数
	args := []string{"-i", inputFile, "-c", "copy", outputFile}

	// 创建 *exec.Cmd
	cmd := exec.Command("ffmpeg", args...)

	// 运行 ffmpeg 命令
	if err := cmd.Run(); err != nil {
		fmt.Println(err)
		return
	}

	fmt.Println("转码成功")
}
复制代码

如果你没有报错的话,可以看到,有输出文件,但是这一来一回有什么用呢?

事实上目的就是让这个转码后的视频文件是可以在线播放的。

二、保存到数据库

光从本地来到本地去总是不长久的,我们要打开数据库的大门;

首先需要准备好数据库和表,这里我们同样使用Navicat来操作,具体操作步骤如下,不需要的可以跳过:

新建连接 -> MySQL -> 连接名随便 -> 密码随便(强烈建议与数据库密码相同否则可能会产生一些错误) -> 双击左侧打开 -> 右键information_schema -> 新建数据库 -> 名称随便 -> 字符集utf8mb4
复制代码

然后执行如下代码即可,注意修改你的路径、名称、数据库名称等信息

package main

import (
	"fmt"
	"os/exec"

	"github.com/jinzhu/gorm"
	_ "github.com/jinzhu/gorm/dialects/mysql"
)

// 定义 Video struct,用来存储视频信息
type Video struct {
	gorm.Model
	Name string
	Path string
}

func main() {
	// 连接数据库
	db, err := gorm.Open("mysql", "root:password@/database?charset=utf8&parseTime=True&loc=Local")
	if err != nil {
		panic("failed to connect to the database")
	}
	defer db.Close()

	// 创建表
	db.AutoMigrate(&Video{})

	// FFmpeg命令转换视频
	cmd := exec.Command("ffmpeg", "-i", "input.mp4", "-vcodec", "libx264", "-acodec", "aac", "-strict", "-2", "output.mp4")

	err = cmd.Run()
	if err != nil {
		fmt.Println(err)
	}

	// 在数据库里存储视频信息
	video := Video{Name: "output", Path: "output.mp4"}
	db.Create(&video)
}
复制代码

三个注意

  • 首席需要注意的是,在安装和配置FTP服务器的过程中,需要遵循安全原则,如设置强密码,限制访问权限等,以防止未经授权的访问。
  • 其次还需要注意的是,在使用FTP服务器时需要注意防火墙设置,确保FTP服务器能够正常访问。
  • 最后需要注意的是,如果您使用的是公网IP地址,需要注意安全性,因为您的FTP服务器可能会被恶意攻击。