音楽ファイルのフォーマットを一括変換する方法(FFmpeg)

この記事は公開から4年以上経過しています。

Linux上に沢山ある音楽ファイルをまとめて別のフォーマットに変換したい事情があったため、そのときの対応の備忘録です。

この手の変換ツールは調べれば何かあると思いますが、単発の要件であれば自分で作ってしまったほうが早いです。

ちなみに、今回はLinux上での利用を前提としているためVisualStudioCodeと.NET Coreのコンソールアプリケーションで作成しましたが、.NET CoreとFFmpegが動けば他のプラットフォームでも利用可能です。
また、.NET Coreプロジェクトの作成方法等については、インターネットで検索すれば分かりやすく説明されていますので、ここでの説明は割愛します。

Pythonバージョンは「PythonのPydubを使ってmp3をwmaに一括変換する方法」をご参照下さい。

このプログラムはファイル書き込み操作を行います。ファイル喪失等にも繋がりかねないため、プログラム実行の際は、充分にご注意下さい。
また、変換することだけが目的であるため、エラー処理等は一切実装していません。


サンプルソースコード

今回のサンプルソースではMP3からWMAに固定変換していますが、単なるバッチ処理なので少し修正すれば別のフォーマットへの変換やビットレートだけ変更するなどのカスタマイズにも対応が可能です。興味がある方はFFmpegの解説サイト等をご覧ください。

// Program.cs
using System;
using System.IO;
using System.Diagnostics;

namespace MP3ToWMA
{
    class Program
    {
        static void Main(string[] args)
        {
            // 入力ディレクトリ名を引数から取得
            var currentDir = args[0];
            Console.WriteLine($"'y'を押すと{currentDir}のファイルの変換を開始します");
            if (Console.ReadKey().Key != ConsoleKey.Y)
            {
                Console.WriteLine("処理を中止しました");
                // 終了 ※制御フローに逆らわないgoto使用
                goto END;
            }

            // 出力ディレクトリ名を同階層から取得、無ければ作成
            var outputDir = Path.Combine(currentDir, "wma");
            if (!Directory.Exists(outputDir))
                Directory.CreateDirectory(outputDir);

            // MP3ファイルを入力ディレクトリから列挙
            var sourceFilePaths = Directory.EnumerateFiles(currentDir, "*.mp3");
            foreach (var sourceFilePath in sourceFilePaths)
            {
                // 拡張子を除くファイル名部分だけ取得
                var baseFileName = Path.GetFileNameWithoutExtension(sourceFilePath);
                // 出力ファイルパスを作成
                var destinationFilePath = Path.Combine(outputDir, $"{baseFileName}.wma");

                // FFmpegでMP3→WMA(128k)に変換
                Console.WriteLine($"{baseFileName}の処理を開始");
                Process.Start("ffmpeg", $"-i \"{sourceFilePath}\" -vn -ac 2 -ar 44100 -ab 128k -acodec wmav2 -f asf \"{destinationFilePath}\"").WaitForExit();
                Console.WriteLine($"{baseFileName}の処理が終了");
            }
            Console.WriteLine("処理が完了しました");
        END:
            Console.ReadKey();
        }
    }
}


使い方

ビルドしたdllを実行する際に、第一引数に処理対象のMP3ファイルが格納されているディレクトリを指定します。

変換結果ファイルは上記ディレクトリ内にwmaというディレクトリを作成し、そこに同名(拡張子はwma)で格納します。

dotnet MP3ToWMA.dll "入力ファイルのあるディレクトリパス"


参考ウェブサイトなど

  • Qiita
    [ffmpeg] 音声形式の変換方法まとめ

以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする