python - ffmpeg Python命令在PM2环境下只运行一次

标签 python ffmpeg pm2 ffmpeg-python

PM2 作为 web 用户运行。使用 sudo apt install ffmpeg 将 ffmpeg 安装到 Ubuntu 16.04 LTS。 Python 版本为 3.6。软件使用ffmpeg-python@0.1.17 .

生成的应用程序没有产生任何错误。当 ffmpeg 代码第一次执行时,我们看到一个输出,并且 ffmpeg 进程按预期完成了任务。

所有后续请求在下一次 ffmpeg 执行时停止。无输出。 ffmpeg 进程没有返回。没有错误。 PM2进程没有报错。应用程序日志在 ffmpeg 命令上停止,就好像它已挂起一样。

根本原因是什么?非常感谢任何帮助。

此外,PM2 在子进程(如 ffmpeg)上挂起的原因是什么?

代码如下:

class ImageHelper:

def __init__(self):
    pass

@classmethod
def create_thumb_from_video_ffmpeg(cls, input_video_file_path,
                                   output_image_path,
                                   scale_width,
                                   scale_height
                                   ):
    """
        This function is used to create the thumb image
        from a source video file.
        We are using a python wrapper/library for FFMPEG
    """
    try:
        if Functions.get_attribute_env('ENVIRONMENT') == 'prod':

            out, err = (
                ffmpeg
                    .input(input_video_file_path, ss="00:00:00.001")
                    .filter('scale', scale_width, scale_height)
                    .output(output_image_path, vframes=1, loglevel='quiet')
                    .overwrite_output()
                    .run(capture_stdout=True)
            )
            print("We only see this once!")
        else:
            out, err = (
                ffmpeg
                    .input(input_video_file_path, ss="00:00:00.001")
                    .filter('scale', scale_width, scale_height)
                    .output(output_image_path, vframes=1)
                    .overwrite_output()
                    .run(capture_stdout=True)
            )
            print("We only see this once!")

        if err:
            if Functions.get_attribute_env('ENVIRONMENT') != 'prod':
                print('ffmpeg video thumb', err)
            else:
                Functions.logger_function(str(err))
            raise Exception(err)
        else:
            return output_image_path

    except Exception as e:
        if Functions.get_attribute_env('ENVIRONMENT') != 'prod':
            print('in thumb exception', e)
        else:
            Functions.logger_function(str(e))
        raise Exception(e)

最佳答案

检查 ffmpeg 进程是否在发出顺序请求时正在运行。如果是,您可能希望确保该进程在第一次完成后关闭,以便它可以为顺序请求再次启动。

关于python - ffmpeg Python命令在PM2环境下只运行一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54931657/

相关文章:

python - 将数据拟合到广义极值分布

batch-file - FFMPEG - 我正在尝试使用 ffmpeg 选择文件夹中的所有 .mp4 文件,并以文件名作为图像名称对其进行截图

pm2 - 调试使用pm2运行的应用程序

node.js - pm2 可以运行 'npm start' 脚本吗

python - Keras 中二元分类的输出层

python 请求不适用于来自 apache 和 wsgi 的 https

python - 如何在 json 格式的字符串中使用 str.format?

三星 Galaxy S4 设备中的 Android FFMPEG 视频压缩问题

audio - ffmpeg 音频复制因管道失败

node.js - 如何检查我的 pm2 应用程序 NODE_ENV 是否已设置?