Kingson
Kingson

Reputation: 43

How can I get video bitrate with javascript

I want to get the bitrate of video that uploader, because the backend need it.

var video = document.createElement('video');
video.preload = 'metadata';
video.src = URL.createObjectURL(document.getElementById('fileUp').files[0]);
window.URL.revokeObjectURL(video.src);
console.log(video.bitrate);

Upvotes: 4

Views: 3540

Answers (1)

Reda Bourial
Reda Bourial

Reputation: 866

You can get the video duration then simply divide the file size by it to get an approximation (subtitles, audio and metadata would also be included in this value), as far as i know there is no standard api for getting the bitrate directly.

Example (credits https://stackoverflow.com/a/67899188/6072029 ) :

<div>
    <script>
        const getVideoInfos = (file) =>
            new Promise((resolve, reject) => {
                const reader = new FileReader();
                reader.onload = () => {
                    const media = new Audio(reader.result);
                    media.onloadedmetadata = () => resolve({
                        duration: media.duration,
                        file_size: file.size,
                        bitrate: 8*file.size / media.duration,
                    });
                };
                reader.readAsDataURL(file);
                reader.onerror = (error) => reject(error);
            });

        const handleChange = async (e) => {
            const infos = await getVideoInfos(e.target.files[0]);
            document.querySelector("#infos").innerText = `Infos : ${JSON.stringify(infos, null, 4)}`;
        };


    </script>
    <input type="file" onchange="handleChange(event)" />
    <p id="infos">infos: </p>
</div>

Upvotes: 6

Related Questions