[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7C0YR155XAS997JTWDWVN2C":3,"skill-same:01M7C0YR155XAS997JTWDWVN2C":45},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":30,"install":31,"resources":44},"01M7C0YR155XAS997JTWDWVN2C","ffmpeg-media-info",null,"Analyze media file properties - duration, resolution, bitrate, codecs, and stream information","linyouxue\u002Fskill-repair-benchmark","linyouxue","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F216151464?v=4","01M7BJEVCXKD74KH6FG9CBVSQB","林宥学","01M7BJEVE02NP217V93BKZFC0J",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fevaluation\u002Fresults\u002FSkillOpt-adapted-gpt52-n3L4R2-v25\u002Ftasks\u002Fmultilingual-video-dubbing\u002Frepaired_skill\u002Fffmpeg-media-info\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: ffmpeg-media-info\ndescription: Analyze media file properties - duration, resolution, bitrate, codecs, and stream information\n---\n\n# FFmpeg Media Info Skill\n\nExtract and analyze media file metadata using ffprobe and ffmpeg.\n\n## When to Use\n\n- Get video\u002Faudio file properties\n- Check codec information\n- Verify resolution and bitrate\n- Analyze stream details\n- Debug media file issues\n\n## Basic Info Commands\n\n```bash\n# Show all file info\nffmpeg -i input.mp4\n\n# JSON format (detailed)\nffprobe -v quiet -print_format json -show_format -show_streams input.mp4\n\n# Simple format\nffprobe -v quiet -print_format json -show_format input.mp4\n```\n\n## Duration\n\n```bash\n# Get duration in seconds\nffprobe -v error -show_entries format=duration \\\n  -of default=noprint_wrappers=1:nokey=1 input.mp4\n\n# Duration with timestamp format\nffprobe -v error -show_entries format=duration \\\n  -of default=noprint_wrappers=1:nokey=1 -sexagesimal input.mp4\n```\n\n## Resolution\n\n```bash\n# Get video resolution\nffprobe -v error -select_streams v:0 \\\n  -show_entries stream=width,height \\\n  -of csv=s=x:p=0 input.mp4\n\n# Get resolution as JSON\nffprobe -v error -select_streams v:0 \\\n  -show_entries stream=width,height \\\n  -of json input.mp4\n```\n\n## Bitrate\n\n```bash\n# Get overall bitrate\nffprobe -v error -show_entries format=bit_rate \\\n  -of default=noprint_wrappers=1:nokey=1 input.mp4\n\n# Get video bitrate\nffprobe -v error -select_streams v:0 \\\n  -show_entries stream=bit_rate \\\n  -of default=noprint_wrappers=1:nokey=1 input.mp4\n```\n\n## Codec Information\n\n```bash\n# Video codec\nffprobe -v error -select_streams v:0 \\\n  -show_entries stream=codec_name,codec_long_name \\\n  -of default=noprint_wrappers=1 input.mp4\n\n# Audio codec\nffprobe -v error -select_streams a:0 \\\n  -show_entries stream=codec_name,codec_long_name \\\n  -of default=noprint_wrappers=1 input.mp4\n```\n\n## Sample Rate and Channels\n\n```bash\n# Audio sample rate\nffprobe -v error -select_streams a:0 \\\n  -show_entries stream=sample_rate \\\n  -of default=noprint_wrappers=1:nokey=1 input.mp4\n\n# Audio channels\nffprobe -v error -select_streams a:0 \\\n  -show_entries stream=channels \\\n  -of default=noprint_wrappers=1:nokey=1 input.mp4\n```\n\n## Stream Count\n\n```bash\n# Count video streams\nffprobe -v error -select_streams v -show_entries stream=index \\\n  -of csv=p=0 input.mp4 | wc -l\n\n# Count audio streams\nffprobe -v error -select_streams a -show_entries stream=index \\\n  -of csv=p=0 input.mp4 | wc -l\n```\n\n## Frame Rate\n\n```bash\n# Get frame rate\nffprobe -v error -select_streams v:0 \\\n  -show_entries stream=r_frame_rate \\\n  -of default=noprint_wrappers=1:nokey=1 input.mp4\n```\n\n## Notes\n\n- Use `-v error` to suppress warnings\n- `-of json` for structured output\n- `-select_streams` to target specific streams (v:0 for first video, a:0 for first audio)\n\n\n## Deterministic Multilingual Dubbing Validation Contract\n\nFor multilingual dubbing, validation is a required machine-readable stage, not an informational postscript. Do not create `\u002Foutputs\u002Freport.json` until every required file and every validation below passes. Any missing file, malformed JSON, missing field, failed comparison, timing violation, or loudness-measurement failure must terminate the workflow with a nonzero status and must not leave a misleading report.\n\n### Probe all artifacts as JSON\n\nProbe the source video, every generated segment WAV, the assembled full-duration WAV, and the muxed MP4. Save the exact probe output so validation is reproducible:\n\n```bash\nset -eu\nmkdir -p \u002Foutputs\u002Fqa\nprobe() {\n  test -s \"$1\"\n  ffprobe -v error -print_format json -show_format -show_streams \"$1\" > \"$2\"\n}\nprobe \u002Froot\u002Finput.mp4 \u002Foutputs\u002Fqa\u002Fsource.ffprobe.json\nfor f in \u002Foutputs\u002Ftts_segments\u002F*.wav; do\n  probe \"$f\" \"\u002Foutputs\u002Fqa\u002F$(basename \"$f\").ffprobe.json\"\ndone\nprobe \u002Foutputs\u002Fassembled.wav \u002Foutputs\u002Fqa\u002Fassembled.ffprobe.json\nprobe \u002Foutputs\u002Fdubbed.mp4 \u002Foutputs\u002Fqa\u002Fdubbed.ffprobe.json\n```\n\nThe validator must parse these JSON files rather than scrape human-readable ffprobe output. For each file retain `format.duration`, `format.start_time`, stream `index`, `codec_type`, `codec_name`, `codec_long_name`, `start_time`, and `duration`; retain video `width`, `height`, `pix_fmt`, and `r_frame_rate`; and retain audio `sample_rate`, `channels`, and `channel_layout`. Fail on absent or nonnumeric values instead of silently substituting zero.\n\n### Validate source preservation and final streams\n\nCompare the source video stream (`v:0`) with the muxed video stream (`v:0`). The final must preserve the source visual stream: require the same video codec, width, height, pixel format, frame-rate value, and stream-level start time, and require a final duration equal to the source duration within the container time-base measurement tolerance. Do not re-encode the visual stream merely to satisfy QA. Record both source and final codec properties in the QA data.\n\nThe muxed MP4 must contain exactly one audio stream and that stream must be the intended assembled dub, not an accidentally retained source track. Require one `codec_type=audio` stream, a valid codec, `sample_rate=48000`, `channels=1`, and a single-channel layout such as `mono`. Validate its `start_time`, `duration`, and codec properties against the assembled WAV and verify that the audio is not truncated relative to the required full video timeline. Also validate that every segment WAV and the assembled WAV are readable, have `sample_rate=48000`, one channel, a valid start time, and a measurable duration.\n\n### Parse SRT timestamps without rounding\n\nParse `\u002Froot\u002Fsegments.srt`, `\u002Froot\u002Fsource_text.srt`, and `\u002Froot\u002Freference_target_text.srt` with one parser. Accept both comma and period millisecond separators, convert each timestamp directly to an integer count of milliseconds, and retain the original cue order and cue indices. Calculate seconds only as `milliseconds \u002F 1000` for reporting; never round, truncate, or reconstruct a placement from displayed decimal seconds. Require matching cue entries for the segment window, source transcript, and target transcript. Preserve the supplied source and target text exactly (apart from the parser's documented newline normalization); never invent missing text.\n\nFor every segment, calculate and retain:\n\n- `window_start_sec` and `window_end_sec` from the integer SRT millisecond values;\n- `window_duration_sec = (end_ms - start_ms) \u002F 1000`;\n- `tts_duration_sec` from the corresponding rendered segment WAV using its probed duration;\n- `placed_start_sec` and `placed_end_sec` from the actual assembled\u002Frendered audio timeline, measured in samples or an equivalent unrounded timebase rather than copied from the planned window;\n- `drift_sec = placed_end_sec - window_end_sec`;\n- the supplied `source_text` and `target_text`; and\n- `duration_control`, which must be exactly `rate_adjust`, `pad_silence`, or `trim`.\n\nUse one deterministic non-silence threshold and the same sample-level measurement procedure for every cue. Measure the rendered assembled WAV (and, where necessary, confirm the same positions in the muxed MP4); do not infer actual placement merely from an `adelay` argument. Validate `abs(placed_start_sec - window_start_sec) \u003C= 0.010` and `abs(drift_sec) \u003C= 0.200` for every cue. Validate that the assembled audio begins at the required timeline origin and covers the source video duration without an unreported leading offset or truncation.\n\n### Validate loudness and report inputs\n\nMeasure the final intended audio stream, preferably the exact WAV mapped into the MP4, with an ITU-R BS.1770-compatible filter. Capture machine-readable output from `loudnorm` or the integrated result from `ebur128`, and use the measured integrated loudness—not peak, RMS, or a nominal target—as `measured_lufs`:\n\n```bash\nffmpeg -hide_banner -v error -i \u002Foutputs\u002Ftts_segments\u002Fseg_0.wav \\\n  -af 'loudnorm=I=-23:TP=-1.5:LRA=11:print_format=json' \\\n  -f null - 2> \u002Foutputs\u002Fqa\u002Ffinal-loudness.json\n```\n\nFail if the filter does not produce a finite integrated loudness value. Confirm that `\u002Foutputs\u002Ftts_segments\u002Fseg_0.wav` is the complete final audio used for muxing, not an intermediate segment or a separately modified copy. Validate the report schema before writing the report: require `source_language` and `target_language` to be nonempty language codes obtained from supplied metadata\u002Ffiles, require the target value to come from `\u002Froot\u002Ftarget_language.txt`, and fail rather than guessing a language code. Require every `speech_segments` entry and all timing, duration, text, control, audio-format, duration, and loudness fields listed by the task. `original_duration_sec` must come from the source probe and `new_duration_sec` from the muxed MP4 probe.\n\nOnly after all probes, source\u002Fvideo comparisons, stream-count checks, format checks, exact-timestamp checks, rendered timing tolerances, loudness checks, language\u002Ftext provenance checks, and JSON-schema checks pass may the validator serialize `\u002Foutputs\u002Freport.json`. Re-open the written file, parse it as JSON, and repeat the required-field and tolerance checks before declaring success.\n","# FFmpeg Media Info Skill\n\nExtract and analyze media file metadata using ffprobe and ffmpeg.\n\n## When to Use\n\n- Get video\u002Faudio file properties\n- Check codec information\n- Verify resolution and bitrate\n- Analyze stream details\n- Debug media file issues\n\n## Basic Info Commands\n\n```bash\n# Show all file info\nffmpeg -i input.mp4\n\n# JSON format (detailed)\nffprobe -v quiet -print_format json -show_format -show_streams input.mp4\n\n# Simple format\nffprobe -v quiet -print_format json -show_format input.mp4\n```\n\n## Duration\n\n```bash\n# Get duration in seconds\nffprobe -v error -show_entries format=duration \\\n  -of default=noprint_wrappers=1:nokey=1 input.mp4\n\n# Duration with timestamp format\nffprobe -v error -show_entries format=duration \\\n  -of default=noprint_wrappers=1:nokey=1 -sexagesimal input.mp4\n```\n\n## Resolution\n\n```bash\n# Get video resolution\nffprobe -v error -select_streams v:0 \\\n  -show_entries stream=width,height \\\n  -of csv=s=x:p=0 input.mp4\n\n# Get resolution as JSON\nffprobe -v error -select_streams v:0 \\\n  -show_entries stream=width,height \\\n  -of json input.mp4\n```\n\n## Bitrate\n\n```bash\n# Get overall bitrate\nffprobe -v error -show_entries format=bit_rate \\\n  -of default=noprint_wrappers=1:nokey=1 input.mp4\n\n# Get video bitrate\nffprobe -v error -select_streams v:0 \\\n  -show_entries stream=bit_rate \\\n  -of default=noprint_wrappers=1:nokey=1 input.mp4\n```\n\n## Codec Information\n\n```bash\n# Video codec\nffprobe -v error -select_streams v:0 \\\n  -show_entries stream=codec_name,codec_long_name \\\n  -of default=noprint_wrappers=1 input.mp4\n\n# Audio codec\nffprobe -v error -select_streams a:0 \\\n  -show_entries stream=codec_name,codec_long_name \\\n  -of default=noprint_wrappers=1 input.mp4\n```\n\n## Sample Rate and Channels\n\n```bash\n# Audio sample rate\nffprobe -v error -select_streams a:0 \\\n  -show_entries stream=sample_rate \\\n  -of default=noprint_wrappers=1:nokey=1 input.mp4\n\n# Audio channels\nffprobe -v error -select_streams a:0 \\\n  -show_entries stream=channels \\\n  -of default=noprint_wrappers=1:nokey=1 input.mp4\n```\n\n## Stream Count\n\n```bash\n# Count video streams\nffprobe -v error -select_streams v -show_entries stream=index \\\n  -of csv=p=0 input.mp4 | wc -l\n\n# Count audio streams\nffprobe -v error -select_streams a -show_entries stream=index \\\n  -of csv=p=0 input.mp4 | wc -l\n```\n\n## Frame Rate\n\n```bash\n# Get frame rate\nffprobe -v error -select_streams v:0 \\\n  -show_entries stream=r_frame_rate \\\n  -of default=noprint_wrappers=1:nokey=1 input.mp4\n```\n\n## Notes\n\n- Use `-v error` to suppress warnings\n- `-of json` for structured output\n- `-select_streams` to target specific streams (v:0 for first video, a:0 for first audio)\n\n\n## Deterministic Multilingual Dubbing Validation Contract\n\nFor multilingual dubbing, validation is a required machine-readable stage, not an informational postscript. Do not create `\u002Foutputs\u002Freport.json` until every required file and every validation below passes. Any missing file, malformed JSON, missing field, failed comparison, timing violation, or loudness-measurement failure must terminate the workflow with a nonzero status and must not leave a misleading report.\n\n### Probe all artifacts as JSON\n\nProbe the source video, every generated segment WAV, the assembled full-duration WAV, and the muxed MP4. Save the exact probe output so validation is reproducible:\n\n```bash\nset -eu\nmkdir -p \u002Foutputs\u002Fqa\nprobe() {\n  test -s \"$1\"\n  ffprobe -v error -print_format json -show_format -show_streams \"$1\" > \"$2\"\n}\nprobe \u002Froot\u002Finput.mp4 \u002Foutputs\u002Fqa\u002Fsource.ffprobe.json\nfor f in \u002Foutputs\u002Ftts_segments\u002F*.wav; do\n  probe \"$f\" \"\u002Foutputs\u002Fqa\u002F$(basename \"$f\").ffprobe.json\"\ndone\nprobe \u002Foutputs\u002Fassembled.wav \u002Foutputs\u002Fqa\u002Fassembled.ffprobe.json\nprobe \u002Foutputs\u002Fdubbed.mp4 \u002Foutputs\u002Fqa\u002Fdubbed.ffprobe.json\n```\n\nThe validator must parse these JSON files rather than scrape human-readable ffprobe output. For each file retain `format.duration`, `format.start_time`, stream `index`, `codec_type`, `codec_name`, `codec_long_name`, `start_time`, and `duration`; retain video `width`, `height`, `pix_fmt`, and `r_frame_rate`; and retain audio `sample_rate`, `channels`, and `channel_layout`. Fail on absent or nonnumeric values instead of silently substituting zero.\n\n### Validate source preservation and final streams\n\nCompare the source video stream (`v:0`) with the muxed video stream (`v:0`). The final must preserve the source visual stream: require the same video codec, width, height, pixel format, frame-rate value, and stream-level start time, and require a final duration equal to the source duration within the container time-base measurement tolerance. Do not re-encode the visual stream merely to satisfy QA. Record both source and final codec properties in the QA data.\n\nThe muxed MP4 must contain exactly one audio stream and that stream must be the intended assembled dub, not an accidentally retained source track. Require one `codec_type=audio` stream, a valid codec, `sample_rate=48000`, `channels=1`, and a single-channel layout such as `mono`. Validate its `start_time`, `duration`, and codec properties against the assembled WAV and verify that the audio is not truncated relative to the required full video timeline. Also validate that every segment WAV and the assembled WAV are readable, have `sample_rate=48000`, one channel, a valid start time, and a measurable duration.\n\n### Parse SRT timestamps without rounding\n\nParse `\u002Froot\u002Fsegments.srt`, `\u002Froot\u002Fsource_text.srt`, and `\u002Froot\u002Freference_target_text.srt` with one parser. Accept both comma and period millisecond separators, convert each timestamp directly to an integer count of milliseconds, and retain the original cue order and cue indices. Calculate seconds only as `milliseconds \u002F 1000` for reporting; never round, truncate, or reconstruct a placement from displayed decimal seconds. Require matching cue entries for the segment window, source transcript, and target transcript. Preserve the supplied source and target text exactly (apart from the parser's documented newline normalization); never invent missing text.\n\nFor every segment, calculate and retain:\n\n- `window_start_sec` and `window_end_sec` from the integer SRT millisecond values;\n- `window_duration_sec = (end_ms - start_ms) \u002F 1000`;\n- `tts_duration_sec` from the corresponding rendered segment WAV using its probed duration;\n- `placed_start_sec` and `placed_end_sec` from the actual assembled\u002Frendered audio timeline, measured in samples or an equivalent unrounded timebase rather than copied from the planned window;\n- `drift_sec = placed_end_sec - window_end_sec`;\n- the supplied `source_text` and `target_text`; and\n- `duration_control`, which must be exactly `rate_adjust`, `pad_silence`, or `trim`.\n\nUse one deterministic non-silence threshold and the same sample-level measurement procedure for every cue. Measure the rendered assembled WAV (and, where necessary, confirm the same positions in the muxed MP4); do not infer actual placement merely from an `adelay` argument. Validate `abs(placed_start_sec - window_start_sec) \u003C= 0.010` and `abs(drift_sec) \u003C= 0.200` for every cue. Validate that the assembled audio begins at the required timeline origin and covers the source video duration without an unreported leading offset or truncation.\n\n### Validate loudness and report inputs\n\nMeasure the final intended audio stream, preferably the exact WAV mapped into the MP4, with an ITU-R BS.1770-compatible filter. Capture machine-readable output from `loudnorm` or the integrated result from `ebur128`, and use the measured integrated loudness—not peak, RMS, or a nominal target—as `measured_lufs`:\n\n```bash\nffmpeg -hide_banner -v error -i \u002Foutputs\u002Ftts_segments\u002Fseg_0.wav \\\n  -af 'loudnorm=I=-23:TP=-1.5:LRA=11:print_format=json' \\\n  -f null - 2> \u002Foutputs\u002Fqa\u002Ffinal-loudness.json\n```\n\nFail if the filter does not produce a finite integrated loudness value. Confirm that `\u002Foutputs\u002Ftts_segments\u002Fseg_0.wav` is the complete final audio used for muxing, not an intermediate segment or a separately modified copy. Validate the report schema before writing the report: require `source_language` and `target_language` to be nonempty language codes obtained from supplied metadata\u002Ffiles, require the target value to come from `\u002Froot\u002Ftarget_language.txt`, and fail rather than guessing a language code. Require every `speech_segments` entry and all timing, duration, text, control, audio-format, duration, and loudness fields listed by the task. `original_duration_sec` must come from the source probe and `new_duration_sec` from the muxed MP4 probe.\n\nOnly after all probes, source\u002Fvideo comparisons, stream-count checks, format checks, exact-timestamp checks, rendered timing tolerances, loudness checks, language\u002Ftext provenance checks, and JSON-schema checks pass may the validator serialize `\u002Foutputs\u002Freport.json`. Re-open the written file, parse it as JSON, and repeat the required-field and tolerance checks before declaring success.\n",{"name":5,"description":7},"main","cdcb6d230f3b15c3c33f8a2bdd16439f43602cbe","evaluation\u002Fresults\u002FSkillOpt-adapted-gpt52-n3L4R2-v25\u002Ftasks\u002Fmultilingual-video-dubbing\u002Frepaired_skill\u002Fffmpeg-media-info",1,"https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark","https:\u002F\u002Fgithub.com\u002Flinyouxue","2026-11-14 20:28:35",{"source":8,"skillName":5,"commands":32,"prompt":42,"zipAvailable":43},[33,36,39],{"tool":34,"command":35},"npx","npx skills add linyouxue\u002Fskill-repair-benchmark --skill ffmpeg-media-info",{"tool":37,"command":38},"bunx","bunx skills add linyouxue\u002Fskill-repair-benchmark --skill ffmpeg-media-info",{"tool":40,"command":41},"pnpm","pnpm dlx skills add linyouxue\u002Fskill-repair-benchmark --skill ffmpeg-media-info","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fevaluation\u002Fresults\u002FSkillOpt-adapted-gpt52-n3L4R2-v25\u002Ftasks\u002Fmultilingual-video-dubbing\u002Frepaired_skill\u002Fffmpeg-media-info\u002FSKILL.md",true,[],[46,53,60,67,72,77],{"skillNo":47,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":50,"categories":51,"keywords":52,"publishedAt":19},"01M7E1HGVRY73NBJ022CJG13X6","video-frame-extraction","Extract frames from video files and save them as images using OpenCV","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_03\u002Finputs\u002Fskills\u002Fvideo-frame-extraction\u002FSKILL.md",[],[],{"skillNo":54,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":59,"publishedAt":19},"01M7E1HAG5R7CJ9C8NYJS771MB","openai-vision","Analyze images and multi-frame sequences using OpenAI GPT vision models","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_03\u002Finputs\u002Fskills\u002Fopenai-vision\u002FSKILL.md",[],[],{"skillNo":61,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":64,"categories":65,"keywords":66,"publishedAt":19},"01M7E1H7DADKB6QBWKC2KQ63SZ","image-ocr","Extract text content from images using Tesseract OCR via Python, including structured field extraction from receipts and forms","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_03\u002Finputs\u002Fskills\u002Fimage-ocr\u002FSKILL.md",[],[],{"skillNo":68,"name":48,"nameZh":6,"description":49,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":71,"publishedAt":19},"01M7E1H0WBNT43TENGQY7AVZHD","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_02\u002Finputs\u002Fskills\u002Fvideo-frame-extraction\u002FSKILL.md",[],[],{"skillNo":73,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":74,"categories":75,"keywords":76,"publishedAt":19},"01M7E1GTC7D4N4Q2EF03875J9E","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_02\u002Finputs\u002Fskills\u002Fopenai-vision\u002FSKILL.md",[],[],{"skillNo":78,"name":62,"nameZh":6,"description":63,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":81,"publishedAt":19},"01M7E1GQ92CWFMGH53KSSE4WER","https:\u002F\u002Fgithub.com\u002Flinyouxue\u002Fskill-repair-benchmark\u002Fblob\u002Fmain\u002Fjpg-ocr-stat\u002Fresult\u002Fskilltta-claude4.7\u002Fgroup_03\u002Frun_02\u002Finputs\u002Fskills\u002Fimage-ocr\u002FSKILL.md",[],[]]