Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Convert m4a to mp3 on OS X command line using ffmpeg
brew update
brew link yasm
brew link x264
brew link lame
brew link xvid
brew install ffmpeg
ffmpeg wiki:
https://trac.ffmpeg.org/wiki/Encode/MP3
lame option Average kbit/s Bitrate range kbit/s ffmpeg option
-b 320 320 320 CBR (non VBR) example -b:a 320k (NB this is 32KB/s, or its max)
-V 0 245 220-260 -q:a 0 (NB this is VBR from 22 to 26 KB/s)
-V 1 225 190-250 -q:a 1
-V 2 190 170-210 -q:a 2
-V 3 175 150-195 -q:a 3
-V 4 165 140-185 -q:a 4
-V 5 130 120-150 -q:a 5
-V 6 115 100-130 -q:a 6
-V 7 100 80-120 -q:a 7
-V 8 85 70-105 -q:a 8
-V 9 65 45-85 -q:a 9
ffmpeg -i in.m4a -codec:a libmp3lame -qscale:a 1 out.mp3
@mavogel
Copy link

mavogel commented Aug 18, 2017

thx man :) there is a little typo: should be -codec:a
-> ffmpeg out.mp3 -i in.m4a -codec:a libmp3lame -qscale:a 1

@christofluethi
Copy link
Author

christofluethi commented Nov 23, 2017

thanks for pointing out. fixed.

@atchoo78
Copy link

atchoo78 commented Jan 14, 2021

Thank you for this. I created a macOS "Quick Action" out of this in Applescript/Automator (with "audio file in Finder" as input)

on run {input, parameters}
	tell application "Finder"
		set fileAlias to input as alias
		set fileName to name of fileAlias
		set fileExtension to name extension of fileAlias
		set AppleScript's text item delimiters to "."
		set title to text 1 thru text item -2 of fileName
		set theInputFilePath to POSIX path of fileAlias
		set theOutputFilePath to text item 1 of theInputFilePath
		set convert to do shell script "/usr/local/bin/ffmpeg '" & theOutputFilePath & ".mp3" & "' -i '" & theInputFilePath & "' -codec:a libmp3lame -qscale:a 1"
		set theOutput to theOutputFilePath & ".mp3"
	end tell
        return theOutput
end run

@dajare
Copy link

dajare commented Apr 29, 2021

Great to see this — a real help! One tweak that further refined this for me was needed, since I was getting an error, Trailing options were found on the commandline. My "quality" setting was being ignored as a consequence.

I followed the guidlelines about ordering elements on the ffmpeg syntax structure from this StackOverflow Q&A, and all was good. It only took putting the output file after its options, so tweaking the example given by OP:

ffmpeg -i in.m4a -codec:a libmp3lame -qscale:a 1 out.mp3

@christofluethi
Copy link
Author

christofluethi commented Apr 29, 2021

Great to see this — a real help! One tweak that further refined this for me was needed, since I was getting an error, Trailing options were found on the commandline. My "quality" setting was being ignored as a consequence.

I followed the guidlelines about ordering elements on the ffmep syntax structure from this StackOverflow Q&A, and all was good. It only took putting the output file after its options, so tweaking the example given by OP:

ffmpeg -i in.m4a -codec:a libmp3lame -qscale:a 1 out.mp3

thanks for heads up. changed it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment