diff --git a/util/ffmpeg.go b/util/ffmpeg.go index 6971c54..fd0d560 100644 --- a/util/ffmpeg.go +++ b/util/ffmpeg.go @@ -147,7 +147,7 @@ func runFfmpegForMultipleFile2(ctx context.Context, task *dto.FfmpegTask) bool { subCtx, span := tracer.Start(ctx, "runFfmpegForMultipleFile2") defer span.End() // 多文件,方法二:使用计算资源编码 - result, err := SlowVideoCut(subCtx, task.Files, task.Offset, task.Offset, task.OutputFile) + result, err := SlowVideoCut(subCtx, task.Files, task.Offset, task.Length, task.OutputFile) if err != nil { return false } @@ -317,8 +317,10 @@ func QuickVideoCut(ctx context.Context, inputFile string, offset, length float64 "-hide_banner", "-y", "-i", inputFile, + "-f", "lavfi", "-i", "anullsrc=channel_layout=mono:sample_rate=44100", "-c:v", "copy", - "-an", + "-c:a", "aac", + "-shortest", "-reset_timestamps", "1", "-ss", strconv.FormatFloat(offset, 'f', 2, 64), "-t", strconv.FormatFloat(length, 'f', 2, 64), @@ -360,8 +362,10 @@ func QuickConcatVideoCut(ctx context.Context, inputFiles []dto.File, offset, len "-f", "concat", "-safe", "0", "-i", tmpFile, + "-f", "lavfi", "-i", "anullsrc=channel_layout=mono:sample_rate=44100", "-c:v", "copy", - "-an", + "-c:a", "aac", + "-shortest", "-ss", strconv.FormatFloat(offset, 'f', 2, 64), "-t", strconv.FormatFloat(length, 'f', 2, 64), "-f", "mp4", @@ -383,6 +387,9 @@ func SlowVideoCut(ctx context.Context, inputFiles []dto.File, offset, length flo ffmpegCmd = append(ffmpegCmd, "-i", file.Url) } + // 添加静音音频源作为额外输入 + ffmpegCmd = append(ffmpegCmd, "-f", "lavfi", "-i", "anullsrc=channel_layout=mono:sample_rate=44100") + inputCount := len(inputFiles) filterComplex := strings.Builder{} for i := 0; i < inputCount; i++ { @@ -393,8 +400,10 @@ func SlowVideoCut(ctx context.Context, inputFiles []dto.File, offset, length flo ffmpegCmd = append(ffmpegCmd, "-filter_complex", filterComplex.String(), "-map", "[v]", + "-map", fmt.Sprintf("%d:a", inputCount), + "-c:a", "aac", + "-shortest", "-preset:v", "fast", - "-an", "-ss", strconv.FormatFloat(offset, 'f', 2, 64), "-t", strconv.FormatFloat(length, 'f', 2, 64), "-f", "mp4",