在网上上传后,使用FFMPEG在Django中从视频中提取WAV音频文件

时间:2019-03-09 15:44:14

标签: python django video ffmpeg

问题

我正在尝试找到一种方法,可以从网络用户使用Django使用ffmpeg上传的 mp4 视频文件中提取音频 wav 文件。

如果我发现要提取音频,那么应该将其保存在项目中的什么位置?

  1. 我使用“ Django-ffmpeg”进行了尝试,但未进行转换,并停留在“待处理的转换”消息中。
  2. 然后我尝试了:

    import subprocess
    
    subprocess.call('ffmpeg -i filename.mp4 filename.wav')
    

错误

Error

脚本

  

def validate_file_extension(值):       导入操作系统       从django.core.exceptions导入ValidationError       ext = os.path.splitext(value.name)1#[0]返回路径和文件名       filename = os.path.splitext(value.name)1#[0]返回路径+文件名       valid_extensions = ['.mp4']       如果不是valid.extensions中的ext.lower():           引发ValidationError(u'不支持的文件扩展名。')       其他:           导入子流程           subprocess.call('ffmpeg -i filename.mp4 filename.wav')

1 个答案:

答案 0 :(得分:0)

解决方案:  -您可以在Django中以这种方式提取wav音频文件:

def extract_audio(videofile,channels=1, rate=16000):

    your_media_root = settings.MEDIA_ROOT
    path_to_user_folder = your_media_root + videofile.name

    inFile = path_to_user_folder

    temp = tempfile.NamedTemporaryFile(suffix='.wav', delete=False)
    command = ["ffmpeg", "-y", "-i", inFile,
           "-ac", str(channels), "-ar", str(rate),
           "-loglevel", "error", temp.name]
    subprocess.check_output(command)
    print(temp.name)
    return temp.name
  • 第二次使用“导入临时文件”库来临时存储提取的文件。