-
Star
(204)
You must be signed in to star a gist -
Fork
(33)
You must be signed in to fork a gist
-
-
Save nrk/2286511 to your computer and use it in GitHub Desktop.
ffprobe -v quiet -print_format json -show_format -show_streams "lolwut.mp4" > "lolwut.mp4.json" |
{ | |
"streams": [ | |
{ | |
"index": 0, | |
"codec_name": "h264", | |
"codec_long_name": "H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10", | |
"codec_type": "video", | |
"codec_time_base": "1001/48000", | |
"codec_tag_string": "avc1", | |
"codec_tag": "0x31637661", | |
"width": 1280, | |
"height": 720, | |
"has_b_frames": 0, | |
"pix_fmt": "yuv420p", | |
"level": 31, | |
"is_avc": "1", | |
"nal_length_size": "4", | |
"r_frame_rate": "35029/1461", | |
"avg_frame_rate": "35029/1461", | |
"time_base": "1/35029", | |
"start_time": "0.000000", | |
"duration": "1239.195267", | |
"bit_rate": "1782423", | |
"nb_frames": "29711", | |
"tags": { | |
"creation_time": "1970-01-01 00:00:00", | |
"language": "und", | |
"handler_name": "VideoHandler" | |
} | |
}, | |
{ | |
"index": 1, | |
"codec_name": "aac", | |
"codec_long_name": "Advanced Audio Coding", | |
"codec_type": "audio", | |
"codec_time_base": "1/48000", | |
"codec_tag_string": "mp4a", | |
"codec_tag": "0x6134706d", | |
"sample_fmt": "s16", | |
"sample_rate": "48000", | |
"channels": 2, | |
"bits_per_sample": 0, | |
"r_frame_rate": "0/0", | |
"avg_frame_rate": "0/0", | |
"time_base": "1/48000", | |
"start_time": "0.000000", | |
"duration": "1239.059396", | |
"bit_rate": "127966", | |
"nb_frames": "58081", | |
"tags": { | |
"creation_time": "2012-04-01 15:42:28", | |
"language": "jpn", | |
"handler_name": "GPAC ISO Audio Handler" | |
} | |
} | |
], | |
"format": { | |
"filename": "lolwut.mp4", | |
"nb_streams": 2, | |
"format_name": "mov,mp4,m4a,3gp,3g2,mj2", | |
"format_long_name": "QuickTime/MPEG-4/Motion JPEG 2000 format", | |
"start_time": "0.000000", | |
"duration": "1239.195000", | |
"size": "296323860", | |
"bit_rate": "1913008", | |
"tags": { | |
"major_brand": "isom", | |
"minor_version": "1", | |
"compatible_brands": "isom", | |
"creation_time": "2012-04-01 15:42:24" | |
} | |
} | |
} |
Hello.
Great list! However, does anyone know how to find the duration of stream (HLS or MPEG-DASH) segments?
@quintanaplaca I believe that information is in the .m3u8
file's #EXTINF
tags, and not the segment blob (while a segment blob will have a duration, I think (though am uncertain) that clients will prefer timing data from the m3u8
file as that's more canonical.... or something. YMMV. IANAL. Etc.
To quote Apple: https://developer.apple.com/documentation/http_live_streaming/example_playlists_for_http_live_streaming/video_on_demand_playlist_construction (emphasis mine)
#EXTINF
: A record marker that describes the media file identified by the URL that follows it. Each media file URL must be preceded by an EXTINF tag. This tag contains a duration attribute that's an integer or floating-point number in decimal positional notation that specifies the duration of the media segment in seconds. This value must be less than or equal to the target duration.
@Jehoel, thank you for your reply. Really, you are right. I would like a way to analyze HLS and MPEG-DASH stream with FFmpeg (the segmentSize, segmentDuration) and check its integrity.
is there a way to grab these informations using one of library provided by ffmpeg using C?
If anyone wants it, here's my quick-and-dirty
Newtonsoft.Json
-compatible C# class for ffprobe's-print_format json -show_format -show_streams
output:Usage: If you've got
ffprobe
's output in aString ffprobeJsonOutput
then just doFFProbeJsonOutput? parsedOutput = JsonConvert.DeserializeObject<FFProbeJsonOutput>( ffprobeJsonOutput );
.Almost every member is marked nullable because I wasn't sure which JSON properties FFprobe will always return for all formats/codecs.