From e3992087ae5e83bc55cb2aee712f25e9985834ed Mon Sep 17 00:00:00 2001 From: Ruan Gustavo Date: Fri, 28 Jul 2023 11:10:16 -0300 Subject: [PATCH 1/2] Add output flag --- cmd/root.go | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/cmd/root.go b/cmd/root.go index 25f6340..b5ad2c6 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -20,6 +20,8 @@ import ( "net/url" "os" "os/exec" + "regexp" + "strings" "github.com/akiomik/vimeo-dl/config" "github.com/akiomik/vimeo-dl/vimeo" @@ -31,6 +33,7 @@ var ( userAgent string videoId string audioId string + output string combine bool ) @@ -56,7 +59,8 @@ var rootCmd = &cobra.Command{ os.Exit(1) } - videoOutputFilename := masterJson.ClipId + "-video.mp4" + videoOutputFilename := generateOutputFilename(masterJson.ClipId, "video.mp4") + err = createVideo(client, masterJson, masterJsonUrl, videoOutputFilename) if err != nil { fmt.Println("Error:", err.Error()) @@ -73,7 +77,8 @@ var rootCmd = &cobra.Command{ } if len(masterJson.Audio) > 0 { - audioOutputFilename := masterJson.ClipId + "-audio.mp4" + audioOutputFilename := generateOutputFilename(masterJson.ClipId, "audio.mp4") + err = createAudio(client, masterJson, masterJsonUrl, audioOutputFilename) if err != nil { fmt.Println("Error:", err.Error()) @@ -81,7 +86,8 @@ var rootCmd = &cobra.Command{ } if combine { - outputFilename := masterJson.ClipId + ".mp4" + outputFilename := generateOutputFilename(masterJson.ClipId, ".mp4") + err = combineVideoAndAudio(videoOutputFilename, audioOutputFilename, outputFilename) if err != nil { fmt.Println("Error:", err.Error()) @@ -99,6 +105,7 @@ func init() { rootCmd.Flags().StringVarP(&userAgent, "user-agent", "", "", "user-agent for request") rootCmd.Flags().StringVarP(&videoId, "video-id", "", "", "video id") rootCmd.Flags().StringVarP(&audioId, "audio-id", "", "", "audio id") + rootCmd.Flags().StringVarP(&output, "output", "o", "", "output file name") rootCmd.Flags().BoolVarP(&combine, "combine", "", false, "combine video and audio into a single mp4 (ffmpeg is required)") rootCmd.MarkFlagRequired("input") } @@ -173,3 +180,19 @@ func combineVideoAndAudio(videoFilename string, audioFilename string, outputFile return nil } + +func generateOutputFilename(clipId, suffix string) string { + if output == "" { + return clipId + "-" + suffix + } + + sanitizedOutput := sanitizeFileName(output) + return sanitizedOutput + "-" + suffix +} + +func sanitizeFileName(filename string) string { + invalidCharRegex := regexp.MustCompile(`[\\/:"*?<>|]`) + filename = invalidCharRegex.ReplaceAllString(filename, "_") + filename = strings.TrimSpace(filename) + return filename +} From 6545106877b81547efedf0a83ae75cc72306f068 Mon Sep 17 00:00:00 2001 From: Ruan Gustavo Date: Fri, 28 Jul 2023 11:16:30 -0300 Subject: [PATCH 2/2] Update README.md with "output" flag info --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 4d4af0c..05bf190 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,15 @@ vimeo-dl -i "https://8vod-adaptive.akamaized.net/xxx/yyy/sep/video/9f88d1ff,b83d ffmpeg -i ${clip_id}-video.mp4 -i ${clip_id}-audio.mp4 -c copy ${clip_id}.mp4 ``` +```sh +# Download a video with the specified output file name +vimeo-dl -i "https://8vod-adaptive.akamaized.net/xxx/yyy/sep/video/9f88d1ff,b83d0f9d,da44206b,f34fd50d,f9ebc26f/master.json?base64_init=1" \ + --video-id "b83d0f9d" \ + --audio-id "b83d0f9d" \ + --combine \ + -o "output" +``` + ## Options ``` @@ -54,6 +63,7 @@ Flags: --user-agent string user-agent for request -v, --version version for vimeo-dl --video-id string video id + -o, --output output file name ``` ## Install