richtr / NoSleep.js

Prevent display sleep and enable wake lock in any Android or iOS web browser.
MIT License
2.23k stars 380 forks source link

[Discussion] Bottleneck of the project #157

Open MasterInQuestion opened 1 year ago

MasterInQuestion commented 1 year ago

    After some analysis [ https://github.com/richtr/NoSleep.js/issues/68#issuecomment-1510390259 ], the bottleneck (reliability, performance, etc.) of the project appears much originated from the video used to exploit the WakeLock.     .     To address which, the following has to be determined:     |1| What video (both container and stream) format to use, that should best fit the needs?     |1.1| The format should be supported by as many browsers as possible. [ Only Chromium and Firefox, and mostly mobile: need to be considered. ]     |1.2| Ideally, the decoding should consume as little resource as possible. (least possible arithmetic complexity)     |1.3| Would uncompressed formats work? (as the content doesn't really matter)     |1.4| What's the minimum possible image size? And frame rate? (how long can a single frame be stretched (through time metadata manipulation) to last?)     .     |2| Is the presence of audio stream really necessary?     |2.1| If audio must present, would a single frame audio (duration unmatching the video) just suffice?

    @GyanD, @boardhead,     Would you mind providing some insights? \ \ === Reference info ===

    NoSleep.js @ 2ebb9011f7849d033e0c9250e49b9e2f09dc6bf6 (CE 2020-12-15 23:58:20 UTC): [[ > ffprobe -hide_banner -threads 0 -show_entries "stream=time_base:format=size" -of "flat=h=0" "0.m4v"

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '0.m4v':   Metadata:     major_brand     : M4V     minor_version   : 512     compatible_brands: isomiso2avc1     encoder         : Lavf55.33.100   Duration: 00:00:01.06, start: 0.000000, bitrate: 28 kb/s   Stream #0:0[0x1](und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(progressive), 176x144 [SAR 1:1 DAR 11:9], 8 kb/s, 29.97 fps, 29.97 tbr, 30k tbn (default)     Metadata:       handler_name    : VideoHandler       vendor_id       : [0][0][0][0]   Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz, stereo, fltp, 3 kb/s (default)     Metadata:       handler_name    : SoundHandler       vendor_id       : [0][0][0][0] stream.0.time_base="1/30000" stream.1.time_base="1/48000" format.size="3753"

> ffprobe -hide_banner -threads 0 -show_entries "stream=time_base:format=size" -of "flat=h=0" "0.webm"

Input #0, matroska,webm, from '0.webm':   Metadata:     encoder         : Lavf55.33.100   Duration: 00:00:01.05, start: 0.000000, bitrate: 42 kb/s   Stream #0:0: Video: vp8, yuv420p(progressive), 176x144, SAR 1:1 DAR 11:9, 25 fps, 25 tbr, 1k tbn (default)   Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp (default) stream.0.time_base="1/1000" stream.1.time_base="1/1000" format.size="5577" ]] (same files as @ 7a34e29dc5608193b999ecd1825f421d4a270a64)     .     NoSleep.js @ 7a34e29dc5608193b999ecd1825f421d4a270a64 (CE 2015-04-21 08:11:15 UTC): [[ > ffprobe -hide_banner -threads 0 -show_entries "stream=time_base:format=size" -of "flat=h=0" "0.ogv"

Input #0, ogg, from '0.ogv':   Duration: 00:00:01.05, start: 0.000000, bitrate: 60 kb/s   Stream #0:0: Video: theora, yuv444p, 176x144 [SAR 1:1 DAR 11:9], 25 fps, 25 tbr, 25 tbn     Metadata:       encoder         : Lavf55.33.100   Stream #0:1: Audio: vorbis, 48000 Hz, stereo, fltp, 112 kb/s     Metadata:       encoder         : Lavf55.33.100 stream.0.time_base="1/25" stream.1.time_base="1/48000" format.size="7854" ]]

    NoSleep.js @ 4cc289bea129b0351e6290fba9bdb2ad0bd127da (CE 2015-04-23 13:36:54 UTC): [[ > ffprobe -hide_banner -threads 0 -show_entries "stream=time_base:format=size" -of "flat=h=0" "1.mp4"

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '1.mp4':   Metadata:     major_brand     : isom     minor_version   : 512     compatible_brands: isomiso2mp41     creation_time   : 1970-01-01T00:00:00.000000Z     encoder         : Lavf52.78.3   Duration: N/A, start: 0.000000, bitrate: N/A   Stream #0:0[0x1](und): Video: mpeg4 (Simple Profile) (mp4v / 0x7634706D), yuv420p, 8x8 [SAR 1:1 DAR 1:1], 1k tbn (default)     Metadata:       creation_time   : 1970-01-01T00:00:00.000000Z       handler_name    : VideoHandler       vendor_id       : [0][0][0][0] stream.0.time_base="1/1000" format.size="808"

> ffprobe -hide_banner -threads 0 -show_entries "stream=time_base:format=size" -of "flat=h=0" "1.webm"

Input #0, matroska,webm, from '1.webm':   Metadata:     encoder         : whammy   Duration: 00:00:01.00, start: 0.000000, bitrate: 1 kb/s   Stream #0:0: Video: vp8, yuv420p(progressive), 8x8, SAR 1:1 DAR 1:1, 1k tbr, 1k tbn (default) stream.0.time_base="1/1000" format.size="185"

> ffprobe -hide_banner -threads 0 -show_entries "stream=time_base:format=size" -of "flat=h=0" "1.ogv"

Input #0, ogg, from '1.ogv':   Duration: N/A, start: 0.000000, bitrate: N/A   Stream #0:0: Video: theora, yuv420p, 8x8 [SAR 1:1 DAR 1:1], 1k tbr, 1k tbn     Metadata:       encoder         : Lavf52.78.3 stream.0.time_base="1/1000" format.size="3402" ]]     The very WebM was added back @ 016580ddd200ff6e7a12f0904c314e3ee2c9bae1 (CE 2018-12-04 07:12:10 UTC); also used by StayAwake.js.     The MP4 may not play normally in the browser.

    NoSleep.js @ 83edf7779fa1b4a87b67587da5d8250ca14c40f9 (CE 2017-07-04 00:31:09 UTC): [[ > ffprobe -hide_banner -threads 0 -show_entries "stream=time_base:format=size" -of "flat=h=0" "2.mp4"

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '2.mp4':   Metadata:     major_brand     : mp42     minor_version   : 512     compatible_brands: isomiso2avc1mp41     creation_time   : 2017-07-03T23:23:11.000000Z     encoder         : HandBrake 0.10.2 2015061100   Duration: 00:00:02.04, start: 0.000000, bitrate: 18 kb/s   Stream #0:0[0x1](und): Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709, progressive), 202x202, 6 kb/s, 30 fps, 30 tbr, 90k tbn (default)     Metadata:       creation_time   : 2017-07-03T23:23:11.000000Z       handler_name    : VideoHandler       vendor_id       : [0][0][0][0]   Stream #0:1[0x2](und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 2 kb/s (default)     Metadata:       creation_time   : 2017-07-03T23:23:11.000000Z       handler_name    : Stereo       vendor_id       : [0][0][0][0] stream.0.time_base="1/90000" stream.1.time_base="1/44100" format.size="4841" ]] (also used by StayAwake.js)

    mil-no-sleep: [[ > ffprobe -hide_banner -threads 0 -show_entries "stream=time_base:format=size" -of "flat=h=0" "mil-no-sleep.mp4"

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'mil-no-sleep.mp4':   Metadata:     major_brand     : isom     minor_version   : 512     compatible_brands: isomiso2avc1mp41     encoder         : Lavf58.42.101   Duration: 00:00:03.00, start: 0.000000, bitrate: 7 kb/s   Stream #0:0[0x1](und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p(progressive), 20x20, 5 kb/s, 23.98 fps, 23.98 tbr, 24k tbn (default)     Metadata:       handler_name    : L-SMASH Video Handler       vendor_id       : [0][0][0][0] stream.0.time_base="1/24000" format.size="3000" ]] (also used by lovelace-wallpanel before)

    lovelace-wallpanel @ 69ec1c29531665ca266c279b8e3dd82abb69d94e (CE 2023-03-31 18:11:41 UTC): [[ > ffprobe -hide_banner -threads 0 -show_entries "stream=time_base:format=size" -of "flat=h=0" "lovelace-wallpanel.mp4"

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'lovelace-wallpanel.mp4':   Metadata:     major_brand     : isom     minor_version   : 512     compatible_brands: isomiso2avc1mp41     encoder         : Lavf59.27.100   Duration: 00:00:10.00, start: 0.000000, bitrate: 1 kb/s   Stream #0:0[0x1](und): Video: h264 (High) (avc1 / 0x31637661), yuv420p(progressive), 8x8 [SAR 1:1 DAR 1:1], 0 kb/s, 1 fps, 1 tbr, 16384 tbn (default)     Metadata:       handler_name    : VideoHandler       vendor_id       : [0][0][0][0]       encoder         : Lavc59.37.100 libx264 stream.0.time_base="1/16384" format.size="1838" ]]

GyanD commented 1 year ago
|1.1| The format should be supported by as many browsers as possible.

H.264 in MP4 is the closest.

|1.2| Ideally, the decoding should consume as little resource as possible. (least possible arithmetic complexity)

Small frame size, baseline profile.

|1.3| Would uncompressed formats work? (as the content doesn't really matter)

Doubt it.

|1.4| What's the minimum possible image size? And frame rate? (how long can a single frame be stretched (through time metadata manipulation) to last?)

In practice, 16x16. Anything lower will be padded and crop signaled to the decoder. Frame duration can be arbitrarily set in the format. But players cache ahead, so I would stick to >= 1 fps.

|2| Is the presence of audio stream really necessary?

Think not. But since the purpose here, iirc, is to avert display sleep, I would think the answer depends on the OS, whether it checks for video foreground focus and audio presence..etc

Try,

ffmpeg -t 30 -f lavfi -i color=c=black:s=16x16:r=1 -c:v libx264 -crf 51 -bf 0 -pix_fmt yuv420p -profile:v baseline -movflags +faststart wakelock.mp4

MasterInQuestion commented 1 year ago

    Thanks for your support.

    I'm making a wild guess:     Would embedding an uncompressed 1x1 grayscale GIF as video stream in MKV work?     .     Compatibility wise, browsers should try their best to play the video. (MKV is reportedly to be playable)

    ----

    [ Quote GyanD @ CE 2023-04-18 07:42:50 UTC: https://github.com/richtr/NoSleep.js/issues/157#issuecomment-1512607662     [ Quote MasterInQuestion @ CE 2023-04-18 00:18:28 UTC: https://github.com/richtr/NoSleep.js/issues/157#issue-1672149614     |1.4| What's the minimum possible image size? ] <^>    In practice, 16x16. Anything lower will be padded and crop signaled to the decoder. ] <^>    Is this specific to H.264? (which may not apply to other encodings)     And would you mind explaining what's going on with the above 8x8 videos?

    [ Quote (previous):     Frame duration can be arbitrarily set in the format. <&>But players cache ahead</&>, so I would stick to >= 1 fps. ] <^>    Would you mind explaining it in a bit more details? (cache ahead in single frame video?)

    [ Quote (previous):     `ffmpeg ... -pix_fmt yuv420p` ] <^>    When YUV pixel format used, it's probably desirable to set the color to yuv( 0, 0, 0 ). (potentially reduced computing complexity)     Also, would YUV 4:4:4 give better performance in this case? (less complexity)

    [ Quote MasterInQuestion @ CE 2023-04-18 00:18:28 UTC: https://github.com/richtr/NoSleep.js/issues/157#issue-1672149614     |2| Is the presence of audio stream really necessary? ] <.>    This one is related with the comments:     |*| https://github.com/richtr/NoSleep.js/issues/135#issuecomment-929079462     |*| https://github.com/richtr/NoSleep.js/issues/78#issuecomment-901236335     (while from my observation many implementations didn't include an audio stream: in particular the recent lovelace-wallpanel one)

    [ Quote (previous):     |1.3| Would uncompressed formats work? ] <.>    I was considering uncompressed raw RGB 8bpc (bit per component) video in AVI container.

    ----

    A sidenote for using `ffmpeg` to encode:     These parameters should be passed in addition: `-flags +bitexact -fflags +bitexact -map_metadata -1` (to remove unnecessary metadata, and improve consistency)     `-map_chapters -1` should be also added when handling certain formats. (primarily MP4, MKV)

    ----

    [ Quote MasterInQuestion @ CE 2023-04-18 14:02:44 UTC: https://github.com/richtr/NoSleep.js/issues/157#issuecomment-1512895724     [ Quote GyanD @ CE 2023-04-18 07:42:50 UTC: https://github.com/richtr/NoSleep.js/issues/157#issuecomment-1512607662     In practice, 16x16. Anything lower will be padded and crop signaled to the decoder. ] <^>    Is this specific to H.264? (which may not apply to other encodings) ] <.>    16x16 is the coding unit (macroblock, approximately in general) 's size of H.264 (and many other typically).     In VP9 it's 64x64 and in H.265 it's variable-sized (any of 64x64, 32x32, 16x16). [ In AV1 it's 128x128 or 64x64. ]     .     Note this doesn't mean smaller frame sizes give no performance benefit.     Though the encoding/decoding operation is performed at larger scale: the decoded output can be smaller.

    [ Quote MasterInQuestion @ CE 2023-04-18 00:18:28 UTC: https://github.com/richtr/NoSleep.js/issues/157#issue-1672149614     |1.4| What's the minimum possible image size? ] <^>    1x1 or 2x2, but decoders/encoders may impose random limitations. [1]     Realistically, 128x96 [2] seems to reliably work. [ [1]     In particular hardware ones.     Some hardware decoders' limit on the input frame size:     |*| Nvidia Pascal GPU: 48x48 [ Some interfaces may have no limit on the height. ]     |*| HiSilicon Kirin 950 SoC: 82x2     |*| Leadcore LC1860 SoC: 32x32     |*| MediaTek MT6582 SoC: 50x34 <.>    Sizes yield the same total pixel number may also work. (not guaranteed)     The limit may be shared across supported codecs, may not. ] [2] Which is also expressly stated since the initial draft of H.264 specification that would unlikely be ignored by common decoder implementations.

MasterInQuestion commented 1 year ago

    [ Quote MasterInQuestion @ CE 2023-04-18 14:02:44 UTC: https://github.com/richtr/NoSleep.js/issues/157#issuecomment-1512895724     Would embedding an uncompressed 1x1 grayscale GIF as video stream in MKV work? ] <^>    Unlikely, ever.     [ Quote (previous):     Compatibility wise, browsers should try their best to play the video. ] <^>    Though both Firefox and Chrome internally use FFmpeg to handle medias [1]:     Browsers for security considerations may choose to only support a limited set of medias to reduce attack surface. [ [1]     As demonstrated by the MediaError messages generated by the below test snippet: [[     code: 4, message: MEDIA_ELEMENT_ERROR: Unable to load URL due to content type     code: 4, message: DEMUXER_ERROR_COULD_NOT_OPEN: FFmpegDemuxer: open context failed     code: 4, message: DEMUXER_ERROR_NO_SUPPORTED_STREAMS: FFmpegDemuxer: failed creating video stream ]]     Side note:     The indicated MIME type doesn't seem to be used in any meaningful manner.     It appears, only used for determining whether the media playback would be attempted at all.     (stating "video/mp4", "video/webm" (maybe just "video") seems to work all the way; "codecs" parameter seems to be ignored)

    See also:     https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types     https://developer.mozilla.org/en-US/docs/Web/Media/Formats/codecs_parameter ]

    [ Quote (previous):     (MKV is reportedly to be playable) ] <^>    Indeed playable, but with limitations.     Chrome seems to accept MKV with any supported video [2], audio stream (supported by WebM, MP4, Ogg).     Firefox only accepts (as of yet) MKV with medias supported by WebM. [2] Still image type excluded. (e.g. JPEG)

    References:     https://searchfox.org/mozilla-central/rev/3563da061ca2b32f7f77f5f68088dbf9b5332a9f/dom/media/webm/WebMDemuxer.cpp#295-308     https://searchfox.org/mozilla-central/rev/3563da061ca2b32f7f77f5f68088dbf9b5332a9f/third_party/rust/mp4parse_capi/src/lib.rs#965-979

    ----

    Test snippet:     javascript: void ( document.body || ( document.body = document.getElementsByTagName( "body" )[0] ) ).insertAdjacentHTML( "beforeend", "<video playsinline controls style='width: 100%; height: 48px; z-index: 2147483647; position: fixed; top: 0' src='' onerror='prompt( \"MediaError\", ( \"code: \" + this.error.code + \", message: \" + this.error.message ) );' onloadstart='this._0 = true; this._f = function ( x0, x1, x2 ) { document.documentElement.style.backgroundColor = x0; document.body.style.opacity = x1; ( x2 ) && ( x2._0 = true ); };' onplay='console.log( ( this._ = new Date() ).toISOString() ); ( this._0 ) && ( this._0 = false, setTimeout( this._f, 100, document.documentElement.style.backgroundColor, document.body.style.opacity, this ) ); this._f( \"#F0F\", 0.6 );' onended='prompt( \"Video ended.\\nSeconds elapsed since last \\\"play\\\":\", ( (new Date() - this._) / 1000 ) );'></video>" );

    ----

    ffmpeg -y -nostdin -nostats -v debug -f lavfi -i "nullsrc=128x96:r=1/1073741" -max_interleave_delta 0 -vsync 0 -frames 3 -video_track_timescale 1 -c:v libx264 -profile:v baseline -preset placebo -crf 51 -x264-params "ref=2:no-mixed-refs=1:no-deblock=1" -flags +bitexact -fflags +bitexact -map_metadata -1 -map_chapters -1 -movflags faststart -use_editlist 0 -write_tmcd 0 -write_btrt 0 -empty_hdlr_name 1 ".h264_420_128x96.an.mp4"     ffmpeg -y -nostdin -nostats -v debug -f lavfi -i "anullsrc=mono:48000:1" -f lavfi -i "nullsrc=128x96:r=1/1073741,geq=0:0:0" -max_interleave_delta 0 -vsync 0 -frames 2 -video_track_timescale 1 -c:v libx264 -profile:v baseline -preset placebo -crf 51 -x264-params "ref=1:no-deblock=1" -c:a aac -aac_coder fast -flags +bitexact -fflags +bitexact -map_metadata -1 -map_chapters -1 -movflags faststart -use_editlist 0 -write_tmcd 0 -write_btrt 0 -empty_hdlr_name 1 ".h264_420_128x96.mp4"     ffmpeg -y -nostdin -nostats -v debug -f lavfi -i "anullsrc=mono:48000:1" -f lavfi -i "nullsrc=128x96:r=1/2147483645" -max_interleave_delta 0 -vsync 0 -frames 2 -video_track_timescale 1 -c:v libx264 -profile:v baseline -preset placebo -crf 51 -x264-params "ref=1:no-deblock=1" -c:a aac -aac_coder fast -flags +bitexact -fflags +bitexact -map_metadata -1 -map_chapters -1 -movflags faststart -use_editlist 0 -write_tmcd 0 -write_btrt 0 -empty_hdlr_name 1 "h264_420_128x96.mp4"     ffmpeg -y -nostdin -nostats -v debug -f lavfi -i "anullsrc=mono:48000:1" -f lavfi -i "nullsrc=1x2:r=1/2147483647,format=yuv444p" -max_interleave_delta 0 -vsync 0 -frames 2 -c:v libtheora -q:v 0 -g 1 -c:a libopus -frame_duration 2.5 -flags +bitexact -fflags +bitexact -map_metadata -1 -map_chapters -1 -page_duration 0 "theora_444_1x2.ogv"     ffmpeg -y -nostdin -nostats -v debug -f lavfi -i "anullsrc=mono:48000:1" -f lavfi -i "nullsrc=128x96:r=1/1000000000" -max_interleave_delta 0 -vsync 0 -frames 2 -c:v libvpx -deadline best -c:a libopus -frame_duration 2.5 -flags +bitexact -fflags +bitexact -map_metadata -1 -map_chapters -1 -cues_to_front 1 -write_crc32 0 -default_mode 0 -cluster_time_limit 9223372036854775807 "vp8_420_128x96.webm"     ffmpeg -y -nostdin -nostats -v debug -f lavfi -i "anullsrc=mono:48000:1" -f lavfi -i "nullsrc=2x2:r=1/1000000000" -max_interleave_delta 0 -vsync 0 -frames 2 -c:v libvpx-vp9 -deadline realtime -lossless 1 -c:a libopus -frame_duration 2.5 -flags +bitexact -fflags +bitexact -map_metadata -1 -map_chapters -1 -cues_to_front 1 -write_crc32 0 -default_mode 0 -cluster_time_limit 9223372036854775807 "vp9_420_2x2.webm"     ffmpeg -y -nostdin -nostats -v debug -f lavfi -i "anullsrc=mono:48000:1" -f lavfi -i "color=#000000:1x1:r=1/1000000000,format=rgb24" -max_interleave_delta 0 -vsync 0 -frames 2 -c:v libvpx-vp9 -deadline realtime -lossless 1 -c:a libopus -frame_duration 2.5 -flags +bitexact -fflags +bitexact -map_metadata -1 -map_chapters -1 -cues_to_front 1 -write_crc32 0 -default_mode 0 -cluster_time_limit 9223372036854775807 "vp9_rgb_1x1.webm"

    @boardhead, any idea on the metadata reduction? \ \ === References ===

[[

--- .h264_420_128x96.an.mp4
+++ mathiasbynens/small/Mpeg4.mp4

 ---- MOV-FileType:Video ----
 MajorBrand                      : MP4 Base Media v1 [IS0 14496-12:2003]
 MinorVersion                    : 0.2.0
 CompatibleBrands                : isom, iso2, avc1, mp41
 ---- MOV:Video ----
 Free                            : (Binary data 0 bytes, use -b option to extract)
-MediaDataSize                   : 696
-MediaDataOffset                 : 771
-MediaData                       : (Binary data 696 bytes, use -b option to extract)
+MediaDataSize                   : 0
+MediaDataOffset                 : 48
+MediaData                       : (Binary data 0 bytes, use -b option to extract)
 ---- MOV-Movie-MovieHeader:Video ----
 MovieHeaderVersion              : 0
 TimeScale                       : 1000
-Duration                        : 34 days 18:10:00
+Duration                        : 0 s
 PreferredRate                   : 1
 PreferredVolume                 : 100.00%
 MatrixStructure                 : 1 0 0 0 1 0 0 0 1
 PreviewTime                     : 0 s
 PreviewDuration                 : 0 s
 PosterTime                      : 0 s
 SelectionTime                   : 0 s
 SelectionDuration               : 0 s
 CurrentTime                     : 0 s
 NextTrackID                     : 2
 ---- MOV-Movie-MovieHeader:Time ----
 CreateDate                      : 0000:00:00 00:00:00
 ModifyDate                      : 0000:00:00 00:00:00
----- MOV-Movie-Track-TrackHeader:Video ----
-TrackHeaderVersion              : 1
-TrackID                         : 1
-TrackDuration                   : 34 days 18:10:00
-TrackLayer                      : 0
-TrackVolume                     : 0.00%
-MatrixStructure                 : 1 0 0 0 1 0 0 0 1
-ImageWidth                      : 128
-ImageHeight                     : 96
----- MOV-Movie-Track-TrackHeader:Time ----
-TrackCreateDate                 : 0000:00:00 00:00:00
-TrackModifyDate                 : 0000:00:00 00:00:00
----- MOV-Movie-Track-Media-MediaHeader:Video ----
-MediaHeaderVersion              : 0
-MediaTimeScale                  : 1
-MediaDuration                   : 34 days 18:10:00
-MediaLanguageCode               : und
----- MOV-Movie-Track-Media-MediaHeader:Time ----
-MediaCreateDate                 : 0000:00:00 00:00:00
-MediaModifyDate                 : 0000:00:00 00:00:00
----- MOV-Movie-Track-Media-Handler:Video ----
-HandlerType                     : Video Track
----- MOV-Movie-Track-Media-MediaInfo-VideoHeader:Video ----
-GraphicsMode                    : srcCopy
-OpColor                         : 0 0 0
----- MOV-Movie-Track-Media-MediaInfo-SampleTable-VideoSampleDesc:Image ----
-CompressorID                    : avc1
-SourceImageWidth                : 128
-SourceImageHeight               : 96
-XResolution                     : 72
-YResolution                     : 72
-CompressorName                  : Lavc libx264
-BitDepth                        : 24
-AVCConfiguration                : (Binary data 39 bytes, use -b option to extract)
-PixelAspectRatio                : 1:1
----- MOV-Movie-Track-Media-MediaInfo-SampleTable:Video ----
-VideoFrameRate                  : 0
-SyncSampleTable                 : (Binary data 12 bytes, use -b option to extract)
-SampleToChunk                   : (Binary data 20 bytes, use -b option to extract)
-SampleSizes                     : (Binary data 24 bytes, use -b option to extract)
-ChunkOffset                     : (Binary data 12 bytes, use -b option to extract)
 ---- MOV-Movie-UserData-Meta-Handler:Video ----
 HandlerType                     : Metadata
 HandlerVendorID                 : Apple
+---- MOV-Movie-UserData-Meta-ItemList:Audio ----
+Encoder                         : Lavf57.41.100

]]

[[

--- vp8_420_8x8.an.webm
+++ mathiasbynens/small/webm.webm

 ---- MKV:Video ----
 EBMLVersion                     : 1
 EBMLReadVersion                 : 1
 EBMLMaxIDLength                 : 4
 EBMLMaxSizeLength               : 8
 DocType                         : webm
 DocTypeVersion                  : 2
 DocTypeReadVersion              : 2
-SeekID                          : (Binary data 4 bytes, use -b option to extract)
-SeekPosition                    : 161
-SeekID                          : (Binary data 4 bytes, use -b option to extract)
-SeekPosition                    : 198
-SeekID                          : (Binary data 4 bytes, use -b option to extract)
-SeekPosition                    : 265
-SeekID                          : (Binary data 4 bytes, use -b option to extract)
-SeekPosition                    : 351
 TimecodeScale                   : 1 ms
-MuxingApp                       : Lavf
-WritingApp                      : Lavf
+MuxingApp                       : whammy
+WritingApp                      : whammy
 Duration                        : 1.00 s
 TrackNumber                     : 1
-TrackUID                        :
-TagTrackUID                     :
+TagTrackUID                     : 01
 TrackLacing                     : No
 TrackLanguage                   : und
 CodecID                         : V_VP8
+CodecName                       : VP8
 TrackType                       : Video
-VideoFrameRate                  : 1
 ImageWidth                      : 8
 ImageHeight                     : 8
-VideoScanType                   : Unknown (2)
-Encoder                         : Lavc libvpx
-Duration                        : 00:00:01.000000000
 TimeCode                        : 0 s
-CueTime                         : 0 s
-CueTrack                        : 1
-CueClusterPosition              : 373
-Matroska_0x0070                 : .

]]

MasterInQuestion commented 1 year ago

== Off-Topic ==

    @GyanD, I also noticed several problems of FFmpeg during the testing.     While I haven't yet registered for "trac.ffmpeg.org".

    Please help forwarding:     |*| "-frames" option appears not working properly.     |*| Cluster creating of Matroska appears to be misbehaving.     |*| x264's output contains information that violates "bitexact". (contains x264's version)     |*| The parsed input time base seems to be wrong.     |*| Not passing "-vsync" in this case seems to cause serious trouble.     |*| "-cutoff" option of libopus described in the documentation is misleading: 0 also implied 20000 (encoder's limit). [ #10343 ]

GyanD commented 1 year ago

You are going to have to provide specific info for each of your issues. And this is best done at the bug tracker.

MasterInQuestion commented 1 year ago

    I'll setup an account when I have the time.     Regardless, the related info has been all included in the post.