我有 10 个 wav 文件。我想将它们全部转换为 mp3 文件。我设法对一个文件执行此操作(如中所述如何使用 VLC 转换媒体?),但我不想对每个文件都这样做。有没有办法一次性转换所有 10 个文件?我使用的是 Windows 7。
答案1
我按照 nixda 的建议使用了批处理脚本。我弄清楚了如何为 Windows 7 编写批处理程序。这是我的解决方案:
@echo off
for /f "delims=|" %%f in ('dir /b C:\Any_Directory\*.wav') do (
echo converting %%f
CALL "C:\Program Files\VideoLAN\VLC\vlc.exe" --intf dummy --dummy-quiet "%%f" --sout="#transcode{acodec=mp3,ab=256,vcodec=dummy}:standard{access=file,mux=raw,dst=MP3_Files/"%%f"}" vlc://quit
move "%%f" WAV_converted/"%%f"
)
cd MP3_Files
ren *.wav *.mp3
cd ..
echo .
echo .
echo .
echo conversion finished
pause
该计划如何运作:
- 指定文件夹“C:\Any_Directory\”中所有扩展名为 .wav 的文件都将转换为 mp3(文件名不得包含任何空格)
- mp3 文件保存在文件夹“MP3_Files”中(该文件夹必须已经存在)
- wav 文件被推送到文件夹“WAV_converted”(该文件夹必须已经存在)
- “ab=256”设置比特率。要转换为比特率 128,请将其替换为“ab=128”。
- 批处理文件必须从与要转换的文件相同的文件夹运行(如 Kevin Heidt 所述)
提示 - 如果您想在转换时看到 VLC GUI,请从脚本中删除“--intf dummy --dummy-quiet”。这对调试很有用。
更新
仍有一个错误:如果 wav 文件的名称包含点或逗号,则名称会被截断(并且不会附加扩展名!)。尽管如此,文件仍会转换。
使用版本 1.1.11 进行测试。较新的版本可能不起作用!
添加引号:--sout="..."。也适用于较新的版本。在 Windows 上使用 2.1.3 64 位版本进行了测试(请参阅VLC 维基页面了解 Linux 和 Windows 命令行的差异以及其他示例和选项)。
答案2
我曾使用 VLC 转换一组视频文件的音频,但同样的方法也适用于任何转码任务。您应该创建一个简单的 .bat 文件:
for %%a in (*.avi) do "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" -I dummy -vvv "%%a" --sout=#transcode{acodec=mp3,ab=128,channels=2,samplerate=22050}:standard{access=file,mux=ts,dst="%%a_conv.avi"} --sout-keep vlc://quit
- 此批处理文件将扫描同一文件夹中的所有 *.avi 文件,并使用给定的参数对其进行转码 输出=#转码{参数}
- 要了解应使用哪些参数,您需要选择菜单->媒体->流...,然后在 GUI 向导中选择所有参数。在向导的最后一步,您将看到应在批处理文件中使用的生成的参数字符串。
- 输出文件将具有_conv.avi后缀,如果需要其他扩展名,请更改它
答案3
添加在 SO 上发现的类似方法:
我所做的改变 允许目录名称和歌曲名称中有空格因为它经常(总是)如此。
@echo off
chcp 65001
SETLOCAL ENABLEDELAYEDEXPANSION
for /f "delims=" %%f IN ('dir /b /s "YOUR_DISK:\Path\To\Your Music\That May contain Spaces\*.wav"') do (
set file1=%%~nf.mp3
echo "file :" !file1!
set fic1=%%f
echo "file : " !fic1!
CALL "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" "!fic1!" --sout="#transcode{vcodec=none,acodec=mp3,ab=320,channels=2,samplerate=48000}:std{access=file{no-overwrite},mux=mp3,dst="""!file1!"""}" vlc://quit
)
echo .
echo conversion finished
pause