From 28a56b6b83445e89b6e9626a07faceaf565b8e43 Mon Sep 17 00:00:00 2001 From: Jerry Yan <792602257@qq.com> Date: Wed, 4 May 2022 15:47:59 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B7=A5=E4=BD=9C=E6=B5=81=EF=BC=8C=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=8F=8C=E5=8D=A1=E5=8D=8F=E5=90=8C=EF=BC=8C=E5=8A=A0?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E9=98=B2=E9=9F=B3=E7=94=BB=E4=B8=8D=E5=90=8C?= =?UTF-8?q?=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- danmaku_workflow.py | 41 +++++++++++++++++++++++++++-------------- quick_split_video.py | 1 + 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/danmaku_workflow.py b/danmaku_workflow.py index cdceaed..a5a5abd 100644 --- a/danmaku_workflow.py +++ b/danmaku_workflow.py @@ -328,6 +328,7 @@ class WorkerThread(QThread): "-f", "mp4", "-preset:v", "fast", "-profile:v", "high", "-level", "4.1", "-b:v", VIDEO_BITRATE, "-rc:v", "vbr", "-tune:v", "hq", "-qmin", "10", "-qmax", "32", "-crf", "16", + "-fflags", "+genpts", "-shortest", "-movflags", "faststart", # "-t", "10", new_filename ], **subprocess_args(True)) @@ -342,6 +343,7 @@ class WorkerThread(QThread): "-f", "mp4", "-preset:v", "fast", "-profile:v", "high", "-level", "4.1", "-b:v", VIDEO_BITRATE, "-rc:v", "vbr", "-tune:v", "hq", "-qmin", "10", "-qmax", "32", "-crf", "16", + "-fflags", "+genpts", "-shortest", "-movflags", "faststart", # "-t", "10", new_filename ], **subprocess_args(True)) @@ -355,6 +357,7 @@ class WorkerThread(QThread): "-f", "mp4", "-preset:v", "fast", "-profile:v", "high", "-level", "4.1", "-b:v", VIDEO_BITRATE, "-rc:v", "vbr", "-tune:v", "hq", "-qmin", "10", "-qmax", "32", "-crf", "16", + "-fflags", "+genpts", "-shortest", "-movflags", "faststart", # "-t", "10", new_filename ], **subprocess_args(True)) @@ -368,6 +371,7 @@ class WorkerThread(QThread): "-f", "mp4", "-preset:v", "fast", "-profile:v", "high", "-level", "4.1", "-b:v", VIDEO_BITRATE, "-rc:v", "vbr", "-qmin", "10", "-qmax", "32", "-crf", "16", + "-fflags", "+genpts", "-shortest", "-movflags", "faststart", # "-t", "10", new_filename ], **subprocess_args(True)) @@ -384,30 +388,34 @@ class WorkerThread(QThread): print("[>]Duration:", duration) if duration > (VIDEO_CLIP_EACH_SEC * 5): # qsv 压制前2段,剩余交由nvenc压制 - new_filename0 = base_ts_to_filename(base_ts) - new_filename1 = base_ts_to_filename(base_ts + VIDEO_CLIP_EACH_SEC * 2) + _slices = int(duration / VIDEO_CLIP_EACH_SEC) + new_filename0 = base_ts_to_filename(base_ts + (_slices - 1) * VIDEO_CLIP_EACH_SEC) + new_filename1 = base_ts_to_filename(base_ts) print("[+]Use Intel QSV Acceleration") encode_process0 = subprocess.Popen([ FFMPEG_EXEC, "-hide_banner", "-progress", "-", "-loglevel", "error", "-y", - "-hwaccel", "qsv", "-t", str(VIDEO_CLIP_EACH_SEC * 2 + (VIDEO_CLIP_OVERFLOW_SEC * 0.8)), "-i", - orig_filename, "-vf", + "-hwaccel", "qsv", "-ss", str((_slices - 1) * VIDEO_CLIP_EACH_SEC), + "-copyts", "-i", orig_filename, "-vf", ",".join("subtitles=%s" % i for i in subtitles), - "-c:a", "copy", "-c:v", "h264_qsv", + "-c:a", "copy", "-c:v", "h264_qsv", "-ss", str((_slices - 1) * VIDEO_CLIP_EACH_SEC), "-f", "mp4", "-preset:v", "fast", "-profile:v", "high", "-level", "4.1", "-b:v", VIDEO_BITRATE, "-rc:v", "vbr", "-tune:v", "hq", "-qmin", "10", "-qmax", "32", "-crf", "16", + "-fflags", "+genpts", "-shortest", "-movflags", "faststart", # "-t", "10", new_filename0 ], **subprocess_args(True)) print("[+]Use Nvidia NvEnc Acceleration") encode_process1 = subprocess.Popen([ FFMPEG_EXEC, "-hide_banner", "-progress", "-", "-loglevel", "error", "-y", - "-ss", str(VIDEO_CLIP_EACH_SEC * 2), "-copyts", "-i", orig_filename, "-vf", + "-t", str((_slices - 1) * VIDEO_CLIP_EACH_SEC + (VIDEO_CLIP_OVERFLOW_SEC * 0.5)), + "-i", orig_filename, "-vf", ",".join("subtitles=%s" % i for i in subtitles), - "-c:a", "copy", "-c:v", "h264_nvenc", "-ss", str(VIDEO_CLIP_EACH_SEC * 2), + "-c:a", "copy", "-c:v", "h264_nvenc", "-f", "mp4", "-preset:v", "fast", "-profile:v", "high", "-level", "4.1", "-b:v", VIDEO_BITRATE, "-rc:v", "vbr", "-tune:v", "hq", "-qmin", "10", "-qmax", "32", "-crf", "16", + "-fflags", "+genpts", "-shortest", "-movflags", "faststart", # "-t", "10", new_filename1 ], **subprocess_args(True)) @@ -418,30 +426,34 @@ class WorkerThread(QThread): return [new_filename0, new_filename1] elif duration > (VIDEO_CLIP_EACH_SEC * 3): # 至少也要能切2片,才用双GPU加速 - new_filename0 = base_ts_to_filename(base_ts, True) - new_filename1 = base_ts_to_filename(base_ts + VIDEO_CLIP_EACH_SEC) + _slices = int(duration / VIDEO_CLIP_EACH_SEC) + new_filename0 = base_ts_to_filename(base_ts + _slices * VIDEO_CLIP_EACH_SEC, True) + new_filename1 = base_ts_to_filename(base_ts) print("[+]Use Intel QSV Acceleration") encode_process0 = subprocess.Popen([ FFMPEG_EXEC, "-hide_banner", "-progress", "-", "-loglevel", "error", "-y", - "-hwaccel", "qsv", "-t", str(VIDEO_CLIP_EACH_SEC + (VIDEO_CLIP_OVERFLOW_SEC * 0.8)), "-i", - orig_filename, "-vf", + "-hwaccel", "qsv", "-ss", str(_slices * VIDEO_CLIP_EACH_SEC), + "-copyts", "-i", orig_filename, "-vf", ",".join("subtitles=%s" % i for i in subtitles), - "-c:a", "copy", "-c:v", "h264_qsv", + "-c:a", "copy", "-c:v", "h264_qsv", "-ss", str(_slices * VIDEO_CLIP_EACH_SEC), "-f", "mp4", "-preset:v", "fast", "-profile:v", "high", "-level", "4.1", "-b:v", VIDEO_BITRATE, "-rc:v", "vbr", "-tune:v", "hq", "-qmin", "10", "-qmax", "32", "-crf", "16", + "-fflags", "+genpts", "-shortest", "-movflags", "faststart", # "-t", "10", new_filename0 ], **subprocess_args(True)) print("[+]Use Nvidia NvEnc Acceleration") encode_process1 = subprocess.Popen([ FFMPEG_EXEC, "-hide_banner", "-progress", "-", "-loglevel", "error", "-y", - "-ss", str(VIDEO_CLIP_EACH_SEC), "-copyts", "-i", orig_filename, "-vf", + "-t", str(_slices * VIDEO_CLIP_EACH_SEC + VIDEO_CLIP_OVERFLOW_SEC * 0.5), + "-i", orig_filename, "-vf", ",".join("subtitles=%s" % i for i in subtitles), - "-c:a", "copy", "-c:v", "h264_nvenc", "-ss", str(VIDEO_CLIP_EACH_SEC), + "-c:a", "copy", "-c:v", "h264_nvenc", "-f", "mp4", "-preset:v", "fast", "-profile:v", "high", "-level", "4.1", "-b:v", VIDEO_BITRATE, "-rc:v", "vbr", "-tune:v", "hq", "-qmin", "10", "-qmax", "32", "-crf", "16", + "-fflags", "+genpts", "-shortest", "-movflags", "faststart", # "-t", "10", new_filename1 ], **subprocess_args(True)) @@ -471,6 +483,7 @@ class WorkerThread(QThread): "-ss", str(current_sec), "-i", file_name, "-c", "copy", "-f", "mp4", "-t", str(VIDEO_CLIP_EACH_SEC + VIDEO_CLIP_OVERFLOW_SEC), + "-fflags", "+genpts", "-shortest", "-movflags", "faststart", "{}.mp4".format(current_dt) ], **subprocess_args(True)) self.handle_ffmpeg_output(split_process.stdout) diff --git a/quick_split_video.py b/quick_split_video.py index 38237d0..fb59507 100644 --- a/quick_split_video.py +++ b/quick_split_video.py @@ -47,6 +47,7 @@ if __name__ == '__main__': "-ss", str(current_sec), "-i", input_file, "-c", "copy", "-f", "mp4", "-t", str(EACH_SEC + OVERFLOW_SEC), + "-shortest", "{}.mp4".format(current_dt) ]) split_process.wait()