Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Discussion] Bottleneck of the project #157

Open
MasterInQuestion opened this issue Apr 18, 2023 · 6 comments
Open

[Discussion] Bottleneck of the project #157

MasterInQuestion opened this issue Apr 18, 2023 · 6 comments

Comments

@MasterInQuestion
Copy link

MasterInQuestion commented Apr 18, 2023

    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
Copy link

GyanD commented Apr 18, 2023

|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
Copy link
Author

MasterInQuestion commented Apr 18, 2023

    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
Copy link
Author

MasterInQuestion commented Apr 30, 2023

    [ 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
Copy link
Author

MasterInQuestion commented Apr 30, 2023

== 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
Copy link

GyanD commented May 2, 2023

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

@MasterInQuestion
Copy link
Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants