media assets: don't round volume levels.

At first we rounded loudness values to 4 decimal places to make them
easier to compare. This meant the lowest level was 0.0001, or -80 dB,
but it's possible for volume levels to go even lower than that.
This commit is contained in:
evazion
2022-11-05 00:29:44 -05:00
parent e005520ad8
commit 4a241ac6b5
2 changed files with 15 additions and 15 deletions

View File

@@ -155,7 +155,7 @@ class FFmpeg
# have an audio track. If the silence percentage is 100%, then the audio track is totally silent.
def silence_percentage
return nil if !has_audio? || duration.to_f == 0.0
(silence_duration.to_f / duration).clamp(0.0, 1.0).round(4)
(silence_duration.to_f / duration).clamp(0.0, 1.0)
end
# The average loudness of the audio track, as a percentage of max volume. 0% is silent and 100% is max volume.
@@ -166,7 +166,7 @@ class FFmpeg
# @return [Float, nil] The average loudness as a percent, or nil if the file doesn't have an audio track.
# @see https://en.wikipedia.org/wiki/EBU_R_128
def average_loudness
10.pow(average_loudness_lufs / 20.0).round(4) if average_loudness_lufs.present?
10.pow(average_loudness_lufs / 20.0) if average_loudness_lufs.present?
end
# The average loudness of the audio track, in LUFS units. -70.0 is silent and 0.0 is max volume.
@@ -203,7 +203,7 @@ class FFmpeg
# @return [Float, nil] The peak loudness in dBFS, or nil if the file doesn't have an audio track.
# @see https://en.wikipedia.org/wiki/EBU_R_128
def peak_loudness
10.pow(peak_loudness_dbfs / 20.0).round(4) if peak_loudness_dbfs.present?
10.pow(peak_loudness_dbfs / 20.0) if peak_loudness_dbfs.present?
end
# The peak loudness of the audio track, in dBFS (decibels referenced to full scale). 0.0 is 100%

View File

@@ -216,10 +216,10 @@ class MediaFileTest < ActiveSupport::TestCase
assert_equal("LC", file.metadata["FFmpeg:AudioProfile"])
assert_equal("stereo", file.metadata["FFmpeg:AudioLayout"])
assert_equal(128002, file.metadata["FFmpeg:AudioBitRate"])
assert_equal(0.1318, file.metadata["FFmpeg:AudioPeakLoudness"])
assert_equal(0.0193, file.metadata["FFmpeg:AudioAverageLoudness"])
assert_equal(0.1318, file.metadata["FFmpeg:AudioPeakLoudness"].round(4))
assert_equal(0.0193, file.metadata["FFmpeg:AudioAverageLoudness"].round(4))
assert_equal(0, file.metadata["FFmpeg:AudioLoudnessRange"])
assert_equal(0.7562, file.metadata["FFmpeg:AudioSilencePercentage"])
assert_equal(0.7562, file.metadata["FFmpeg:AudioSilencePercentage"].round(4))
end
should "determine the metadata for a video with silent audio" do
@@ -239,10 +239,10 @@ class MediaFileTest < ActiveSupport::TestCase
assert_equal("LC", file.metadata["FFmpeg:AudioProfile"])
assert_equal("stereo", file.metadata["FFmpeg:AudioLayout"])
assert_equal(2100, file.metadata["FFmpeg:AudioBitRate"])
assert_equal(0, file.metadata["FFmpeg:AudioPeakLoudness"])
assert_equal(0.0003, file.metadata["FFmpeg:AudioAverageLoudness"])
assert_equal(0, file.metadata["FFmpeg:AudioPeakLoudness"].round(4))
assert_equal(0.0003, file.metadata["FFmpeg:AudioAverageLoudness"].round(4))
assert_equal(0, file.metadata["FFmpeg:AudioLoudnessRange"])
assert_equal(0.9999, file.metadata["FFmpeg:AudioSilencePercentage"])
assert_equal(0.9999, file.metadata["FFmpeg:AudioSilencePercentage"].round(4))
end
should "determine the metadata for a video without audio" do
@@ -310,10 +310,10 @@ class MediaFileTest < ActiveSupport::TestCase
assert_equal("opus", file.metadata["FFmpeg:AudioCodec"])
assert_equal("stereo", file.metadata["FFmpeg:AudioLayout"])
assert_equal(50661, file.metadata["FFmpeg:AudioBitRate"])
assert_equal(0.1274, file.metadata["FFmpeg:AudioPeakLoudness"])
assert_equal(0.0186, file.metadata["FFmpeg:AudioAverageLoudness"])
assert_equal(0.1274, file.metadata["FFmpeg:AudioPeakLoudness"].round(4))
assert_equal(0.0186, file.metadata["FFmpeg:AudioAverageLoudness"].round(4))
assert_equal(0, file.metadata["FFmpeg:AudioLoudnessRange"])
assert_equal(0.7506, file.metadata["FFmpeg:AudioSilencePercentage"])
assert_equal(0.7506, file.metadata["FFmpeg:AudioSilencePercentage"].round(4))
end
should "determine the metadata for a video with silent audio" do
@@ -330,10 +330,10 @@ class MediaFileTest < ActiveSupport::TestCase
assert_equal("opus", file.metadata["FFmpeg:AudioCodec"])
assert_equal("stereo", file.metadata["FFmpeg:AudioLayout"])
assert_equal(1197, file.metadata["FFmpeg:AudioBitRate"])
assert_equal(0, file.metadata["FFmpeg:AudioPeakLoudness"])
assert_equal(0.0003, file.metadata["FFmpeg:AudioAverageLoudness"])
assert_equal(0, file.metadata["FFmpeg:AudioPeakLoudness"].round(4))
assert_equal(0.0003, file.metadata["FFmpeg:AudioAverageLoudness"].round(4))
assert_equal(0, file.metadata["FFmpeg:AudioLoudnessRange"])
assert_equal(0.985, file.metadata["FFmpeg:AudioSilencePercentage"])
assert_equal(0.985, file.metadata["FFmpeg:AudioSilencePercentage"].round(4))
end
should "determine the metadata for a video without audio" do