1

キャリアウェーブ経由でアップロードされるオーディオファイルがあります。処理される前に current_file の名前を変更したい。

バージョンを処理するときは、通常、ファイル拡張子を次のように書き換えます。

def full_filename(for_file=file)
  super.chomp(File.extname(super)) + '.mp3'
end 

ただし、これはバージョン作成プロセスの後に実行されます。

バージョンを作成し、保存する前に名前を変更するにはどうすればよいですか。

もっと具体的に言うと:

ffmpeg を使用して WAV ファイルを MP3 に変換しています。

FFMPEG は、mp3 を処理するために mp3 ファイル拡張子を必要とする入力ファイル (-i inputfile.wav) と出力ファイル名を必要とします。(私の場合はoutput.mp3)

保存する前に拡張機能の名前を変更するにはどうすればよいですか?

ffmpeg -i inputfile.wav -acodec libmp3lame -f mp3 watermarked.mp3
         HOW CAN I RENAME THE EXTENSTION BEFORE IT GET SAVED? ^^^

上記のスニップ (コーデックとフォーマットを強制する -f) は仕事ではなく、

def full_filename(for_file=file)
  super.chomp(File.extname(super)) + '.mp3'
end 

発生が遅すぎる (処理後に行われる)

Carrierfi​​le の一時的な名前を変更するにはどうすればよいですか?

4

1 に答える 1

4

この問題を回避するには、一時ファイル (mp3 拡張子付き) を使用し、それを次のように処理できる場所に移動しますfull_filename

version :mp3 do
  process :convert_to_mp3

  def convert_to_mp3
    temp_path = ... # generate good temp path, ending in '.mp3'

    `ffmpeg -i #{ current_path.shellescape } -acodec libmp3lame -f mp3 #{ temp_path.shellescape }`

    File.unlink(current_path)
    FileUtils.mv(temp_path, current_path)
  end

  def full_filename(for_file)
    super.chomp(File.extname(super)) + '.mp3'
  end
end

テストして決定するための、temp_path を生成するためのいくつかのオプション:

  • current_path.chomp(File.extname(current_path)) + '.mp3'
  • Tempfile.new([File.basename(current_path), '.mp3']).path
  • Rails.root.join('tmp', 'mp3', Dir::Tmpname.make_tmpname([original_filename,'.mp3'], nil))
于 2013-09-06T18:09:13.227 に答える