Youtubeプレイリストを1つのbashスクリプトでmp3形式でダウンロードする

そのため、私の職場のラップトップにはRAMが2GBしか搭載されていません。 この点で、ブラウザを最適化する必要がありました。なぜなら、 多数のオープンメモリタブがあると、不十分になり、スワップパーティションが使用され、ブレーキがかかります。



音楽は私の仕事に役立ちます。通常は、YouTubeプレイリストのある開いているタブです。 したがって、作業プロセスのこのタブは最大500MB(!)を消費し、さらに多く(Google Chrome)を消費します。



この状況により、入力でプレイリストIDを受信するbashスクリプトと、MOCなどのお気に入りのプレーヤーでリッスンできるmp3ファイルを作成する必要がありました。

モック





Youtubeからmp3をダウンロードできないため、プロセスを3つのステップに分けます。

  1. ダウンロードflv
  2. サウンドトラックを抽出する
  3. 一時的なflvを削除




念のため、プレイリストIDが「リスト」取得パラメーターであることを思い出します。



依存関係:

sudo apt-get install youtube-dl ffmpeg libavcodec-extra-53
      
      









実際にスクリプト自体、詳細にコメント( ダウンロード ):

 #!/bin/bash usage='usage: ./get_youtube_playlist <playlist_id> <target_folder> <num_songs> target_folder: (default: songs will be downloaded in current folder) num_songs: number of songs to get (default: 50) examples: ./get_youtube_playlist RD02HIkZaLeuF9k ./get_youtube_playlist RD02HIkZaLeuF9k "instrumental hip-hop beats" 10 ' playlist_id=$1 target_folder=$2 num_songs=$3 if [ -z "$playlist_id" ]; then echo "$usage" exit 1 fi if ! [[ "$num_songs" =~ ^[0-9]+$ ]] ; then num_songs=50 fi if [ -z "$target_folder" ]; then target_folder='./' elif [ ! -d "$target_folder" ]; then echo "Parameter target_folder is incorrect, $usage" exit 1 fi #  Youtube API     # https://developers.google.com/youtube/2.0/developers_guide_protocol_playlist_search youtube_api="`wget -qO- https://gdata.youtube.com/feeds/api/playlists/$playlist_id\?max-results\=$num_songs`" if [ -z "$youtube_api" ]; then echo "Playlist ID is incorrect, $usage" exit 1 fi # c ID     songs songs=( $(echo $youtube_api | \ grep -P -o "<media:player url='.*?&" | \ grep -P -o "(\w|-){11}") ) if [ -z "$songs" ]; then echo "Nothing to do, $usage" exit 1 fi #       for (( i = 1 ; i <= ${#songs[@]} ; i++ )) do youtube_id=${songs[$i-1]} track_number=`printf "%0*d" 2 $i` flv_path="$target_folder/$youtube_id.flv" mp3_path="$target_folder/$track_number. $youtube_id.mp3" # 1.  flv youtube-dl --audio-format=mp3 -o "$flv_path" "http://youtu.be/$youtube_id" if [ -f "$flv_path" ] then # 2. flv -> mp3 avconv -i "$flv_path" -y "$mp3_path" -acodec libmp3lame -ac 2 -ab 128k -vn # 3.  flv rm "$flv_path" fi done
      
      







このスクリプトが私だけでなく、行商人から多くのギガバイトのRAMを節約できることを願っています。



All Articles