Undisputed Posted March 11, 2023 Posted March 11, 2023 i have a script that is supposed to edit the pitch and speed and save as a mp3 like the input mp3 it gives no result, nothing saves the input file #include <File.au3> #include <Array.au3> #include <Constants.au3> ; Set the path to the FFmpeg executable Global $ffmpegPath = "C:\Users\user\Downloads\ffmpeg-master-latest-win64-gpl\ffmpeg-master-latest-win64-gpl\bin\ffmpeg.exe" ; Set the path to the folder containing the audio files Global $audioFolder = "C:\Users\user\Downloads\mp3\mp3" ; Set the desired pitch and speed adjustments Global $pitchAdjustment = 0.72 ; Increase pitch by 50% Global $speedAdjustment = 0.83 ; Decrease speed by 50% ; Recursively search for all MP3 files in the specified folder and its subfolders Global $mp3Files = _FileListToArrayRec($audioFolder, "*.mp3", $FLTAR_FILES, $FLTAR_RECUR, $FLTAR_NOSORT) ; Loop through each MP3 file and apply the pitch and speed adjustments using FFmpeg For $i = 1 To $mp3Files[0] ; Get the full path to the current MP3 file Local $mp3File = $mp3Files[$i] ; Get the path to the folder containing the current MP3 file Local $mp3Folder = StringLeft($mp3File, StringInStr($mp3File, "\", 0, -1)) ; Get the base filename (without extension) of the current MP3 file Local $mp3BaseName = StringRegExpReplace($mp3File, "(.*\\)(.*)(\.mp3)", "$2") ; Construct the command-line arguments for FFmpeg Local $ffmpegArgs = "-i """ & $mp3File & """ -filter:a ""atempo=" & $speedAdjustment & ",asetrate=44100*" & $pitchAdjustment & """ -vn -c:a libmp3lame -q:a 2 """ & $mp3Folder & $mp3BaseName & ".mp3""" ; Call FFmpeg to process the current MP3 file RunWait('"' & $ffmpegPath & '" ' & $ffmpegArgs, "", @SW_HIDE) Next how to fix it mp3.rar
argumentum Posted March 11, 2023 Posted March 11, 2023 hmmm, ffmpeg.exe -i "318.mp3" -filter:a "atempo=0.83,asetrate=44100*0.72" -vn -c:a libmp3lame -q:a 2 "318.mp3.mp3" I just run your code and it sounds like crap does what is told to do. Nothing wrong with it that I see. Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting.
mistersquirrle Posted March 11, 2023 Posted March 11, 2023 Yep, ran your code and it processed just fine. It created a separate file however, not overwriting the original. You have no logging, likely you have something wrong, like no files in the folder you set, or wrong ffmpeg directory. I would suggest that you add some form of logging to each line and figure out where it all goes wrong. Also set your RunWait to @SW_SHOW and make sure that it's actually running. It processes pretty quick and closes pretty fast, so you may want to look into logging the output of ffmpeg with StdoutRead: https://www.autoitscript.com/autoit3/docs/functions/StdoutRead.htm Additionally, your regex doesn't appear to work here: Local $mp3BaseName = StringRegExpReplace($mp3File, "(.*\\)(.*)(\.mp3)", "$2") I think maybe you want: (.*\\)?(.*)(\.mp3) Because it doesn't work, it saves the output as 318.mp3.mp3 as you can see in @argumentum's command line. Although I would recommend probably checking out _PathSplit instead: https://www.autoitscript.com/autoit3/docs/libfunctions/_PathSplit.htm This is likely a safer option than RegEx if you're not super familiar with it. This can also help with $mp3Folder We ought not to misbehave, but we should look as though we could.
argumentum Posted March 11, 2023 Posted March 11, 2023 35 minutes ago, mistersquirrle said: ... You have no logging, likely you have something wrong ... .. and me, I wrote a RunWaitEx() just for the OP**. So the RunWait() can be logged. ** I may have timed traveled Follow the link to my code contribution ( and other things too ). FAQ - Please Read Before Posting.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now