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?
-
Are they all in the same directory?– lloganJul 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.– RaulpJul 20, 2016 at 4:14
Add a comment
|
2 Answers
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
-
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(); .– RaulpJul 21, 2016 at 5:59
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";
}