|
@@ -1,6 +1,8 @@
|
|
|
+import asyncio
|
|
|
import os
|
|
|
import subprocess
|
|
|
import time
|
|
|
+from typing import List
|
|
|
|
|
|
import cv2
|
|
|
from loguru import logger
|
|
@@ -379,7 +381,25 @@ class FFmpeg():
|
|
|
os.remove(single_video_srt)
|
|
|
return single_video_url
|
|
|
|
|
|
-
|
|
|
+ @classmethod
|
|
|
+ def asyncio_run_subprocess(cls, params: List[str], timeout: int = 30) -> str:
|
|
|
+ async def run_subprocess():
|
|
|
+ process = await asyncio.create_subprocess_exec(
|
|
|
+ params[0],
|
|
|
+ *params[1:],
|
|
|
+ stdout=asyncio.subprocess.PIPE,
|
|
|
+ stderr=asyncio.subprocess.PIPE,
|
|
|
+ )
|
|
|
+ try:
|
|
|
+ out, err = await asyncio.wait_for(process.communicate(), timeout=timeout)
|
|
|
+ if process.returncode != 0:
|
|
|
+ raise IOError(err)
|
|
|
+ return out.decode()
|
|
|
+ except asyncio.TimeoutError:
|
|
|
+ process.kill()
|
|
|
+ out, err = await process.communicate()
|
|
|
+ raise IOError(err)
|
|
|
+ return asyncio.run(run_subprocess())
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|