BETA

rubyからffmpegを利用してm4a->mp3への変換を行うサンプル

投稿日:2020-02-15
最終更新:2020-02-15

概要

PC上に保存されたm4aファイルをmp3ファイルに変換して携帯端末に持ち出したいと思い、変換ソフト利用せずffmpegを利用して変換できるようにした。

スクリプト本体

require 'fileutils'  
require 'pathname'  
require 'shellwords'  

# @example  
#   ruby this_script ~/Music/iTunes/iTunes\ Media/Music/ .  
# @see quority setting https://svn.code.sf.net/p/lame/svn/trunk/lame/USAGE  

QUALITY = 1.0 # VBR quality setting 0(highest), .., 9.999(lowest)  
OVERWRITE = false # 変換済みのファイルが存在する場合、変換を行わない  
src_dir = ARGV[0]  
dst_dir = File.absolute_path(ARGV[1])  

FileUtils.cd(src_dir) do  
  Pathname.glob('**/*.m4a') do |path|  
    base = path.basename  
    dir  = path.dirname  
    out_dir = Pathname.new(dst_dir).join(dir)  
    name = base.sub_ext('.mp3')  

    # 持ち出し先の端末がAndroidなのでNFD->NFCへ正規化形式を変換しています  
    file_in = path.cleanpath.to_s.encode(Encoding::UTF_8, Encoding::UTF8_MAC)  
    file_out = out_dir.join(name).to_s.encode(Encoding::UTF_8, Encoding::UTF8_MAC)  

    FileUtils.mkdir_p(out_dir)  

    cmd = Shellwords.join(%W[  
      ffmpeg  
      #{OVERWRITE ? '-y' : '-n'}  
      -i #{file_in}  
      -vsync 2  
      -acodec libmp3lame  
      -aq #{QUALITY}  
      #{file_out}  
    ])  
    system(cmd)  
  end  
end  

前提

  • mac内のファイルに対して変換を行う場合の実装が一部あります

前準備

$ brew install ffmpeg  
$ mkdir outdir  
$ cd outdir  
$ git clone https://gist.github.com/2eb486704f6c22e0110bd9a33ea3ddb5.git bin  

使用例

$ cd outdir  
$ ruby bin/trans.rb ~/Music/iTunes/iTunes\ Media/Music/ .  

参考

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@rentalnameの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう