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:
@@ -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%
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user