From f07e909a72412bbb189269d3aa53c8721f9571b7 Mon Sep 17 00:00:00 2001 From: wangqr Date: Mon, 21 Jan 2019 09:50:47 -0500 Subject: [PATCH] Fallback to re-encoding audio when ffmpeg quits with error --- src/you_get/processor/ffmpeg.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/you_get/processor/ffmpeg.py b/src/you_get/processor/ffmpeg.py index 51cc51d..8bdf77d 100755 --- a/src/you_get/processor/ffmpeg.py +++ b/src/you_get/processor/ffmpeg.py @@ -1,7 +1,7 @@ #!/usr/bin/env python import logging -import os.path +import os import subprocess import sys from ..util.strings import parameterize @@ -61,7 +61,23 @@ def ffmpeg_concat_av(files, output, ext): if os.path.isfile(file): params.extend(['-i', file]) params.extend(['-c', 'copy']) params.append(output) - return subprocess.call(params, stdin=STDIN) + if subprocess.call(params, stdin=STDIN): + print('Merging without re-encode failed.\nTry again re-encoding audio... ', end="", flush=True) + try: os.remove(output) + except FileNotFoundError: pass + params = [FFMPEG] + LOGLEVEL + for file in files: + if os.path.isfile(file): params.extend(['-i', file]) + params.extend(['-c:v', 'copy']) + if ext == 'mp4': + params.extend(['-c:a', 'aac']) + params.extend(['-strict', 'experimental']) + elif ext == 'webm': + params.extend(['-c:a', 'opus']) + params.append(output) + return subprocess.call(params, stdin=STDIN) + else: + return 0 def ffmpeg_convert_ts_to_mkv(files, output='output.mkv'): for file in files: -- GitLab