media assets: fix .webm files not including video/audio bit rates in metadata.

Fix .webm files not including the `FFmpeg:VideoBitRate` and `FFmpeg:AudioBitRate`
fields in the media_metadata table. This was because the .webm format
doesn't include the video or audio bit rates in the metadata, and
ffprobe doesn't calculate them either, so we have to calculate them
ourselves by hand.

Fixup for 523d7afdd.
This commit is contained in:
evazion
2022-11-03 21:03:03 -05:00
parent c21146f94d
commit 5f8fefccaa
5 changed files with 115 additions and 18 deletions

Binary file not shown.

View File

@@ -200,18 +200,36 @@ class MediaFileTest < ActiveSupport::TestCase
assert_equal(false, MediaFile.open("test/files/mp4/test-300x300.mp4").has_audio?)
end
should "determine the duration of the video" do
should "determine the metadata for a video with audio" do
file = MediaFile.open("test/files/mp4/test-audio.mp4")
assert_equal(false, file.is_corrupt?)
assert_equal(1.002667, file.duration)
assert_equal(10/1.002667, file.frame_rate)
assert_equal(10, file.frame_count)
assert_equal(10, file.metadata["FFmpeg:FrameCount"])
assert_equal("mp42", file.metadata["FFmpeg:MajorBrand"])
assert_equal("yuv420p", file.metadata["FFmpeg:PixFmt"])
assert_equal("h264", file.metadata["FFmpeg:VideoCodec"])
assert_equal("High", file.metadata["FFmpeg:VideoProfile"])
assert_equal(291624, file.metadata["FFmpeg:VideoBitRate"])
assert_equal("aac", file.metadata["FFmpeg:AudioCodec"])
assert_equal("LC", file.metadata["FFmpeg:AudioProfile"])
assert_equal("stereo", file.metadata["FFmpeg:AudioLayout"])
assert_equal(128002, file.metadata["FFmpeg:AudioBitRate"])
end
should "determine the metadata for a video without audio" do
file = MediaFile.open("test/files/mp4/test-300x300.mp4")
assert_equal(false, file.is_corrupt?)
assert_equal(5.7, file.duration)
assert_equal(1.75, file.frame_rate.round(2))
assert_equal(10, file.frame_count)
assert_equal(10, file.metadata["FFmpeg:FrameCount"])
assert_equal("mp42", file.metadata["FFmpeg:MajorBrand"])
assert_equal("yuv420p", file.metadata["FFmpeg:PixFmt"])
assert_equal("h264", file.metadata["FFmpeg:VideoCodec"])
assert_equal("Constrained Baseline", file.metadata["FFmpeg:VideoProfile"])
assert_equal(25003, file.metadata["FFmpeg:VideoBitRate"])
end
should "determine the pixel format of the video" do
@@ -251,11 +269,32 @@ class MediaFileTest < ActiveSupport::TestCase
end
context "for a webm file" do
should "determine the duration of the video" do
should "determine the metadata for a video with audio" do
file = MediaFile.open("test/files/webm/test-audio.webm")
assert_equal(1.01, file.duration) # 1.01
assert_equal(10/1.01, file.frame_rate)
assert_equal(10, file.frame_count)
assert_equal(10, file.metadata["FFmpeg:FrameCount"])
assert_equal("yuv420p", file.metadata["FFmpeg:PixFmt"])
assert_equal("vp9", file.metadata["FFmpeg:VideoCodec"])
assert_equal("Profile 0", file.metadata["FFmpeg:VideoProfile"])
assert_equal(432546, file.metadata["FFmpeg:VideoBitRate"])
assert_equal("opus", file.metadata["FFmpeg:AudioCodec"])
assert_equal("stereo", file.metadata["FFmpeg:AudioLayout"])
assert_equal(50661, file.metadata["FFmpeg:AudioBitRate"])
end
should "determine the metadata for a video without audio" do
file = MediaFile.open("test/files/webm/test-512x512.webm")
assert_equal(0.48, file.duration)
assert_equal(10/0.48, file.frame_rate)
assert_equal(10, file.frame_count)
assert_equal(10, file.metadata["FFmpeg:FrameCount"])
assert_equal("yuv420p", file.metadata["FFmpeg:PixFmt"])
assert_equal("vp8", file.metadata["FFmpeg:VideoCodec"])
assert_equal("0", file.metadata["FFmpeg:VideoProfile"])
assert_equal(196650, file.metadata["FFmpeg:VideoBitRate"])
end
should "detect supported files" do