ソースを参照

app: added video processing

Nikola Kotur 10 年 前
コミット
49ed3a1d0d

+ 2 - 2
conf/development.cfg

@@ -29,5 +29,5 @@ CELERYBEAT_SCHEDULE = {
     },
 }
 
-PHOSIC_TASK_DELAY = 30
-PHOSIC_TASK_MAX_EXECUTION_TIME = 150
+PHOSIC_TASK_DELAY = 1
+PHOSIC_TASK_MAX_EXECUTION_TIME = 360

+ 1 - 1
database/models.py

@@ -17,7 +17,7 @@ class Job(db.Model):
     mp3_name = db.Column(db.String(255), default="")
     pic_name = db.Column(db.String(255), default="")
     vid_name = db.Column(db.String(255), default="")
-    finished = db.Column(db.SmallInteger, default=JOB_PENDING)
+    state = db.Column(db.SmallInteger, default=JOB_PENDING)
 
     def __repr__(self):
         return '<Job %r>' % (self.uniqid)

+ 0 - 19
db_repository/versions/001_migration.py

@@ -1,19 +0,0 @@
-from sqlalchemy import *
-from migrate import *
-
-
-from migrate.changeset import schema
-pre_meta = MetaData()
-post_meta = MetaData()
-
-def upgrade(migrate_engine):
-    # Upgrade operations go here. Don't create your own engine; bind
-    # migrate_engine to your metadata
-    pre_meta.bind = migrate_engine
-    post_meta.bind = migrate_engine
-
-
-def downgrade(migrate_engine):
-    # Operations to reverse the above upgrade go here.
-    pre_meta.bind = migrate_engine
-    post_meta.bind = migrate_engine

+ 6 - 3
phosic/routes.py

@@ -1,5 +1,6 @@
 import os
 import datetime
+import logging
 
 from flask import render_template, redirect, url_for
 from werkzeug import secure_filename
@@ -9,6 +10,8 @@ from forms import JobForm
 from utils import generate_uniqid
 import tasks
 
+log = logging.getLogger(__name__)
+
 @app.route('/',  methods=['GET', 'POST'])
 def home():
     """Render website's home page."""
@@ -53,7 +56,7 @@ def home():
 
 @app.route('/jobs/<job_id>')
 def jobs(job_id):
-    """Render the website's about page."""
+    """Render job page."""
     job = models.Job.query.filter_by(uniqid=job_id).first_or_404()
     jobdir = app.config['UPLOAD_FOLDER'] + "/" + job_id + "/"
 
@@ -68,12 +71,12 @@ def jobs(job_id):
 
 @app.route('/about/')
 def about():
-    """Render the website's about page."""
+    """Render about page."""
     return render_template('about.html')
 
 @app.route('/contact/')
 def contact():
-    """Render website's home page."""
+    """Render contact page."""
     return render_template('contact.html')
 
 @app.route('/<file_name>.txt')

+ 16 - 3
phosic/tasks.py

@@ -1,6 +1,11 @@
 import datetime
+import logging
+from subprocess import CalledProcessError
 
 from flask_app import make_celery, models, db
+from utils import check_call
+
+log = logging.getLogger(__name__)
 
 celery = make_celery()
 
@@ -10,11 +15,19 @@ def calculate_statistics(x, y):
 
 @celery.task()
 def make_video(job_id, pic, mp3, out):
-    # ffmpeg -loop 1 -i image.jpg -i audio.mp3 -shortest -c:v libx264 -c:a copy -tune stillimage result.mkv
     job = models.Job.query.filter_by(uniqid=job_id).first()
     if not job:
         return False
-    job.finished = datetime.datetime.utcnow()
-    db.session.commit()
+
+    try:
+        check_call([ "/usr/bin/ffmpeg", "-loop", "1",
+                     "-i", pic, "-i", mp3,
+                     "-shortest", "-c:v", "libx264", "-c:a", "copy",
+                     "-tune", "stillimage", out ])
+        job.finished = datetime.datetime.utcnow()
+        db.session.commit()
+    except CalledProcessError, e:
+        log.error("Failed processing %s: %s" % (job_id, e))
+        return False
 
     return True

+ 2 - 0
templates/job-failed.html

@@ -14,6 +14,8 @@
 
     <p>Please try again later. You can send us this <code>{{ job.task_uuid }}</code> to help us figure out what happened. If you chose to do so, please send it to us before {{ job.expires.strftime('%d %b %Y at %H:%M') }}, otherwise all about this video will be deleted by then.</p>
 
+    {{ job.exception }}
+
   </div>
 </div>