Stream #0:0[0x100]: Video: mpeg2video (Main) ([2][0][0][0] / 0x0002), …(省略) Stream #0:1[0x110]: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 192 kb/s
これを使えば、音声と動画のPIDをそれぞれ出力することができます。後はts2aacでPID指定をして分離すれば音声の分離が可能になるはずです。あとは、"ts2aac.exe" -i "入力ファイル" -o "出力ファイル名" -v "動画のPID" -a "音声のPID" -B
として出力すればtsファイルから音声をすべて出力できます。(DGIndex用の指定を行わない場合、-Bオプションは消してください。) しかし、これを大量にするのは面倒なので、バッチファイルを作成しました。このバッチを使うと、分離された音声ファイルと音声のPID、動画のPIDが格納されたテキストが出力されます。使用方法:ffprobeとts2aacのexeファイルを同じフォルダに入れる。
下記のプログラムファイル:aac_demux.bat
@echo off
::フォルダ移動
cd /d %~dp0
::ループ処理
:loop
if %1=="" goto end
::ffprobeによるpid出力
"ffprobe.exe" "%~1" > "output1.txt" 2>&1
::Audio一覧を取得
findstr "Audio:" "output1.txt" >> "temp_a2.txt"
::Video情報の取得
findstr "Video:" "output1.txt" >> "temp_v2.txt"
::初期情報を削除
del "output1.txt"
::エラー回避
type nul > "%~n1_audio_pid.txt"
type nul > "%~n1_video_pid.txt"
::pid部分だけ切り出し audio
for /f "usebackq tokens=2" %%i in ("temp_a2.txt") do echo %%i >> "temp_a3.txt"
del "temp_a2.txt"
for /f "usebackq tokens=2 delims=[" %%i in ("temp_a3.txt") do echo %%i >> "temp_a4.txt"
del "temp_a3.txt"
for /f "usebackq tokens=1 delims=]" %%i in ("temp_a4.txt") do echo %%i >> "%~n1_audio_pid.txt"
del "temp_a4.txt"
::pid部分だけ切り出し video
for /f "usebackq tokens=2" %%i in ("temp_v2.txt") do echo %%i >> "temp_v3.txt"
del "temp_v2.txt"
for /f "usebackq tokens=2 delims=[" %%i in ("temp_v3.txt") do echo %%i >> "temp_v4.txt"
del "temp_v3.txt"
for /f "usebackq tokens=1 delims=]" %%i in ("temp_v4.txt") do echo %%i >> "%~n1_video_pid.txt"
del "temp_v4.txt"
set /P VIDEO_PID=<"%~n1_video_pid.txt"
::ts2aacの起動
for /f "usebackq tokens=1 delims=" %%i in ("%~n1_audio_pid.txt") do (start "" /wait /min "ts2aac.exe" -i "%~1" -o "%~n1" -v "%VIDEO_PID%" -a %%i -B)
shift
goto loop
:end
exit
この記事へのコメント
感謝感謝です。