Skip to content

Commit f6ee9d5

Browse files
committed
- [+] implement transpose feature
1 parent c1b7045 commit f6ee9d5

2 files changed

Lines changed: 67 additions & 12 deletions

File tree

ffcvt.go

Lines changed: 54 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -54,24 +54,48 @@ type videoCol struct {
5454
// Global variables definitions
5555

5656
var (
57-
version = "1.9.0"
58-
date = "2023-03-16"
57+
version = "1.10.0"
58+
date = "2023-05-16"
5959

6060
encodedExt string = _encodedExt
6161
totalOrg int64 = 1
6262
totalNew int64 = 1
6363
vidCol videoCol
6464
workDirs []string
6565
cutOps string = ""
66+
67+
transpFrom, transpTo string
6668
)
6769

70+
var pitch = map[string]string{
71+
"C": "261.63",
72+
"Db": "277.18",
73+
"D": "293.66",
74+
"Eb": "311.13",
75+
"E": "329.63",
76+
"F": "349.23",
77+
"Gb": "369.99",
78+
"G": "392.00",
79+
"Ab": "415.30",
80+
"A": "440.00",
81+
"Bb": "466.16",
82+
"B": "493.88",
83+
}
84+
85+
func init() {
86+
pitch["C#"] = pitch["Db"]
87+
pitch["D#"] = pitch["Eb"]
88+
pitch["F#"] = pitch["Gb"]
89+
pitch["G#"] = pitch["Ab"]
90+
pitch["A#"] = pitch["Bb"]
91+
}
92+
6893
////////////////////////////////////////////////////////////////////////////
6994
// Main
7095

7196
func main() {
72-
flag.Usage = Usage
73-
flag.Parse()
7497

98+
// == Commandline handling
7599
if Opts.PrintV {
76100
fmt.Printf("%s version %s built on %s\n\n", progname, version, date)
77101

@@ -154,8 +178,24 @@ cut_ok:
154178
if len(Opts.Directory)+len(Opts.File) < 1 {
155179
Usage()
156180
}
157-
getDefault()
158-
//fmt.Fprintf(os.Stderr, "Defaults: '%+v'\n", Defaults)
181+
if len(Opts.TranspFrom) != 0 && len(Opts.TranspTo) == 0 ||
182+
len(Opts.TranspFrom) == 0 && len(Opts.TranspTo) != 0 {
183+
fmt.Fprintf(os.Stderr, "Signature transposition needs transpose keys for both from and to\n")
184+
os.Exit(1)
185+
}
186+
if len(Opts.TranspFrom) != 0 {
187+
var ok bool
188+
if transpFrom, ok = pitch[Opts.TranspFrom]; !ok {
189+
fmt.Fprintf(os.Stderr, "Unknown key signature to transpose from\n")
190+
os.Exit(1)
191+
}
192+
if transpTo, ok = pitch[Opts.TranspTo]; !ok {
193+
fmt.Fprintf(os.Stderr, "Unknown key signature to transpose to\n")
194+
os.Exit(1)
195+
}
196+
fmt.Fprintf(os.Stderr, "Transposing from '%s' (%s) to '%s' (%s)\n",
197+
Opts.TranspFrom, transpFrom, Opts.TranspTo, transpTo)
198+
}
159199

160200
encodedExt = Opts.Ext
161201
// Sanity check
@@ -359,7 +399,7 @@ func transcodeFile(inputName string) {
359399
debug(fsinfo, 4)
360400
/*
361401
362-
Cases when `-map`s are necessary
402+
Cases when `-map`s are necessary to deal with here
363403
364404
- more than one audio stream, and we pick eng stream only
365405
- more than one subtitle stream, and
@@ -395,6 +435,12 @@ func transcodeFile(inputName string) {
395435
args := []string{"-i", inputName}
396436
args = append(args, strings.Fields(Opts.OptExtra)...)
397437
args = encodeParametersS(encodeParametersA(encodeParametersV(args)))
438+
if len(transpFrom) != 0 {
439+
args = append(args, "-af")
440+
af := fmt.Sprintf("atempo=%s/%s,asetrate=44100*%[2]s/%[1]s",
441+
transpFrom, transpTo)
442+
args = append(args, af)
443+
}
398444
if Opts.Force {
399445
args = append(args, "-y")
400446
}
@@ -554,6 +600,7 @@ func encodeParametersA(args []string) []string {
554600
if Opts.A2Opus {
555601
Opts.AES = "libopus"
556602
}
603+
//fmt.Printf("] %v + AE: '%s' '%s'\n", args, Opts.AES, Opts.ABR)
557604
if Opts.AES != "" {
558605
args = append(args, "-c:a", Opts.AES)
559606
}

structEnc.go

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package main
33
import (
44
"embed"
55
"encoding/json"
6+
"flag"
67
"io/ioutil"
78
"log"
89
)
@@ -34,10 +35,20 @@ type Encoding struct {
3435
var Defaults map[string]Encoding
3536

3637
func init() {
37-
initVars()
38+
initVars() // define flag vars
3839
debug(Opts.CRF, 3)
39-
initDefaults()
40+
41+
flag.Usage = Usage
42+
flag.Parse()
43+
44+
initDefaults() // read & populate defaults from ffcvt.json
45+
debug(Opts.CRF, 3)
46+
47+
getDefault() // re-read defaults based on cli -cfg & -t
48+
//fmt.Fprintf(os.Stderr, "Defaults: '%+v'\n", Defaults)
4049
debug(Opts.CRF, 3)
50+
flag.Parse() // update Opts again from cli to overwrite defaults if necessary
51+
initVals() // update as per cli settings
4152
}
4253

4354
//go:embed ffcvt.json
@@ -51,9 +62,6 @@ func initDefaults() {
5162
}
5263

5364
func getDefault() {
54-
initVals()
55-
debug(Opts.CRF, 3)
56-
5765
if Opts.Cfg != "" {
5866
data, err := ioutil.ReadFile(Opts.Cfg)
5967
checkError(err)

0 commit comments

Comments
 (0)