響楽屋裏保存補助バッチ Rev2.1 ( No.31 )
日時: 2018/06/20 08:47
名前: おひげ

需要無視シリーズの第1弾です。

以前作っていた響の楽屋裏を保存する補助バッチファイルを修正して機能を追加してみました。
(Windows10 Pro Ver.1803 build 17134.48 (April 2018 Update) 64bit で動作確認をしています)

【機能追加項目】

・入力URLのチェック [URL無効の場合はメッセージを表示して終了]
・ダウンロードURLのストリーミング情報の表示
・ffmpeg の大量のログの抑止
・響の映像付きラジオ(複数画質)のURLが入力された場合、高画質の物[映像データ(Stream #0:4)、音声データ(Stream #0:3)]を保存


OS標準のコマンドのみで作成したためものすごく余計な処理を繰り返しています...
Powershell依存にすると環境を選ぶので tee コマンドは使用していません。

それぞれのセクションで何をしているかは一応コメントとして記載しています。(XPの場合は timeout が使えないので pauseに置き換えてください)

※保存中まるで止まっているように見えますがログを抑制しているだけです、保存中にうざいほど流れるログが見たい場合は、
 本文の set log= の行を消すか、REMでコメントアウトしてください。



-------ここから下をコピペして 適当な名前で保存して拡張子を .bat に変更してください-------(この行は含めないこと)

@echo off
cls

:: ←この行はコメントです 【 ":" 1文字はジャンプ用のラベル "::" 2文字は注釈用のコメントになります】

::【ffmpegのログを調整 [どちらかに REM を入れて選択してください error : 抑止 info : 通常] 】

   set log=error
REM set log=info


::【実行時に表示する解説などを定義 】

title 響 -HiBiKi Radio Station- 楽屋裏ダウンロード補助

 echo.
 echo **** 響 -HiBiKi Radio Station- 楽屋裏ダウンロード補助 ****
 echo.
 echo 取得したURLをffmpeg のダウンロード書式に変更して実行するだけのバッチファイルです
 echo その為、ほかのラジオにも使える場合があります
 echo.
 echo 事前にWEBサイトにて楽屋裏ラジオのURLを取得しておく必要があります (.m3u8のplaylist形式のURLが必要です)
 echo 同一フォルダに ffmpeg.exe が無いと正常に動作しません
 echo.


:: 【ffmpeg.exe が同一フォルダにあるかどうかチェック】
:Check

 IF EXIST ffmpeg.exe (GOTO URL_IN)
 echo.
 echo ffmpeg.exe が同一フォルダに見つかりませんでした
 echo パスが切られている場所に ffmpeg.exeが 無い場合、ダウンロードは行われません
 echo.
 pause
 goto END

:: 【URL入力用VBS作成処理】
:URL_IN

 echo With CreateObject("Scripting.FileSystemObject").CreateTextFile("URL.txt") >>URL.VBS
 echo .WriteLine InputBox("ラジオ本体のplaylistのURL(.m3u8)を入力します","響 -HiBiKi Radio Station-","楽屋裏を再生して検出されたURLを入力してください") >>URL.VBS
 echo .Close >>URL.VBS
 echo End With >>URL.VBS

 ::【URL入力用VBSを実行してURLを環境変数にセットして作業ファイル削除】

  URL.VBS
  set /p URL= < URL.txt
  del url.vbs >nul
  del url.txt >nul

  ::【入力したURLをチェック? 何もいれないでOKを押したり、キャンセルをした場合再度URL入力に戻る】

   if "%URL%" NEQ "楽屋裏を再生して検出されたURLを入力してください" (goto FILE_IN)
   goto URL_IN


::【ラジオ名入力用VBS作成処理】
:FILE_IN

 echo With CreateObject("Scripting.FileSystemObject").CreateTextFile("NAME.txt") >>NAME.VBS
 echo .WriteLine InputBox("ラジオのファイル名を入力します","響 -HiBiKi Radio Station-","ラジオの名称を入れてください") >>NAME.VBS
 echo .Close >>NAME.VBS
 echo End With >>NAME.VBS

 ::【ラジオ名入力用VBSを実行して名前を環境変数にセットして作業ファイル削除】

  NAME.VBS
  set /p NAME= < NAME.txt
  del NAME.vbs >nul
  del NAME.txt >nul

  ::【入力した名称チェック[変更せずにOKを押した場合 Radioをファイル名にする]】

   if "%NAME%" NEQ "ラジオの名称を入れてください" (goto download)
   set NAME=Radio


::【ダウンロード時のタイトル表示】
:download

 echo.
 echo **** ダウンロード処理を行います ****
 echo.
 echo 出力ファイル : "%NAME%.mp4"
 echo ソースURL : "%URL%"
 echo.

 ::【XP環境の場合 timeout 2 を pause に変更してください】

  timeout 2 >nul


::【入力URLの確認】
:inputcheck

 ::【先頭2秒の保存を試しストリーミング情報を log.txtに保存】

  ffmpeg -i "%URL%" -vcodec copy -acodec copy -bsf:a aac_adtstoasc -t 2 "tmp.mp4" > log.txt 2>&1
  del tmp.mp4 >nul 2>&1

  ::【log.txt の内容で入力されたURLが有効なストリーミングデータかどうか判断】
  ::【Invalid data found が見つかったら(0)エラー表示して終了へ】

   findstr /C:"Invalid data found" log.txt >nul

   if %errorlevel% EQU 0 (

    echo.
    echo *** Invalid data found when processing input [入力URLに無効なデータが見つかりました] ***
    echo.
    echo URLの取得から時間が経過しすぎた場合や入力したURLに不備があるものと思われます
    echo.
    echo 取得したURLの有効時間は20秒もないと思います。うまくいかない場合は再度URLを取得し、再生しながら実行してください
    echo 保存が始まったら再生を停止 [ブラウザを閉じる・一時停止] しても問題ありません
    echo.

    goto end

   )


::【ダウンロード部】
:download_main

 ::【保存した log.txt から必要のない項目を削除して整理する】
 ::【1行目で囲った文字列の含まれる行を削除する】
 ::【2行目で囲った文字列が含まれる行を抽出する】

  findstr /V "ffmpeg built lib http help speed overhead avc1 mp4a" log.txt >log2.txt
  findstr "Duration Program Stream" log2.txt >log.txt
  del log2.txt


 ::【log.txt をチェックしログに [Stream #0:2 -> #0:0] が存在しているか確認して分岐】
 ::【含まれている場合(0) [リマップされているので複数ストリーミングあり]】
 ::【含まれていない場合(else) [シングルストリーミング]】

  echo.
  findstr /C:" Stream #0:2 -> #0:0 (copy)" log.txt >nul
 
  if %errorlevel% EQU 0 (

   echo.
   echo *** streaming information ***
   echo.
   findstr /v "mapping ->" log.txt
   echo.
   echo Duration: の後ろがラジオの長さです。 Program が複数ある場合は複数画質が混在するマルチストリーミングです。
   echo.
   echo *** 複数画質ストリーミングから高画質【Program 2 [映像:4 音声:3]】を保存中 *** [Loglevel : %log%]
   echo.

   del log.txt
   ffmpeg -i "%URL%" -loglevel %log% -map 0:4 -map 0:3 -vcodec copy -acodec copy -bsf:a aac_adtstoasc "%NAME%.mp4"

  ) else (

   echo.
   echo *** streaming information ***
   echo.
   findstr /v "mapping ->" log.txt
   echo.
   echo Duration: の後ろがラジオの長さです。 Program が複数ある場合は複数画質が混在するマルチストリーミングです。
   echo.
   echo *** 標準ストリーミング【Program 0】を保存中 *** [Loglevel : %log%]
   echo.

   del log.txt
   ffmpeg -i "%URL%" -loglevel %log% -vcodec copy -acodec copy -bsf:a aac_adtstoasc "%NAME%.mp4"

  )


 echo.
 echo *** ダウンロード処理は終了しました ***
 echo.
 echo 正常に完了している場合は、フォルダに %NAME%.mp4 が作成されています
 echo 再生して確認をお願いします
 echo.
 goto END


::【終了処理】
:END

 ::【XP環境の場合 timeout 15 を pause に変更してください】

  timeout 15

  exit

-------ここから上をコピペしてください-------(この行は含めないこと)




トップページ