Ruby

youtube-dlを操作するrubyプログラム

Qiitaとrubyとyoutube初心者です!!

凄い!何が凄いってQiitaのコード部分に
https://www.ユーチューブ.com/watch?v=***********
(カタカナ部分をアルファベットで)
って書くと投稿が弾かれる!みんな試してみてくれ!!最初見出しに●arezって入れてたから弾かれてたのかと思ってyoutube初心者に変えたりして試してた(笑)他のサニタイズ用のURLもあると思うけど、どこかに書いてないだろうか。書いてないだろうな。

環境
os X(10.12.6)
ruby 2.4.1

youtube-dlのインストールはこれの通り

sudo curl -L https://yt-dl.org/downloads/latest/youtube-dl -o /usr/local/bin/youtube-dl
sudo chmod a+rx /usr/local/bin/youtube-dl

mp4からmp3へのエンコードはffmpegでやってる。
ffmpegのインストールはこれの通り

brew install ffmpeg

brew入ってないって人はこれ見てやってください

コード自体はクラスにするほどじゃないはずだけど、オブジェクト志向をやってみたかった書いてみた
もっと綺麗に書けるはずだから機能追加+リファクタリングするかも

download_urls.txtにURL入れて、mediadl.rb動かせば音声だけのが作られる
Mediadl#encode_mp4_to_mp3とMediadl#remove_mp4をコメントアウトすれば普通にmp4形式で下載される

download_urls.txtの中身をサーバ上に置いてブラウザのエクステンションでブックマーク感覚でURLを追加して、定期でmediadl.rbを実行したら、もっと良い感じになるっぽい。そのうちやるかも

download_urls.txt
https://www.ユーチューブ.com/watch?v=***********
https://www.ユーチューブ.com/watch?v=***********
mediadl.rb
#mediadl.rb

require 'open3'


class Mediadl
  def initialize(file_name="./download_urls.txt")
    @file = file_name
  end

  def line_counter
    File.open(@file) do |f|
      while f.gets
        @total_lines = f.lineno
      end
    end
    return @total_lines
  end

  def dl
    counter = 0
    total_lines = self.line_counter
    File.open(@file,'r').each do |url|
      counter += 1
      puts "start file:#{counter}/#{total_lines}"
      Open3.capture3('youtube-dl -f mp4 ' + "#{url}")
      puts  "finish file:#{counter}/#{total_lines}"
    end
    Process.waitall
  end

  def encode_mp4_to_mp3
    puts "start encoding"
    Open3.capture3('for f in *.mp4; do ffmpeg -y -i "$f" "`echo $f | sed -e "s/.mp4/.mp3/"`"; done ')
    puts "finish encoding"#
  end

  def remove_mp4
    puts "start remove mp4"
    Open3.capture3('rm *.mp4') 
    puts "finish remove mp4"
  end
end

download = Mediadl.new
download.dl
download.encode_mp4_to_mp3
download.remove_mp4