diff --git a/entity/ffmpeg.py b/entity/ffmpeg.py index cfea092..3558ad2 100644 --- a/entity/ffmpeg.py +++ b/entity/ffmpeg.py @@ -253,7 +253,7 @@ class FfmpegTask(object): input_args.append("-i") input_args.append(audio.replace("\\", "/")) audio_track_index += 1 - filter_args.append(f"{audio_output_str}[{input_index}:a]amix[a]") + filter_args.append(f"{audio_output_str}[{input_index}:a]amix=duration=shortest:dropout_transition=0:normalize=0[a]") audio_output_str = "[a]" if audio_output_str: output_args.append("-map") @@ -295,7 +295,7 @@ class FfmpegTask(object): input_args.append("-i") input_args.append(audio.replace("\\", "/")) audio_track_index += 1 - filter_args.append(f"{audio_output_str}[{input_index}:a]amix[a]") + filter_args.append(f"{audio_output_str}[{input_index}:a]amix=duration=shortest:dropout_transition=0:normalize=0[a]") audio_output_str = "[a]" if audio_output_str: output_args.append("-map") diff --git a/util/ffmpeg.py b/util/ffmpeg.py index 579c12a..dd3179b 100644 --- a/util/ffmpeg.py +++ b/util/ffmpeg.py @@ -5,7 +5,7 @@ import subprocess from datetime import datetime from typing import Optional, IO -from entity.ffmpeg import FfmpegTask, ENCODER_ARGS, VIDEO_ARGS, AUDIO_ARGS +from entity.ffmpeg import FfmpegTask, ENCODER_ARGS, VIDEO_ARGS, AUDIO_ARGS, MUTE_AUDIO_INPUT from telemetry import get_tracer logger = logging.getLogger(__name__) @@ -17,9 +17,9 @@ def to_annexb(file): return file logger.info("ToAnnexb: %s", file) ffmpeg_process = subprocess.run(["ffmpeg", "-y", "-hide_banner", "-i", file, - "-f", "lavfi", "-i", "anullsrc=cl=stereo:r=48000", + *MUTE_AUDIO_INPUT, "-map", "0:v", "-map", "1:a", - "-c:v", "copy", "-bsf:v", "h264_mp4toannexb", + "-c:v", "copy", "-bsf:v", "h264_mp4toannexb", "-shortest", "-c:a", "aac", "-b:a", "128k", "-ar", "48000", "-ac", "2", "-f", "mpegts", file+".ts"]) span.set_attribute("ffmpeg.args", json.dumps(ffmpeg_process.args)) @@ -38,8 +38,13 @@ def re_encode_and_annexb(file): if not os.path.exists(file): return file logger.info("ReEncodeAndAnnexb: %s", file) - ffmpeg_process = subprocess.run(["ffmpeg", "-y", "-hide_banner", "-i", file, *VIDEO_ARGS, *AUDIO_ARGS, *ENCODER_ARGS, "-bsf:v", "h264_mp4toannexb", - "-f", "mpegts", file +".ts"]) + ffmpeg_process = subprocess.run(["ffmpeg", "-y", "-hide_banner", "-i", file, + *MUTE_AUDIO_INPUT, + "-map", "0:v", "-map", "1:a", + *VIDEO_ARGS, "-bsf:v", "h264_mp4toannexb", + *AUDIO_ARGS, "-bsf:a", "setts=pts=DTS", + *ENCODER_ARGS, "-shortest", + "-f", "mpegts", file + ".ts"]) span.set_attribute("ffmpeg.args", json.dumps(ffmpeg_process.args)) logger.info("ReEncodeAndAnnexb: %s, returned: %s", file, ffmpeg_process.returncode) span.set_attribute("ffmpeg.code", ffmpeg_process.returncode)