我正在使用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和旧计算机的安装问题。
当然,这是一个简化的示例。真正的事情是一个多线程应用程序,该程序监视目录中要转换的文件。