Ffmpeg 在进程结束之前重命名carrierwave扩展

Ffmpeg 在进程结束之前重命名carrierwave扩展,ffmpeg,carrierwave,fog,Ffmpeg,Carrierwave,Fog,我有一个通过carrierwave上传的音频文件。我想在处理当前的_文件之前重命名它 当我处理一个版本时,通常我会通过 def full_filename(for_file=file) super.chomp(File.extname(super)) + '.mp3' end 但这将在版本创建过程之后执行 如何在保存之前制作一个版本并重新命名它 更具体地说: 我正在使用ffmpeg将WAV文件转换为MP3 FFMPEG需要一个inputfile(-i inputfile.wav)和一个o

我有一个通过carrierwave上传的音频文件。我想在处理当前的_文件之前重命名它

当我处理一个版本时,通常我会通过

def full_filename(for_file=file)
  super.chomp(File.extname(super)) + '.mp3'
end 
但这将在版本创建过程之后执行

如何在保存之前制作一个版本并重新命名它

更具体地说:

我正在使用ffmpeg将WAV文件转换为MP3

FFMPEG需要一个inputfile(-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 
发生得太晚(在处理后完成)


如何重命名临时Carrierfile名称?

您可以通过使用临时文件(带有mp3扩展名)解决此问题,然后将其移动到可以由
full\u 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
生成临时路径的一些选项,供您测试和决定:

  • current_path.chomp(File.extname(current_path))+'.mp3'
  • Tempfile.new([File.basename(当前路径),'.mp3']).path
  • Rails.root.join('tmp','mp3',Dir::Tmpname.make_Tmpname([original_filename',.mp3'],nil))

您可以通过使用临时文件(带有mp3扩展名)来解决此问题,然后按照预期将其移动到可由
完整\u文件名处理的位置:

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
生成临时路径的一些选项,供您测试和决定:

  • current_path.chomp(File.extname(current_path))+'.mp3'
  • Tempfile.new([File.basename(当前路径),'.mp3']).path
  • Rails.root.join('tmp','mp3',Dir::Tmpname.make_Tmpname([original_filename',.mp3'],nil))

他们上传wav,而你将转换后的mp3作为版本存储?还是你把wav扔掉了?是的,他们上传了wav。我想把mp3存为一个版本。wav也应该被保存。他们上传了一个wav,而你将转换后的mp3作为一个版本存储?还是你把wav扔掉了?是的,他们上传了wav。我想把mp3存为一个版本。wav也应该被保存。你做到了!这就是我一直在寻找的。你无法想象你是如何帮助我的。非常感谢你@两年后的塔沃,你帮我终于解决了10个小时左右的头痛。谢谢你做到了!这就是我一直在寻找的。你无法想象你是如何帮助我的。非常感谢你@两年后的塔沃,你帮我终于解决了10个小时左右的头痛。谢谢