俺の外付けHDD

外付けHDDではなくはてなのサーバーラックの中でした

汎用性の高い動画ダウンロードスクリプト"youtube-dl"の使い方

たくさんの対応サイトからゴニョゴニョしたりゴニョゴニョする方法をメモ。

注意事項

・全て自己責任でお願いします。
・法律や規約に触れることはしないようにしましょう。
・公式ドキュメント:https://github.com/rg3/youtube-dl/blob/master/README.mdにとっても丁寧に使い方が載ってるので必ず目を通しておきましょう。

必要なもの

Microsoft Visual C++ 2010 Redistributable Package (x86)が入ってなければhttps://www.microsoft.com/en-US/download/details.aspx?id=5555からDLしてインストール
https://github.com/rg3/youtube-dl/releases/から最新版の"youtube-dl.exe"をDL
https://ffmpeg.zeranoe.com/builds/ からffmpeg公式の最新版バイナリを入手(Version:お好きな方をどうぞ,Architecture:OSに合わせる,Linking:お好みで→Download FFmpeg)(これがないとMPEG-DASHを使用しているYouTubeなんかは720pまでしかDL出来ない。ffmpegを置いておくとそれを使ってmixしてくれる。)

基本的な使い方

youtube_dl(このフォルダは管理者権限の必要ないディレクトリに配置すること)
┣(デフォルトではここに動画ファイルが保存される)
┣ffmpeg.exe
┗youtube-dl.exe

テキストエディタ等で以下の内容を記述,拡張子.batで"youtube-dl.exe"と同じディレクトリに保存。
バッチファイルを"youtube-dl.bat"という名前にする場合,また"youtube-dl.exe"とは別のディレクトリに配置する場合はyoutube-dlではなく完全なパス("C:\hoge\youtube-dl.exe"みたいな)を入力しないと"youtube-dl.exe"ではなく自分"youtube-dl.bat"を呼び出してしまうので注意。

youtube-dl "動画サイトのURL"
pause

youtube-dl.batをダブルクリックで実行。上手くいかない場合はエラー内容が表示される。
③ログインしろみたいに言われた場合

youtube-dl" -u "ID(メールアドレスとか)" -p "パスワード" "動画サイトのURL"

使いやすくしたバッチ

参考までに。

@echo off
rem youtube-dl.exeがあるフォルダのパス
set YDFOLDERPATH=C:\DTV\bin
rem ffmpeg.exeがあるフォルダのパス
set FFFOLDERPATH=C:\DTV\ffmpeg
rem vlc.exeがあるフォルダのパス
set VLCFOLDERPATH=C:\Program Files\VideoLAN\VLC
rem 出力フォルダのパス
set OUTFOLDERPATH=C:\Users\Shibanyan\Desktop\youtube_dl

set /p ASKFFYD=m3u8かtwitcasting生放送か通常を選択[m=m3u8,t=twitcasting,Enter=youtube-dl]:
if "%ASKFFYD%" == "m" (
    call :m3u8
) else if "%ASKFFYD%" == "t" (
    call :twitcasting
) else if "%ASKFFYD%" == "" (
    call :youtubedl
)
pause
exit

:m3u8
call :mytimeset
set /p URL=m3u8のURLを入力:
"%FFFOLDERPATH%\ffmpeg.exe" -y -i "%URL%" -c copy -map p:0 "%OUTFOLDERPATH%\%mydate%_%mytime%.ts"
exit /b

:twitcasting
call :mytimeset
set /p TWIID=ツイキャスIDを入力:
"%FFFOLDERPATH%\ffmpeg.exe" -y -i "http://twitcasting.tv/%TWIID%/metastream.m3u8/?video=1" -c copy -map p:0 "%OUTFOLDERPATH%\%mydate%_%mytime%_%TWIID::=_%.mp4"
exit /b

:youtubedl
set /p URL=URLを入力:
set /p ASKLOGIN=ログインが必要なサイトの場合指定[n=ヌコヌコ動画,Enter=ログイン不要]:
if "%ASKLOGIN%" == "n" (
    set LOGINOPTION=-u "ID(メールアドレスとか)" -p "パスワード"
) else if "%ASKLOGIN%" == "" (
    set LOGINOPTION=
)

set /p ASKFORMAT=フォーマットを指定[a=bestaudio,v=bestvideo,hd=youtube720p,fhd=youtube1080p,22=フォーマット22(hd720),Enter=デフォルト(best)]:
if "%ASKFORMAT%" == "a" (
    set FORMATOPTION=-f bestaudio
) else if "%ASKFORMAT%" == "v" (
    set FORMATOPTION=-f bestvideo
) else if "%ASKFORMAT%" == "hd" (
    set "FORMATOPTION=-f bestvideo^[height^<^=^?720^]+bestaudio^/best"
) else if "%ASKFORMAT%" == "fhd" (
    set "FORMATOPTION=-f bestvideo^[height^<^=^?1080^]+bestaudio^/best"
) else if "%ASKFORMAT%" == "22" (
    set FORMATOPTION=-f 22
) else if "%ASKFORMAT%" == "" (
    set FORMATOPTION=
)

