2013-09-02 2 views
1

У меня есть аудиофайл, который загружается через несущую волну. Я хочу переименовать текущий файл перед его обработкой.Переименование расширения несущей волны до завершения процесса

Когда я обработка версии, обычно я переписать расширение файла через

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

, но это будет выполняться после того, как процесс создания версии.

Как я могу сделать версию и переименовать ее до ее сохранения.

Чтобы быть более для бетона:

Я преобразования файлов WAV в MP3 с помощью FFmpeg.

FFMPEG нуждается в файле ввода (-i inputfile.wav) и и outputfilename, для которого требуется расширение файла mp3 для обработки mp3. (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 

происходит слишком поздно (сделано после обработки)

Как я могу переименовать временный Имя несущей?

+0

Они загружают wav, и вы сохраняете преобразованный mp3 в качестве версии? Или вы выбрасываете wav? – Taavo

+0

да, они загружают wav. И я хочу сохранить mp3 в качестве версии. WAV также должен быть сохранен. – Jan

ответ

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))
+0

Вы сделали это! Это то, что я искал. Вы не представляете, как вы мне помогли. Спасибо огромное! – Jan

+0

Рад, что я мог помочь! – Taavo

+0

@Taavo 2 года спустя, и вы только что помогли мне, наконец, решить около 10 часов головной боли. Благодаря! –

Смежные вопросы