25

how can I convert all of the mp4 files in a given folder to mp3 using ffmpeg. Almost all of the links I have seen on google is all about converting mp4 video to mp3. I can do this via VLC player but I have got huge collection ~ 1000 mp4 audio files and want this to be done over command line by some script or command. Is it possible to do it via gstreamer?

2
  • Are they all in the same directory?
    – llogan
    Jul 19, 2016 at 15:59
  • Yes.Any way I found the way by calling the ffmpeg.exe using a C# code and using Linq and iterating over each file.
    – Raulp
    Jul 20, 2016 at 4:14

2 Answers 2

40

One method is a bash for loop.

For converting only .mp4 files:

mkdir outputs
for f in *.mp4; do ffmpeg -i "$f" -c:a libmp3lame "outputs/${f%.mp4}.mp3"; done

For converting .m4a, .mov, and .flac:

mkdir outputs
for f in *.{m4a,mov,flac}; do ffmpeg -i "$f" -c:a libmp3lame "outputs/${f%.*}.mp3"; done

For converting anything use the "*" wildcard:

mkdir outputs
for f in *; do ffmpeg -i "$f" -c:a libmp3lame "outputs/${f%.*}.mp3"; done
1
  • what if I have to extend the above script for more different number of files ( like .m4a,.mov etc) Like I did : FileInfo[] Files = d.GetFiles(".mp4").Union(d.GetFiles(".<any other file extension>")).ToArray(); .
    – Raulp
    Jul 21, 2016 at 5:59
3
FileInfo[] Files = d.GetFiles("*.mp4").Union(d.GetFiles("*.<any other file extension>")).ToArray(); 

foreach (FileInfo file in Files)
{
    // str = str + ", " + file.Name;
    builder.Append(Path.GetFileNameWithoutExtension(file.Name));

    ProcessStartInfo startInfo = new ProcessStartInfo();
    startInfo.CreateNoWindow = false;
    startInfo.UseShellExecute = false;
    startInfo.FileName = "ffmpeg.exe";
    startInfo.WindowStyle = ProcessWindowStyle.Hidden;
    startInfo.RedirectStandardOutput = !string.IsNullOrEmpty("test");
    startInfo.Arguments = "-i " + filename + ".mp4 -q:a 0 -map a " + filename + ".mp3";
}

Not the answer you're looking for? Browse other questions tagged or ask your own question.