どんなサウンドでもOgg Vorbisに変換する汎用スクリプト

注意
圧縮SWFの動作について
ファイルを何も指定しない時
変な書き方について(^^;
動作に必要なもの。
本体
GNOME上から右クリックで呼び出す方法

 swf,flv,mp3,mp4その他もろもろ、サウンドが抜き出せそうなら抜き出してOgg Vorbis形式で保存するお手軽スクリプトです。Rubyで書いてあります。

 GNOMEの nautilus ファイルマネージャから右クリックで呼び出す手順もオマケについてます ^^; いや単に個人的メモですけど ^^;

注意

圧縮SWFの動作について

 ニコニコ動画のコンテンツなどをツールで落とすと圧縮swfになっている事があります。これを解凍するのにcws2fwsをバイパスしていますが、 これは意図的に破壊的動作(元の圧縮形式を残さない)にしてあります 。困る方はその部分を書き換えるか、該当ルート自体を無効にしてください。

ファイルを何も指定しない時

 ディレクトリの中を探索して変換していきます。しかし 既に同じprefixでoggファイルがある場合はその内容を問わず無視 して次にいきます。

変な書き方について(^^;

 「なんでStringに追加してんだよ、変じゃね?この書き方」そうですか?いやその、単に遊んでみたかっただけなので ^^ それに self.mp42wav.wav2ogg... とかじゃんじゃんつないで書けて面白いですよ ^^

動作に必要なもの。

 cws2fws以外はDebianならapt-getでインストールできます。

本体

パスの通ったところに、audio2ogg という名前で保存します。

#!/usr/bin/ruby

require "ftools"

class String
  def seedname
    self.gsub /\.[a-z0-9]+$/,''
  end
  def any2ogg
    system("ffmpeg -i \"#{self}\" \"#{self.seedname}.ogg\"")
    "#{self.seedname}.ogg"
  end
  def mp42wav
    system("ffmpeg -i \"#{self}\" \"#{self.seedname}.wav\"")
    "#{self.seedname}.wav"
  end
  def any2wav
    system("ffmpeg -i \"#{self}\" \"#{self.seedname}.wav\"")
    "#{self.seedname}.wav"
  end
  def mp32ogg
    system("mp32ogg \"#{self}\"")
    "#{self.seedname}.ogg"
  end
  def wav2ogg
    system("oggenc \"#{self.seedname}.wav\"")
    "#{self.seedname}.ogg"
  end
  def flv2ogg
    self.any2wav.wav2ogg
    File.unlink("#{self.seedname}.wav")
    "#{self.seedname}.ogg"
  end
  def swf2ogg
    if self.checkCompress =~ /compress/
      print "WERNING: #{self} is compress, OK! auto-convert to NO compress NOW!\n"
      self.cws2fws.flv2ogg
    else
      self.flv2ogg
      "#{self.seedname}.ogg"
    end
  end
  def checkCompress
    `file \"#{self}\"`
  end
  def cws2fws
    ff = "a-" + self
    system("cws2fws \"#{self}\" \"#{ff}\"")
    File.move(ff,self)
    "#{self}"
  end
end

def filecnv(f)
  if !File.exist?(f.seedname+".ogg")
    if f =~ /\.mp3$/i
      print f.mp32ogg+"\n"
    elsif f =~ /\.m4a$/i
      print f.any2ogg+"\n"
    elsif f =~ /\.flv$/i
      print f.flv2ogg+"\n"
    elsif f =~ /\.swf$/i
      print f.swf2ogg+"\n"
    elsif f =~ /\.mp4$/i
      print f.mp42wav.wav2ogg+"\n"
      File.unlink(f.seedname+".wav")
    elsif f =~ /\.wav$/i
      print f.wav2ogg+"\n"
    end
  end
end

if ARGV.length > 0
  ARGV.each{|f|
    filecnv(f)
  }
else
  Dir.open(".").each{|f|
    filecnv(f)
  }
end

GNOME上から右クリックで呼び出す方法

  GNOME上の右クリック→スクリプト→audio2ogg で呼び出せます。

$HOME/.gnome2/nautilus-scripts/audio2ogg

#!/bin/sh
xterm -e audio2ogg "$1"