add subtitle and thumbnail metadata to video summary
This commit is contained in:
parent
c18aff4c38
commit
7d66f8bcec
|
|
@ -53,11 +53,12 @@ class StreamItemSerializer(serializers.Serializer):
|
|||
"""serialize stream item"""
|
||||
|
||||
index = serializers.IntegerField()
|
||||
codec = serializers.CharField()
|
||||
bitrate = serializers.IntegerField()
|
||||
type = serializers.ChoiceField(choices=["video", "audio"])
|
||||
codec = serializers.CharField(required=False, allow_null=True)
|
||||
bitrate = serializers.IntegerField(required=False)
|
||||
type = serializers.ChoiceField(choices=["video", "audio", "subtitle"])
|
||||
width = serializers.IntegerField(required=False)
|
||||
height = serializers.IntegerField(required=False)
|
||||
language = serializers.CharField(required=False)
|
||||
|
||||
|
||||
class SubtitleItemSerializer(serializers.Serializer):
|
||||
|
|
|
|||
|
|
@ -45,25 +45,37 @@ class MediaStreamExtractor:
|
|||
self._extract_video_metadata(stream)
|
||||
elif codec_type == "audio":
|
||||
self._extract_audio_metadata(stream)
|
||||
elif codec_type == "subtitle":
|
||||
self._extract_subtitle_metadata(stream)
|
||||
else:
|
||||
return
|
||||
|
||||
def _extract_video_metadata(self, stream):
|
||||
"""parse video metadata"""
|
||||
if "bit_rate" not in stream:
|
||||
# is probably thumbnail
|
||||
return
|
||||
|
||||
self.metadata.append(
|
||||
{
|
||||
"type": "video",
|
||||
"index": stream["index"],
|
||||
"codec": stream["codec_name"],
|
||||
"width": stream["width"],
|
||||
"height": stream["height"],
|
||||
"bitrate": int(stream["bit_rate"]),
|
||||
}
|
||||
)
|
||||
if stream["disposition"]["attached_pic"] == 1:
|
||||
self.metadata.append(
|
||||
{
|
||||
"type": "thumbnail",
|
||||
"index": stream["index"],
|
||||
"codec": stream["codec_name"],
|
||||
"width": stream["width"],
|
||||
"height": stream["height"],
|
||||
}
|
||||
)
|
||||
else:
|
||||
self.metadata.append(
|
||||
{
|
||||
"type": "video",
|
||||
"index": stream["index"],
|
||||
"codec": stream["codec_name"],
|
||||
"width": stream["width"],
|
||||
"height": stream["height"],
|
||||
"bitrate": int(stream.get("bit_rate", 0)),
|
||||
"language": stream.get("tags", {}).get(
|
||||
"language", "unknown"
|
||||
),
|
||||
}
|
||||
)
|
||||
|
||||
def _extract_audio_metadata(self, stream):
|
||||
"""extract audio metadata"""
|
||||
|
|
@ -73,6 +85,19 @@ class MediaStreamExtractor:
|
|||
"index": stream["index"],
|
||||
"codec": stream.get("codec_name", "undefined"),
|
||||
"bitrate": int(stream.get("bit_rate", 0)),
|
||||
"language": stream.get("tags", {}).get("language", "unknown"),
|
||||
}
|
||||
)
|
||||
|
||||
def _extract_subtitle_metadata(self, stream):
|
||||
"""extract subtitle metadata"""
|
||||
self.metadata.append(
|
||||
{
|
||||
"type": "subtitle",
|
||||
"index": stream["index"],
|
||||
"codec": stream.get("codec_name", "text"),
|
||||
"bitrate": int(stream.get("bit_rate", 0)),
|
||||
"language": stream.get("tags", {}).get("language", "unknown"),
|
||||
}
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -43,10 +43,11 @@ export type StatsType = {
|
|||
export type StreamType = {
|
||||
type: string;
|
||||
index: number;
|
||||
codec: string;
|
||||
codec?: string;
|
||||
width?: number;
|
||||
height?: number;
|
||||
bitrate: number;
|
||||
bitrate?: number;
|
||||
language?: string;
|
||||
};
|
||||
|
||||
export type Subtitles = {
|
||||
|
|
|
|||
|
|
@ -467,13 +467,23 @@ const Video = () => {
|
|||
video.streams.map(stream => {
|
||||
return (
|
||||
<p key={stream.index}>
|
||||
{capitalizeFirstLetter(stream.type)}: {stream.codec}{' '}
|
||||
{humanFileSize(stream.bitrate, useSiUnits)}/s
|
||||
{capitalizeFirstLetter(stream.type)}: {stream.codec}
|
||||
{stream.bitrate && (
|
||||
<>
|
||||
<span className="space-carrot">|</span>{' '}
|
||||
{`${humanFileSize(stream.bitrate, useSiUnits)}/s`}
|
||||
</>
|
||||
)}
|
||||
{stream.width && (
|
||||
<>
|
||||
<span className="space-carrot">|</span> {stream.width}x{stream.height}
|
||||
</>
|
||||
)}{' '}
|
||||
)}
|
||||
{stream.language && (
|
||||
<>
|
||||
<span className="space-carrot">|</span> {stream.language}
|
||||
</>
|
||||
)}
|
||||
</p>
|
||||
);
|
||||
})}
|
||||
|
|
|
|||
Loading…
Reference in New Issue