fix(audio): :bugs: fix webm audio strconv.ParseFloat: parsing "N/A"

This commit is contained in:
chenjm
2025-06-17 10:04:36 +08:00
parent 4559f5b2d3
commit b33d808bc1
2 changed files with 8 additions and 5 deletions

View File

@@ -263,17 +263,19 @@ func GetAudioDuration(ctx context.Context, filename string, ext string) (float64
if err != nil { if err != nil {
return 0, errors.Wrap(err, "failed to create temporary file") return 0, errors.Wrap(err, "failed to create temporary file")
} }
defer os.Remove(tmpFp.Name()) tmpName := tmpFp.Name()
defer tmpFp.Close() // Close immediately so ffmpeg can open the file on Windows.
_ = tmpFp.Close()
defer os.Remove(tmpName)
// ffmpeg -y -i filename -vcodec copy -acodec copy tmpFp // ffmpeg -y -i filename -vcodec copy -acodec copy <tmpName>
ffmpegCmd := exec.CommandContext(ctx, "ffmpeg", "-y", "-i", filename, "-vcodec", "copy", "-acodec", "copy", tmpFp.Name()) ffmpegCmd := exec.CommandContext(ctx, "ffmpeg", "-y", "-i", filename, "-vcodec", "copy", "-acodec", "copy", tmpName)
if err := ffmpegCmd.Run(); err != nil { if err := ffmpegCmd.Run(); err != nil {
return 0, errors.Wrap(err, "failed to run ffmpeg") return 0, errors.Wrap(err, "failed to run ffmpeg")
} }
// Recalculate the duration of the new file // Recalculate the duration of the new file
c = exec.CommandContext(ctx, "ffprobe", "-v", "error", "-show_entries", "format=duration", "-of", "default=noprint_wrappers=1:nokey=1", tmpFp.Name()) c = exec.CommandContext(ctx, "ffprobe", "-v", "error", "-show_entries", "format=duration", "-of", "default=noprint_wrappers=1:nokey=1", tmpName)
output, err := c.Output() output, err := c.Output()
if err != nil { if err != nil {
return 0, errors.Wrap(err, "failed to get audio duration after ffmpeg") return 0, errors.Wrap(err, "failed to get audio duration after ffmpeg")

View File

@@ -351,6 +351,7 @@ func countAudioTokens(c *gin.Context) (int, error) {
if err != nil { if err != nil {
return 0, errors.WithStack(err) return 0, errors.WithStack(err)
} }
defer reqFp.Close()
tmpFp, err := os.CreateTemp("", "audio-*"+ext) tmpFp, err := os.CreateTemp("", "audio-*"+ext)
if err != nil { if err != nil {