音声のサンプリングレート変換の
要望をいただいた。
x264guiEx 2.27では、音声エンコ前後バッチ処理を導入した。これはまさにこのようなときに使用できる。
とても簡単ではあるのだが、念のため例を示しておく。
手順
1. 下記をダウンロードする。
MediaInfoCLISox2. 後述するバッチファイルを用意し、音声エンコ
前バッチ処理に指定する。
3. 音声エンコの「パイプを使用する」のチェックを外す。
以上により、自動的にSoxを使用したサンプリングレート変換が行われる。
変換先のサンプリングレートは、近い値に適当に決めているが、そのあたりは適当に好みの方法に書き換えたほうがよいと思う。
バッチファイル
MediaInfoCLIとSoxのパスを指定してから使用してください。
@echo off
rem MediaInfo CLI https://mediaarea.net/ja/MediaInfo/Download/Windows
rem Sox http://sourceforge.net/projects/sox/files/sox/
rem ---------- 下記は適切に設定する ---------------------------
set SOX_PATH=C:\ProgramEx\sox\sox.exe
set MEDIAINFO_PATH=C:\ProgramEx\MediaInfo_CLI\MediaInfo.exe
rem ---------------------------------------------------------------
rem wav一時ファイルの場所 (バッチ処理時にx264guiExにより適切に変換される)
set WAV_PATH=%{tmpdir}\%{tmpname}.tmp.wav
set WAV_PATH_CONVERTED=%{tmpdir}\%{tmpname}.tmp_sox.wav
set WAV_SAMPLERATE_TXT=%{tmpdir}\%{tmpname}.tmp.wav.txt
rem wavのサンプリングレートを取得する
"%MEDIAINFO_PATH%" --Inform=Audio;%%SamplingRate%% --LogFile="%WAV_SAMPLERATE_TXT%" "%WAV_PATH%" >nul
for /f "delims=" %%F in (%WAV_SAMPLERATE_TXT%) do set SAMPLING_RATE=%%~F
rem ゴミ掃除
del /q "%WAV_SAMPLERATE_TXT%"
if "%SAMPLING_RATE%" == "" (
echo error!
goto FINISH
)
rem よくあるサンプリングレートなら処理を行わない
for %%f in ( 8000 11025 16000 22050 32000 44100 48000 88200 96000 ) do (
if %%f EQU %SAMPLING_RATE% goto FINISH
)
rem 変換先のサンプリングレートを適当に決定する
set CONVERT_RATE=8000
for %%f in ( 8000 11025 16000 22050 32000 44100 48000 88200 96000 ) do (
if %SAMPLING_RATE% GTR %%f set CONVERT_RATE=%%f
)
rem Soxで変換
"%SOX_PATH%" "%WAV_PATH%" "%WAV_PATH_CONVERTED%" rate -v %CONVERT_RATE%
rem 必ず変換後のwavファイルをもとの位置に戻す
del /q "%WAV_PATH%"
move "%WAV_PATH_CONVERTED%" "%WAV_PATH%"
:FINISH
echo sampling rate conversion finished.