在 Windows 中,将 mp3 文件从较高比特率批量重新编码为较低比特率的好方法是什么?

在 Windows 中,将 mp3 文件从较高比特率批量重新编码为较低比特率的好方法是什么?

我有几千个 MP3 文件,它们都是混合比特率的。

我想运行一个可以批量编码为 128 kbps 的程序。有没有适用于 Windows 的合适且免费的解决方案?

答案1

很简单:这是一个免费的:http://winff.org
运行它并添加所有文件,然后转到选项按钮和音频设置选项卡并将音频比特率更改为 128。

它会花一点时间,然后会出现一个命令提示符,它会使用 ffmpeg 来发挥它的魔力

高级:如果您使用命令行,您可以下载 ffmpeg并使用以下命令行转换文件: ffmpeg -i source.mp3 -vn -ar 44100 -ac 2 -ab 128 -f mp3 output.mp3

如果将其放入批处理文件中,则可以一次转换一大堆。我的看起来像这样:

---convert.bat----

set formats=*.mp4 *.flv
set presets=-vn -ar 44100 -ac 2 -ab 192k -vol 400 -f mp3
set outputext=mp3

for %%g in (%formats%) do start /b /wait "" "%~dp0bin\ffmpeg.exe" -i "%~dp0%%g" %presets% "%~dp0%%~ng.%outputext%" && TITLE "Converted: "%%g

--end---

答案2

我嫂子家里的电脑里有大约 9GB 的音乐,她总是把电脑搞坏。然后我就得过来把音乐传输到笔记本电脑上,然后重新格式化后再传输回来。她不会注意到 256 kbps 和 128 kbps 之间的质量差异,而且她音乐收藏的传输时间几乎缩短了一半。

我认为你的问题不是转换 mp3,而是从你嫂子的机器快速恢复的过程。

因此,我建议如下:

  • 创建另一个分区(D:例如)。C:是你安装操作系统的地方(我假设它是Windows)和D:是您保存所有个人文件的地方。可以将“我的文档”移动到另一个文件夹
  • 格式化机器后,创建一个重影C:驱动器中,并使用它录制 DVD 或存储在D:分区上。(您可以尝试 Ghost 的 OSS 替代品,名为克隆兹拉也)

当你嫂子把机器弄坏时,你只需要在 C: 盘中恢复 Ghost Image(10 分钟内)。D: 中的所有文件都完好无损。

(如果你不喜欢我的建议,仍然想重新编码 mp3,你可以使用foob​​ar2000,一个免费的 Windows 音频播放器(它也可以转换文件)应用程序。)

答案3

我使用的是 dbPowerAmp。它有 21 天的全功能试用版,可以批量处理所有内容。

http://www.dbpoweramp.com/dmc.htm

答案4

在 9 GB 上,这将花费很长时间,但我使用的一种简单方法是遍历文件夹结构,找到 mp3,然后将任何尚未达到 128kbps 的文件放入ffmpeg需要安装的路径中。我在 Windows 上测试过这个,但还没有与任何工业级解决方案进行过基准测试。使用时请自担风险——它会破坏原始文件。

为了提高速度,您可以在 Perl 脚本中或手动为每个可用核心分叉几个进程,并在文件夹/文件的子集上运行每个进程,因为该任务是高度并行的。

# Convert files to mp3 recursively using ffmpeg, destroying originals

use strict;
use warnings;
use File::Copy;
use File::Find;

my $verbose = 0;
my $target_bitrate = 128;

# any mp3s above this bitrate will be converted to $target_bitrate
my $threshold_bitrate = 128; 

sub process {
    if (-f $_ && $_ =~ /\.mp3$/) {
        my $file = $_;
        my $info = `ffmpeg -i \"$file\" 2>&1`;
        $info =~ /^\s*Stream.+Audio: mp3.+?(\d+) kb\/s$/m;

        return if $1 <= $threshold_bitrate;

        print "$file\n" if $verbose;
        my $cmd = "ffmpeg -i \"$file\" -hide_banner -loglevel warning -vn ".
                  "-write_id3v1 1 -id3v2_version 3 ".
                  "-b:a ${target_bitrate}k \"____$file\"";
        system($cmd) == 0 or die "$0: [$cmd] failed: $?\n";
        move("____$file", $file) or die "move failed: $!";
    }
}

find(\&process, $ARGV[0] || ".");

相关内容