set /p ASKOPTOUT=出力先を指定[f=ffplay,p=ffplaypp,l=ffplayL,r=ffplayR,v=vlc,Enter=DL]:
if "%ASKOPTOUT%" == "f" (
    set "OPTOUTOPTION=- | "%FFFOLDERPATH%\ffplay.exe" -"
) else if "%ASKOPTOUT%" == "p" (
    set "OPTOUTOPTION=- | "%FFFOLDERPATH%\ffplay.exe" - -vf pp=ac"
) else if "%ASKOPTOUT%" == "l" (
    set "OPTOUTOPTION=- | "%FFFOLDERPATH%\ffplay.exe" - -af pan="stereo^|FL^<FL+FR""
) else if "%ASKOPTOUT%" == "r" (
    set "OPTOUTOPTION=- | "%FFFOLDERPATH%\ffplay.exe" - -af pan="stereo^|FR^<FL+FR""
) else if "%ASKOPTOUT%" == "v" (
    set "OPTOUTOPTION=- | "%VLCFOLDERPATH%\vlc.exe" -"
) else if "%ASKOPTOUT%" == "" (
    set OPTOUTOPTION="%OUTFOLDERPATH%\%%(title)s-%%(id)s.%%(ext)s"
)

rem encode
"%YDFOLDERPATH%\youtube-dl.exe" --ffmpeg-location "%FFFOLDERPATH%\ffmpeg.exe" %LOGINOPTION% %FORMATOPTION% --no-check-certificate "%URL%" -o %OPTOUTOPTION%
exit /b

:mytimeset
set mydate=%date:/=%
set mydate=%mydate:~0,6%
set mytime=%time:~0,2%%time:~3,2%%time:~6,2%
set mytime=%mytime: =0%
exit /b

上の4つのsetを自分の環境に合わせる。

m3u8かtwitcasting生放送か通常を選択[m=m3u8,t=twitcasting,Enter=youtube-dl]:以下3つに分岐する。
mを入力した場合:m3u8のURLを入力:m3u8のURLが分かればそれを入力する。ffmpeg.exeのみで処理。
tを入力した場合:ツイキャスIDを入力:放送ページのURLにある。http://twitcasting.tv/%TWIID%/metastream.m3u8/?video=1に補完される。キャスアカウントの場合c:を忘れずに。ffmpeg.exeのみで処理。
・Enterキーを押した場合:URLを入力:DLしたい動画のURLを指定。youtube-dl.exeとffmpeg.exeで処理。

ログインが必要なサイトの場合指定[n=ニコニコ動画,Enter=ログイン不要]:例にならって予め指定しておくこと。

フォーマットを指定[a=bestaudio,v=bestvideo,hd=youtube720p,fhd=youtube1080p,,22=フォーマット22(hd720),Enter=デフォルト(best)]:
a最高品質の音声のみ(MPEG-DASHの動画にのみ使える)
v最高品質の映像のみ(MPEG-DASHの動画にのみ使える)
hdYouTubeにおいて720p以上の最高品質の映像+最高品質の音声
fhdYouTubeにおいて1080p以上の最高品質の映像+最高品質の音声
22YouTubeにおいて720pのMPEG-DASHでない(映像と音声がくっついた)ファイルを指定
・Enter 通常はこちらを使う。YouTubeにおいては最高品質が得られない場合があるが,ffplay等でストリーミングしたり旧CPU低スペの場合はこちらを選択

出力先を指定[f=ffplay,p=ffplaypp,l=ffplayL,r=ffplayR,v=vlc,Enter=DL]:
fffmpeg.exeがあるフォルダのパスにあるffplayにパイプ出力しストリーミング
pffplayでストリーミング時にpp=acフィルタを使ってデノイズデブロッキング(負荷あり)
l rそれぞれffplayでストリーミング時に音声を片方からのみ出力する。同時に2つ並べて視聴する際に便利。
vvlc.exeがあるフォルダのパスにあるvlcにパイプ出力しストリーミング
・Enter 通常はこちらを使う。フォーマット指定でhdfhd等を選択している場合もこちらを選択。

:mytimeset
set mydate=%date:/=%
set mydate=%mydate:~0,6%
set mytime=%time:~0,2%%time:~3,2%%time:~6,2%
set mytime=%mytime: =0%

環境によって違うかもしれないので注意。

-oの既定値は%(title)s-%(id)s.%(ext)s。バッチ内なので通常の環境変数%1つで囲んだままにし,youtube-dlのオプションは%%%にしてエスケープする。お好みにに指定して下さい。

おまけ

音声の分離(出力ファイルの拡張子はファイルタイプによって変える。aacなら.m4a,opusなら.ogg)

ffmpeg -i input.mp4 -c:a copy -vn out.m4a
ffmpeg -i input.webm -c:a copy -vn out.ogg

映像の分離

ffmpeg -i input.mp4 -c:v copy -an out.mp4

-f bestaudioでDLした音声ファイルが.webmだった場合

ffmpeg -i input.webm -c copy out.ogg

vp9なwebmをh264なmp4にできるだけ無劣化で変換

ffmpeg -i input.webm -c:v h264_qsv -q:v 0 out.mp4

avi+wav無劣化変換

ffmpeg -i input.webm -c:v rawvideo -c:a pcm_s16le out.avi

おわりに

このツールをつくって下さったRicardo García氏に感謝します。

Copyright © 2016-2017 俺の外付けHDD All Rights Reserved.