Added ExtractAudio option

Let's you extract audio from combined video+audio media (most websites
supported by yt-dlp)
This commit is contained in:
Logan G 2025-01-03 18:29:08 -07:00
parent 5e9774f70d
commit 7c72c89950
Signed by: logan
GPG key ID: E328528C921E7A7A
3 changed files with 65 additions and 10 deletions

View file

@ -78,7 +78,28 @@ func downloadVideo(url string, path string, group GroupConfig) (err error) {
}
/* AUDIO */
if group.AudioFormat != "" {
if group.ExtractFormat != "" {
log.Debugf("Extracting audio from \"%s\" with format \"%s\"", video.Info.ID, group.ExtractFormat)
audioDLResult, err := video.Download(context.Background(), group.ExtractFormat)
if err != nil {
return err
}
defer audioDLResult.Close()
file, err := os.OpenFile(tempPath+"-extract", os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0644)
if err != nil {
return err
}
defer file.Close()
io.Copy(file, audioDLResult)
audioDLResult.Close()
file.Close()
} else if group.AudioFormat != "" {
log.Debugf("Downloading audio \"%s\" with format \"%s\"", video.Info.ID, group.AudioFormat)
audioDLResult, err := video.Download(context.Background(), group.AudioFormat)
@ -112,6 +133,14 @@ func downloadVideo(url string, path string, group GroupConfig) (err error) {
if err := os.Remove(tempPath+"-audio"); err != nil {
log.Warnf("Could not remove file \"%s\"", tempPath+"-audio")
}
} else if group.ExtractFormat != "" {
if err := extractAudio(tempPath+"-extract", group.CFormat, path); err != nil {
log.Errorf("Could not extract audio from \"%s\" to \"%s\"", tempPath+"-extract", path)
}
if err := os.Remove(tempPath+"-extract"); err != nil {
log.Warnf("Could not remove file \"%s\"", tempPath+"-extract")
}
} else if group.VideoFormat != "" {
copyFile(tempPath+"-vid", path)

View file

@ -29,3 +29,26 @@ func mergeStreams(path1 string, path2 string, format string, output string) (err
return ffmpeg.Output(input, output, kwArgs).OverWriteOutput().ErrorToStdOut().Silent(silent).Run()
}
func extractAudio(path1 string, format string, output string) (err error) {
input := []*ffmpeg.Stream{ffmpeg.Input(path1)}
defaultArgs := ffmpeg.KwArgs{"map": "0:a", "c:a": "copy", "format": format}
var ffmpegLogLevel ffmpeg.KwArgs
var silent bool
if Flags.Verbose {
ffmpegLogLevel = ffmpeg.KwArgs{"v": "info"}
silent = false
} else if Flags.Quiet {
ffmpegLogLevel = ffmpeg.KwArgs{"v": "quiet"}
silent = true
} else {
ffmpegLogLevel = ffmpeg.KwArgs{"v": "error"}
silent = true
}
kwArgs := ffmpeg.MergeKwArgs([]ffmpeg.KwArgs{ffmpegLogLevel, defaultArgs})
return ffmpeg.Output(input, output, kwArgs).OverWriteOutput().ErrorToStdOut().Silent(silent).Run()
}

View file

@ -45,8 +45,11 @@ type GroupConfig struct {
OutputDir string
FileName string
CFormat string
ExtractFormat string
VideoFormat string
AudioFormat string
DownloadSubtitles bool // Currently useless
DownloadThumbnails bool // Currently useless
NumVideos uint
SizeLimit float64
Filters []struct {