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ファイルを同じフォルダに入れる。
@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
この記事へのコメント
感謝感謝です。