kevin.yang 6 months ago
parent
commit
0347aaa559
1 changed files with 21 additions and 1 deletions
  1. 21 1
      common/ffmpeg.py

+ 21 - 1
common/ffmpeg.py

@@ -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__':