Ich wäre nicht in der Lage, mir den Kram lange zu merken (und bewundere Leute, die das können).
Aber ein kleines Skript, per Editor (in der Hoffnung, dass es hilft, nur für Windows):
Code:
@echo off
setlocal EnableDelayedExpansion
::********************************************************************************
::* Configure according to your needs, *
::* don't use whitespaces where no whitespace is meant, *
::* first option from [] is default, defaults can be left out. *
::********************************************************************************
::--------------------------------------------------------------------------------
:: Quick Settings:
:: Specify input and output format by extension, without dot:
set iFormat=wav
set oFormat=wav
:: Specify output encoding (e.g. RIFF WAVE allows different encodings,
:: for formats without different encoding, leave blank):
:: e.g. floating-point, signed-integer, ms-adpcm, ima-adpcm
set oEncodingType=ima-adpcm
:: [auto|off] - auto: let SoX decide if dithering is appropriate
set dither=off
:: [off|on] - useful against clipping, e.g. caused by dithering
set clippingguard=off
:: apply linear volume factor on input file, e.g. against clipping, e.g. 0.999
set iVolumefactor=
::--------------------------------------------------------------------------------
:: Specify input format:
:: Normally you don't want this, because correct information will be
:: obtained from the header and yours could be false (leave blank).
:: For raw (headerless) input (e.g. writing a header) or tweaking:
:: e.g. 1, 2
set iChannels=
:: e.g. 4, 8, 16, 24
set iBitsPerSample=
:: e.g. 44100 or 44.1k
set iSamplesPerSecond=
:: Specify input encoding (e.g. RIFF WAVE allows different encodings,
:: for formats without different encoding, leave blank):
:: e.g. floating-point, signed-integer, ms-adpcm, ima-adpcm
set iEncodingType=
::--------------------------------------------------------------------------------
:: Specify output format:
:: Only use what deviates from the input specification or is otherwise required.
:: e.g. 1, 2
set oChannels=
:: e.g. 4, 8, 16, 24
set oBitsPerSample=
:: e.g. 44100 or 44.1k
set oSamplesPerSecond=
:: Specify output encoding (e.g. RIFF WAVE allows different encodings,
:: for formats without different encoding, leave blank):
:: e.g. floating-point, signed-integer, ms-adpcm, ima-adpcm
:: set oEncodingType=ima-adpcm - already set by "Quick Settings"
::
:: For some lossy formats, quality can be set, see the SOX manuals,
:: here in short (incomplete) form:
:: OGG: quality set by a floating point number
:: with a range from -1 (worst/minsize) to 10 (best/maxsize)
:: MP3: fractional part of float specifies conversion quality,
:: range: 01 (best/slowest ... 99 (worst/fastest)
:: MP3/CBR: integer part specifies Bitrate in kbps,
:: e.g. 128.01 for 128 kbps with best conversion quality
:: MP3/VBR: integer part specifies quality (file size),
:: range: 0 (best/maxsize) ... 9 (worst/minsize),
:: '-' must be prefixed to distinguish from CBR,
:: e.g. -0.01 for best possible quality
set oCompressionQuality=
::--------------------------------------------------------------------------------
:: Specify post processing resample rate (quality loss):
:: e.g. 44100 or 44.1k
set oResampleSamplesPerSecond=
:: Specify quality level for resampling, otherwise leave blank
:: -q (quick)
:: -l (low)
:: -m (medium)
:: -h (high, 16-bit)
:: -v (very high, 24-bit)
set oResampleQuality=
::--------------------------------------------------------------------------------
:: Additional parameters, SOX_OPTS, in, out, post
set sParm=
set iParm=
set oParm=
set pParm=
::--------------------------------------------------------------------------------
:: Other settings
::: progressindicator=[off|on] - what the name says
set progressindicator=on
:: Messages to stderr, normally shown on console:
:: 0 nothing
:: 1 errors, if cannot complete
:: default: 2 same as 1, plus warnings, e.g. clipping
:: 3 same as 2, plus processing descriptions
:: >=4 same as 3, plus debugging infos
set verbositylevel=3
:: Input and output buffer, default is 8192,
:: if SoX does not respond use lower or default value:
set buffersize=262144
:: Output root dir, relative to batch file dir
set "destrootrel=converted"
:: Full path to SoX dir,
:: if working dir differs from batch dir: absolute path needed
:: if working dir is batch dir: relative path should also work
:: otherwise use SoX dir with write permissions
set "sox_path=%ProgramFiles(x86)%\sox-14-4-2"
:: GUI, separators
set "undline=================================="
set "sepline=_______________________________________________________________________________________________________"
set "endline========================================================================================================"
:::###############################################################################
::: Don't touch this unless you know what you're doing:
set PATH=%sox_path%;%PATH%
set idx=*.%iFormat%
set ox=.%oFormat%
if "%clippingguard%"=="on" set "clipguard=-G "
if "%progressindicator%"=="on" set "progress=-S "
if not "%verbositylevel%"=="" set "verbosity=-V%verbositylevel% "
if not "%buffersize%"=="" set "bufsize=--buffer %buffersize% "
if "%dither%"=="off" set "dthr=-D "
set "SOX_OPTS=%clipguard%%dthr%%progress%%verbosity%%bufsize%%sParm%"
set dst_root_abs=%~dp0%destrootrel%
set src_root_abs=%~1
if not exist "%dst_root_abs%" mkdir "%dst_root_abs%"
if not "%iChannels%"=="" set "ic= -c %iChannels%"
if not "%iBitsPerSample%"=="" set "ib= -b %iBitsPerSample%"
if not "%iSamplesPerSecond%"=="" set "ir= -r %iSamplesPerSecond%"
if not "%iEncodingType%"=="" set "ie= -e %iEncodingType%"
if not "%iVolumefactor%"=="" set "iv= -v %iVolumefactor%"
if not "%oChannels%"=="" set "oc= -c %oChannels%"
if not "%oBitsPerSample%"=="" set "ob= -b %oBitsPerSample%"
if not "%oSamplesPerSecond%"=="" set "or= -r %oSamplesPerSecond%"
if not "%oEncodingType%"=="" set "oe= -e %oEncodingType%"
if not "%oCompressionQuality%"=="" set "oq= -C %oCompressionQuality%"
if not "%oResampleQuality%"=="" set "ors= %oResampleQuality%"
if not "%oResampleSamplesPerSecond%"=="" set "ors=%ors% %oResampleSamplesPerSecond%"
if not "%ors%"=="" set "ors= rate%ors%"
if not "iParm"=="" set "iParm= %iParm%"
if not "oParm"=="" set "oParm= %oParm%"
if not "pParm"=="" set "pParm= %pParm%"
set prms_src=%ic%%ie%%ib%%ir%%iv%%iParm%
set prms_dst=%oc%%oe%%ob%%or%%oq%%oParm%
set prms_pst=%ors%%pParm%
echo Starting SoX with these settings:
echo %undline%
echo Input dir : %src_root_abs%
echo Output dir : %dst_root_abs%
echo Input file ext : %iFormat%
echo Output file ext : %oFormat%
echo Input enc parms :%prms_src%
echo Output enc parms :%prms_dst%
echo Postproc parms :%prms_pst%
echo SOX_OPTS : %SOX_OPTS%
set sum=0
set suc=0
set fld=0
for /f "tokens=*" %%A in ('dir /B /ON "%src_root_abs%\%idx%"') do (
set /a sum+=1
echo.
echo %sepline%
echo Processing file #!sum!...
sox%prms_src% "%src_root_abs%\%%A"%prms_dst% "%dst_root_abs%\%%~nA%ox%"%prms_pst%
if not errorlevel 1 (set /a suc+=1) else (set /a fld+=1)
)
echo.
echo %endline%
echo Number of files...
echo ...matching : %sum%
echo ...succeeded : %suc%
echo ...failed : %fld%
if not %suc%==%sum% (echo Warning, errors occured^^!) else (echo All done.)
endlocal
pause
Diesen Text einfach in eine Datei abspeichern und z.B. als
convert.bat benennen, den Ordner der die zu konvertierenden Dateien enthält, darauf ziehen, loslassen und Spaß haben. Das Skript ist leicht an die eigenen Bedürfnisse anpassbar. Es kann erforderlich sein, den Pfad zu SoX anzupassen. Die Ausgabe erfolgt unter einem Verzeichnis mit dem Namen
converted, welches sich im selben Verzeichnis wie das Skript zu befinden hat und bei Bedarf automatisch angelegt wird. Rekursion ist nicht vorgesehen. Zieldateien werden bei Bedarf ohne Rückfrage überschrieben. Das Skript sieht auch das Hinzufügen von weiteren Parametern vor, sodass sich fehlende leicht ergänzen lassen sollten.
Es wird natürlich
SoX (Sound eXchange) benötigt.
Hier gibt es SoX auf SourceForge zum Download. Für MP3 bräuchte man noch weitere Plugins, siehe die bedarfsweisen Meldungen von SoX. Dem Sourcecode von SoX liegt ein Readme mit genaueren Hinweisen bei. Wegen der damaligen Patentlage durften die Plugins für MP3 nicht beigelegt werden. Zwar sollen die Patente inzwischen ausgelaufen sein, aber ich weiß nicht, inwiefern Dritte Rechte am Code von LAME oder MAD haben, weswegen ich die Plugins erst mal nicht hier hochladen werde.
Die Benutzung erfolgt ausschließlich auf eigene Gefahr des Benutzers. Es wird weder für direkte noch für indirekte Schäden (z.B. gelöschte Dateien), die im Zusammenhang mit der Nutzung des Skriptes stehen, Haftung übernommen. Es wird keinerlei Gewähr für Mängelfreiheit übernommen. Es gibt keinen Anspruch auf Support. Das Skript habe ich nur grob durchprobiert und zwar nur auf Windows 10. Wer Fehler findet, darf sich ermutigt fühlen, sie zu melden.