package main

import (
"bytes"
"fmt"
"io/ioutil"
"log"
"os"
"os/exec"
"strings"
) func main() { // 读取当前目录中的所有文件和子目录
path := "E:/video"
files, err := ioutil.ReadDir(path)
if err != nil {
panic(err)
}
// 获取文件,并输出它们的名字
for _, file := range files {
realPath := path+"/"+file.Name()
name := file.Name()
nameArr := strings.Split(name,".")
//fmt.Println(nameArr)
ext := nameArr[len(nameArr)-1]
if ext == "mp4" || ext == "flv" {
fmt.Println(name)
translate(realPath,name,ext )
} } } func translate(inputPath string,fileName string,ext string ){
var out bytes.Buffer
fmt.Print("默认输出音频路径: d:/audio\n") outputName := strings.Replace(fileName,ext , "aac", 1) fmt.Println(outputName)
outPutDir := "d:/audio"
mkdirOutputDir(outPutDir) outputPath := outPutDir+"/"+outputName fileExist := FileExist(outputPath)
if fileExist == true {
deleteFile(outputPath)
} cmdArguments := []string{"-i", inputPath, outputPath}
cmd := exec.Command("ffmpeg", cmdArguments...) cmd.Stdout = &out
err := cmd.Run()
if err != nil {
log.Fatal(err)
} else{
fmt.Println("...... 转换成功.......")
}
} func deleteFile(fileName string) {
err := os.Remove(fileName) if err != nil {
//fmt.Println("删除已经存在的文件 "+fileName+" 失败")
} else {
//fmt.Println("删除已经存在的文件 "+fileName+" 成功")
}
}
func mkdirOutputDir(dir string) { exist, err := PathExists(dir)
if err != nil {
fmt.Printf("get dir error![%v]\n", err)
return
} if exist {
//fmt.Printf("已经存在目录 [%v]\n", dir)
} else {
//fmt.Printf("不存在目录[%v]\n", dir)
// 创建文件夹
err := os.Mkdir(dir, os.ModePerm)
if err != nil {
//fmt.Printf("创建目录失败[%v]\n", err)
} else {
//fmt.Printf("创建目录成功\n")
}
}
} // 判断文件夹是否存在
func PathExists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil {
return true, nil
}
if os.IsNotExist(err) {
return false, nil
}
return false, err
} func FileExist(path string) bool {
_, err := os.Lstat(path)
return !os.IsNotExist(err)
}

  

最新文章

  1. 浅谈async、await关键字 => 深谈async、await关键字
  2. MM常用BADI
  3. maven常用插件: 打包源码 / 跳过测试 / 单独打包依赖项
  4. python环境搭建-pycharm2016软件注册码
  5. ftp的20 21端口和主动被动模式
  6. C# 一个简单的秒表引发的窗体卡死问题
  7. window 安装 Protobuf
  8. C# 并行编程 之 并发集合 (.Net Framework 4.0)(转)
  9. 关于(x&y)+((x^y)>>1)的探究
  10. 空间索引 - GeoHash算法及其实现优化
  11. C++中的explicit关键字的用法
  12. 两种常用的全排列算法(java)
  13. 5阶m序列
  14. postgresql时间处理
  15. You have new mail in /var/spool/mail/root 解决烦琐提示的方法
  16. Docker容器学习与分享03
  17. Intellij Idea 创建JavaWeb项目入门(一)
  18. (69)Wangdao.com第十一天_JavaScript 指定函数对象的 this 上下文对象
  19. 一个简单的perl程序
  20. 为什么要使用JS模板引擎

热门文章

  1. 《C语言进阶剖析》课程目录
  2. k8s运行容器之deployment(三)
  3. 线程的阻塞 sleep() wait() yield()
  4. 使用Scrcpy实现电脑控制安卓手机
  5. Jmeter(二十三) - 从入门到精通 - JMeter函数 - 上篇(详解教程)
  6. 【JVM系列1】深入分析Java虚拟机堆和栈及OutOfMemory异常产生原因
  7. DVWA SQL-injection 附python脚本
  8. Laver 文件版本遍历器
  9. SON Web Tokens 工具类 [ JwtUtil ]
  10. Go-The process cannot access the file because it is being used by another process.