◊ A tool for creating a sequence of ascii text files from given video using FFMPEG ◊
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

145 lines
3.3 KiB

package jsonData
import (
"encoding/json"
"io/ioutil"
"os"
"path/filepath"
)
type Data struct {
MaxGOROUTINES uint
WIDTH uint
HEIGHT uint
ExtractionFPS int
AudioFilePath string
AudioPlayback bool
FFMPEGbin string
VideoFramesOutputPath string
InputVideo string
AsciiFilesPath string
AsciiChars []string
}
const (
jsonFilename string = "VideoToAsciiSettings.json"
)
var (
defaults = Data{
MaxGOROUTINES: 50,
WIDTH: 210,
HEIGHT: 60,
ExtractionFPS: 30,
AudioFilePath: ``,
AudioPlayback: false,
FFMPEGbin: `(must have)`,
VideoFramesOutputPath: ``,
InputVideo: `(must have)`,
AsciiFilesPath: ``,
AsciiChars: []string{" ", "░", "▒", "▓", "█"},
}
currentDir, _ = os.Getwd()
)
func checkIfJsonExist() bool {
files, err := ioutil.ReadDir(currentDir)
if err != nil {
panic(err)
}
for _, file := range files {
if file.Name() == jsonFilename {
return true
}
}
return false
}
// This Json MUST be contained in the same directory with a binary
func createJson() *os.File {
json, err := os.Create(filepath.Join(currentDir, jsonFilename))
if err != nil {
panic(err)
}
return json
}
func writeDefaults(jsonSettings *os.File) {
marshalledDefaults, err := json.MarshalIndent(defaults, "", " ")
if err != nil {
panic(err)
}
jsonSettings.Write(marshalledDefaults)
}
func readFromJson() *Data {
file, err := ioutil.ReadFile(filepath.Join(currentDir, jsonFilename))
if err != nil {
panic(err)
}
var data Data
json.Unmarshal(file, &data)
videoFrames := filepath.Join(data.VideoFramesOutputPath)
asciiTxtPath := filepath.Join(data.AsciiFilesPath)
audioPath := filepath.Join(data.AudioFilePath)
if videoFrames == "" || videoFrames == "." || videoFrames == " " {
data.VideoFramesOutputPath = currentDir
}
if asciiTxtPath == "" || asciiTxtPath == "." || asciiTxtPath == " " {
data.AsciiFilesPath = currentDir
}
if audioPath == "" || audioPath == "." || audioPath == " " {
data.AudioFilePath = currentDir
}
return &data
}
func createDirs(data *Data) {
videoFrames := filepath.Join(data.VideoFramesOutputPath)
asciiTxtPath := filepath.Join(data.AsciiFilesPath)
audioPath := filepath.Join(data.AudioFilePath)
if videoFrames == "" || videoFrames == "." || videoFrames == " " {
videoFrames = currentDir
}
if asciiTxtPath == "" || asciiTxtPath == "." || asciiTxtPath == " " {
asciiTxtPath = currentDir
}
if audioPath == "" || audioPath == "." || audioPath == " " {
audioPath = currentDir
}
err := os.MkdirAll(videoFrames, os.ModePerm)
if err != nil {
panic(err)
}
err = os.MkdirAll(asciiTxtPath, os.ModePerm)
if err != nil {
panic(err)
}
err = os.MkdirAll(audioPath, os.ModePerm)
if err != nil {
panic(err)
}
}
func GetSettings() (*Data, bool) {
if checkIfJsonExist() == false {
jsonFile := createJson()
defer jsonFile.Close()
writeDefaults(jsonFile)
data := readFromJson()
createDirs(data)
return data, true
}
data := readFromJson()
createDirs(data)
return data, false
}