python - 在 django 中将视频编码为多种分辨率的最佳方法是什么?我们应该创建一个 celery 任务还是要编码多个任务?

标签 python django django-models ffmpeg django-rest-framework

关闭。这个问题是opinion-based .它目前不接受答案。












想改进这个问题?更新问题,以便 editing this post 可以用事实和引用来回答它.


1年前关闭。







Improve this question




嘿伙计们,在 django 中使用 ffmpeg 将视频编码为多种分辨率的最佳方法是什么?我们应该创建一个单独的 celery 任务来编码视频并保存在数据库中,还是有多个任务来将视频编码为各种分辨率?我对所有这些都是新手,因此非常感谢有关最佳方式的任何帮助。
我在这里有两个任务要编码为 480 和 1080p ..所以是否可以在 1 个任务中同时运行,或者最好的方法是分别编码?
还有像 youtube 这样的网站是如何编码的?

@task(name= 'task_video_encoding_480p')
def task_video_encoding_480p(video_id):
    logger.info('Video Processing started')
    try:
        video = 
        input_file_path = 
        output_file_480p_path = 

        for i in range(1):
            new_video_480p = subprocess.call([ffmpeg, {process},output_file_480p_path])

        if new_video_480p == 0:

            video.save()
            logger.info('Video Processing Finished')
            #video.temp_file.delete()
        else:
            logger.info('Proceesing Failed.') # Just for now

    except:
        raise ValidationError('Something went wrong!')
任务 2
@task(name= 'task_video_encoding_1080p')
def task_video_encoding_1080p(video_id):
    logger.info('Video Processing started')
    try:
        video = 
        input_file_path = 
        output_file_1080p_path = 

        for i in range(1):
            new_video_1080p = subprocess.call([ffmpeg, {process},output_file_1080p_path])

        if new_video_1080p == 0:

            video.save()
            logger.info('Video Processing Finished')
            video.temp_file.delete()
        else:
            logger.info('Proceesing Failed.') # Just for now

    except:
        raise ValidationError('Something went wrong!')
谢谢你。非常感谢您的帮助。

最佳答案

例如 FFmpeg command采用一个输入流和四个输出流可能如下所示:

ffmpegCommand = """/opt/ffmpeg/bin/ffmpeg -y -threads 1 -i '/tmp/dev/built-inputVideo.avi'
  -map '0:v'  -s 640:360 -sn -vcodec h264 -movflags +faststart -strict -2  -threads 1 '/tmp/dev/built-output-640.mp4'
  -map '0:v'  -s 1024:576 -sn -vcodec h264 -movflags +faststart -strict -2   -threads 1 '/tmp/dev/built-output-1024.mp4'
  -map '0:v' -sn        -vf "fps=0.425" -s 640:360  -threads 1 '/tmp/dev/preview/%08d.jpg'
  -map '0:v' -sn -q:v 1 -vf "fps=0.425" -s 1024:576 -threads 1 '/tmp/dev/preview_hires/%02d.jpg'
"""
subprocess.call([ffmpegCommand], ...)
解释:
  • map 命令创建 640:360 视频。
  • map 命令创建 1024:576 视频。
  • map 命令创建(压缩)缩略图。
  • map 命令创建(非压缩)缩略图。

  • 注:这可能不适用于您的用例,您可能需要调整 FFmpeg 参数并提供正确的路径。

    关于python - 在 django 中将视频编码为多种分辨率的最佳方法是什么?我们应该创建一个 celery 任务还是要编码多个任务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63869403/

    相关文章:

    python - Flask 重定向后的 Twilio MessagingResponse()

    python - 如何从卡住的 spicy.stats 分布中获取参数参数?

    django - 如何在 django View 之间传递或共享变量?

    python - Django REST Framework - 无法覆盖 ListAPIView 中的列表

    python - QTreeView 与 QFileSystemModel 无法正常工作

    python - Tensorflow,喂养 Estimator.fit(batch)

    python - Django get_or_create 返回模型。导入 CSV 时不存在

    Django:管理中的验证错误

    python - 尝试执行迁移时模型未处理的挂起操作

    Django 1.7 迁移