たくさんの対応サイトからゴニョゴニョしたりゴニョゴニョする方法をメモ。
注意事項
・全て自己責任でお願いします。
・法律や規約に触れることはしないようにしましょう。
・公式ドキュメント: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してくれる。)
nyanshiba.hatenablog.com
基本的な使い方
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 ====================環境変数設定==================== | |
rem youtube-dl.exeのパス | |
set "ytdl_path=C:\DTV\bin\youtube-dl.exe" | |
rem ffmpeg.exeがあるディレクトリのパス | |
set "ff_dir=C:\DTV\ffmpeg" | |
rem vlc.exeのパス | |
set vlc_path= | |
rem 出力フォルダのパス | |
set "out_dir=C:\Users\sbn\Desktop\youtube_dl" | |
rem ====================ユーザ選択==================== | |
set /p ask_exe=ffmpegかyoutube-dlか選択[m=ffmpeg(m3u8),t=ffmpeg(TwitCasting),Enter=youtube-dl]: | |
if "%ask_exe%" == "m" ( | |
call :ffmpeg_m3u8 | |
) else if "%ask_exe%" == "t" ( | |
call :ffmpeg_twitcas | |
) else if "%ask_exe%" == "" ( | |
call :youtubedl | |
) | |
pause | |
exit | |
rem ====================ffmpegサブルーチン==================== | |
rem ----------m3u8ストリーム録画---------- | |
:ffmpeg_m3u8 | |
call :mydateset | |
set /p url=m3u8のurlを入力: | |
"%ff_dir%\ffmpeg.exe" -y -i "%url%" -c copy -map p:0 "%out_dir%\%mydate%.ts" | |
exit /b | |
rem ----------ツイキャス録画---------- | |
:ffmpeg_twitcas | |
call :mydateset | |
set /p twitcas_id=ツイキャスIDを入力: | |
"%ff_dir%\ffmpeg.exe" -y -i "http://twitcasting.tv/%twitcas_id%/metastream.m3u8/?video=1" -c copy -map p:0 "%out_dir%\%mydate%_%twitcas_id::=_%.mp4" | |
exit /b | |
rem ----------ファイル名関数---------- | |
:mydateset | |
rem yyMMdd_Hmm | |
rem 自分用(17/08/30 (水) 17:35->170830_1735) | |
set mydate=%date:~0,2%%date:~3,2%%date:~6,2%_%time:~0,2%%time:~3,2% | |
rem 初期設定(2017/08/30 17:35 -> 170830_1735) | |
rem set mydate=%date:~2,2%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2% | |
rem スペースを0に置き換える | |
set mydate=%mydate: =0% | |
exit /b | |
rem ====================youtube-dl+ffmpegサブルーチン==================== | |
:youtubedl | |
rem ----------ログイン選択---------- | |
set /p url=urlを入力: | |
set /p ask_login=ログイン選択[n=ニコニコ動画,n2=ニコニコ動画,t=twitter,Enter=ログイン不要]: | |
if "%ask_login%" == "n" ( | |
set "arg_u=-u hoge -p hoge" | |
) else if "%ask_login%" == "n2" ( | |
set "arg_u=-u hoge -p hoge" | |
) else if "%ask_login%" == "t" ( | |
set "arg_u=-u hoge -p hoge" | |
) else if "%ask_login%" == "" ( | |
set arg_u= | |
) | |
rem ----------入力フォーマット---------- | |
set /p ask_infmt=入力フォーマット[o=bestaudio,a=m4a/bestaudio,v=bestvideo,h=mp4/bestvideo,22=format22(hd720p yt),al=ytlive音声コンテンツ(Enter+最後にffmpegで動画からaacを作成),Enter=best]: | |
if "%ask_infmt%" == "o" ( | |
set arg_f=-f bestaudio | |
) else if "%ask_infmt%" == "a" ( | |
set arg_f=-f m4a/bestaudio | |
) else if "%ask_infmt%" == "w" ( | |
rem set "arg_f=-f bestvideo^[height^<^=^?4320^]" | |
set "arg_f=-f bestvideo" | |
) else if "%ask_infmt%" == "22" ( | |
set arg_f=-f 22 | |
) else if "%ask_infmt%" == "al" ( | |
set ask_split=1 | |
) else if "%ask_infmt%" == "" ( | |
set arg_f= | |
) | |
rem ----------出力フォーマット---------- | |
set /p ask_outfmt=出力フォーマット[f=ffplay,v=vlc,Enter=DL]: | |
if "%ask_outfmt%" == "f" ( | |
set "arg_o=- | "%ff_dir%\ffplay.exe" -" | |
) else if "%ask_outfmt%" == "v" ( | |
set "arg_o=- | "%vlc_path%" -" | |
) else if "%ask_outfmt%" == "" ( | |
set arg_o="%out_dir%\%%(title)s-%%(id)s.%%(ext)s" | |
) | |
rem ----------エンコ---------- | |
rem "--no-part"でtempを作成しない(YouTubeLive、その他リアルタイムストリームに対応) | |
rem YouTubeLiveは放送が終われば強制終了しておk | |
"%ytdl_path%" --ffmpeg-location "%ff_dir%\ffmpeg.exe" %arg_u% %arg_f% --no-check-certificate --no-part "%url%" -o %arg_o% | |
rem 音声スプリット | |
if "%ask_sprit%" equ "1" ( | |
rem "%ff_dir%\ffmpeg.exe" -i %1 -vn -c:a copy "out.m4a" | |
) | |
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の動画にのみ使える)
・hd
YouTubeにおいて720p以上の最高品質の映像+最高品質の音声
・fhd
YouTubeにおいて1080p以上の最高品質の映像+最高品質の音声
・22
YouTubeにおいて720pのMPEG-DASHでない(映像と音声がくっついた)ファイルを指定
・Enter 通常はこちらを使う。YouTubeにおいては最高品質が得られない場合があるが,ffplay等でストリーミングしたり旧CPU低スペの場合はこちらを選択
出力先を指定[f=ffplay,p=ffplaypp,l=ffplayL,r=ffplayR,v=vlc,Enter=DL]:
・f
ffmpeg.exeがあるフォルダのパスにあるffplayにパイプ出力しストリーミング
・p
ffplayでストリーミング時にpp=ac
フィルタを使ってデノイズデブロッキング(負荷あり)
・l
r
それぞれffplayでストリーミング時に音声を片方からのみ出力する。同時に2つ並べて視聴する際に便利。
・v
vlc.exeがあるフォルダのパスにあるvlcにパイプ出力しストリーミング
・Enter 通常はこちらを使う。フォーマット指定でhd
やfhd
等を選択している場合もこちらを選択。
: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なら.opus)
ffmpeg -i input.mp4 -c:a copy -vn out.m4a
ffmpeg -i input.webm -c:a copy -vn out.opus
映像の分離
ffmpeg -i input.mp4 -c:v copy -an out.mp4
-f bestaudio
でDLした音声ファイルが.webm
だった場合
ffmpeg -i input.webm -c copy out.opus
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氏に感謝します。