2017-01-05 13 views
0

Я пытаюсь перекодировать загруженные пользователем аудиофайлы MP3 в ogg, ac3 wav или другие форматы, используя django, celery, rabbitMQ и FFMPEG. Но я получаю сообщение об ошибке с [WinError 10042] Неизвестный, недействительным, или неподдерживаемый параметр или уровень был определен в getsockopt или setsockopt вызоваКак перекодировать файлы MP3 в django с помощью FFMPEG, Celery и RabbitMQ?

ОС Window 10-64bit Python 3.0 Джанго - 1,10

здесь приведен код I:

models.py 
import uuid 
from django.db import models 

    # Create your models here. 

    def unique_file_path(instance, filename): 
    new_file_name = uuid.uuid4() 
    return str(new_file_name) 

    class AudioFile(models.Model): 
    name = models.CharField(max_length=100, blank=True) 
    mp3_file = models.FileField(upload_to=unique_file_path) 
    ogg_file = models.FileField(blank=True, upload_to=unique_file_path) 
    wav_file = models.FileField(blank=True, upload_to=unique_file_path) 
    ac3_file = models.FileField(blank=True, upload_to=unique_file_path) 

    def __str__(self): 
     return self.name 

    views.py 
    from django.shortcuts import render 

    # Create your views here. 

    from django.views.generic.edit import FormView 
    from django.http import HttpResponseRedirect 
    from django.core.urlresolvers import reverse 

    from django.views.generic import FormView 
    from audio_transcoder.taskapp.tasks import transcode_mp3 

    from .forms import AudioFileFrom 
    from .models import AudioFile 

    class UploadAudioFileView(FormView): 
    template_name = 'upload/upload.html' 
    form_class = AudioFileFrom 


    def form_valid(self, form): 
     audio_file = AudioFile(
      name=self.get_form_kwargs().get('data')['name'], 
      mp3_file=self.get_form_kwargs().get('files')['mp3_file'] 
     ) 
     audio_file.save() 
     transcode_mp3.delay(audio_file.id) 

     return HttpResponseRedirect(self.get_success_url()) 

    def get_success_url(self): 
     return reverse('/') 


    tasks.py 
    import os 
    import os.path 
    import subprocess 

    from audio_transcoder.taskapp.celery import app 




    from celery import Celery 

    app = Celery('fftest', 
      broker='amqp://[email protected]//', 
      include=['taskapp.tasks']) 

    if __name__ == '__main__': 
    app.start() 

    from audio_transcoder.models import AudioFile 
    import fftest.settings as settings 

    @app.task 
    def transcode_mp3(mp3_id): 
    audio_file = AudioFile.objects.get(id=mp3_id) 
    input_file_path = audio_file.mp3_file.path 
    filename = os.path.basename(input_file_path) 

    ogg_output_file_name = os.path.join('transcoded', '{}.ogg'.format(filename)) 
    ogg_output_file_path = os.path.join(settings.MEDIA_ROOT, ogg_`enter code  
    here`output_file_name) 
    enter code here 
    ac3_output_file_name = os.path.join('transcoded', '{}.ac3'.format(filename)) 
    ac3_output_file_path = os.path.join(settings.MEDIA_ROOT, 
    ac3_output_file_name) 

    wav_output_file_name = os.path.join('transcoded', '{}.wav'.format(filename)) 
    wav_output_file_path = os.path.join(settings.MEDIA_ROOT, 
    wav_output_file_name) 

    if not os.path.isdir(os.path.dirname(ogg_output_file_path)): 
     os.makedirs(os.path.dirname(ogg_output_file_path)) 

    subprocess.call([ 
      settings.FFMPEG_PATH, 
      '-i', 
      input_file_path, 
      ogg_output_file_path, 
      ac3_output_file_path, 
      wav_output_file_path 
     ] 
    ) 

    audio_file.ogg_file = ogg_output_file_name 
    audio_file.ac3_file = ac3_output_file_name 
    audio_file.wav_file = wav_output_file_name 
    audio_file.save() 

Не знаете, где ошибка. При загрузке видео он отображается ниже:

OperationalError at /new/ 
[WinError 10042] An unknown, invalid, or unsupported option or level was specified in a getsockopt or setsockopt call 
Request Method: POST 
Request URL: http://127.0.0.1:8000/new/ 
Django Version: 1.10.4 
Exception Type: OperationalError`enter code here` 
Exception Value: 
[WinError 10042] An unknown, invalid, or unsupported option or level was specified in a getsockopt or setsockopt call 
Exception Location: C:\Users\RAMa2r3e4s5h6\fftest\lib\site-packages\amqp\transport.py in _set_socket_options, line 204 
+0

попробуйте использовать 'брокера = 'AMQP: //[email protected] //' 'вместо«локального ' –

ответ

0

Если вы используете версию 4 сельдерея, они полностью удалили поддержку Windows.

Я рекомендую установить сельдерей V 3.1.25

pip install celery==3.1.25 

Источник:. Removed features in Celery 4.0