zoukankan      html  css  js  c++  java
  • go批量转换视频为音频

    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
    ")
    
    	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]
    ", err)
    		return
    	}
    
    	if exist {
    		//fmt.Printf("已经存在目录 [%v]
    ", dir)
    	} else {
    		//fmt.Printf("不存在目录[%v]
    ", dir)
    		// 创建文件夹
    		err := os.Mkdir(dir, os.ModePerm)
    		if err != nil {
    			//fmt.Printf("创建目录失败[%v]
    ", err)
    		} else {
    			//fmt.Printf("创建目录成功
    ")
    		}
    	}
    }
    
    // 判断文件夹是否存在
    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)
    }
    

      

  • 相关阅读:
    hdu 3579 Hello Kiki (中国剩余定理)
    hdu 1573 X问题 (非互质的中国剩余定理)
    poj 2891 Strange Way to Express Integers (非互质的中国剩余定理)
    查看cache中消耗性能的语句
    sqlserver2008 R2中查找未使用过的索引
    【转】如何新建索引:高开销的缺失索引
    查看sqlserver 2008中性能低下的语句
    经典
    符合条件的记录有则修改没有则添加的小优化技巧
    测试分区表,以及在现有表上新建分区方案,以及把分区表变为普通表测试代码!!
  • 原文地址:https://www.cnblogs.com/brady-wang/p/13644031.html
Copyright © 2011-2022 走看看