当作为守护程序运行时,Ffmpeg无法正确转换视频

时间:2019-01-20 13:24:20

标签: python ffmpeg python-daemon

我正在使用ffmpeg转换和拆分来自Python进程的视频。当我以普通用户的身份从控制台运行它时,一切都会按预期运行,但是,如果以守护程序运行,它将生成相同数量的文件,但几乎整个文件都保持沉默。

这是我从python执行的行:

def convert_to_ffmpeg(file, ffmpeg_folder, chunk_length):
    res = -1
    try:
        file_name = os.path.join(ffmpeg_folder, ntpath.basename(file) + ".flac")
        res = os.system("ffmpeg -i " + file + " -f segment -segment_time "+str(chunk_length)+" " + file_name + " -y  >/dev/null 2>&1")
    except Exception as e:
        raise MyException(code=210005, detalails=file, cause=e)
    if not res == 0:
        raise MyException(code=210004, detalails=str(res) + " - " + file)
    return file_name

当我从普通控制台运行它时,它可以按预期工作:将视频分成几段“ self._chunk_length”秒。

但是,如果我使用带有以下代码的python-daemon运行程序:

if daemon_run:
    pid_file = check_unclean_exit(config['pidfile'], log)

    context = daemon.DaemonContext(
        working_directory=approot,
        umask=0o002,
        pidfile=pid_file,
    )
    context.signal_map = {
        signal.SIGTERM: programa_cleanup,
        signal.SIGHUP: 'terminate',
        # signal.SIGUSR1: reload_program_config,
    }

    with context:
        convert_to_ffmpeg("/foo/testfile.mkv", "/foo/ffmpeg", 40) 

它产生完全相同的块,但是,块的大多数内容只是沉默。它会在适当的位置分割,但不能正确填充音频输出的内容。当然,不会抛出异常,因为ffmpeg总是返回0

我什至没有在虚拟机中安装一个完全全新的Debian 9,以丢弃ffmpeg和旧计算机的安装问题。

当然,这是一个简化的示例。真正的事情是一个多线程应用程序,该程序监视目录中要转换的文件。

0 个答案:

没有答案