{"id":27968970,"url":"https://github.com/dxcweb/convert","last_synced_at":"2026-01-25T17:01:05.127Z","repository":{"id":37571831,"uuid":"505980882","full_name":"dxcweb/convert","owner":"dxcweb","description":null,"archived":false,"fork":false,"pushed_at":"2022-06-22T17:35:42.000Z","size":29,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-07T21:07:57.000Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dxcweb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-06-21T19:38:52.000Z","updated_at":"2022-06-21T19:38:52.000Z","dependencies_parsed_at":"2022-08-29T02:51:24.296Z","dependency_job_id":null,"html_url":"https://github.com/dxcweb/convert","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dxcweb/convert","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dxcweb%2Fconvert","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dxcweb%2Fconvert/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dxcweb%2Fconvert/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dxcweb%2Fconvert/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dxcweb","download_url":"https://codeload.github.com/dxcweb/convert/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dxcweb%2Fconvert/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28755561,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T16:32:25.380Z","status":"ssl_error","status_checked_at":"2026-01-25T16:32:09.189Z","response_time":113,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-07T21:07:55.949Z","updated_at":"2026-01-25T17:01:04.907Z","avatar_url":"https://github.com/dxcweb.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"## 概述\r\n\r\nmp4视频在部分手机上加载失败、无法播放或有声音没画面的原因是：视频编码或声道数有问题，解决方案：视频转码。\r\n\r\n## 遇到的问题\r\n\r\n1. mp4视频在 iPhone XR (IOS 14.1) 上无法播放，一直显示加载失败，但是在安卓手机上却可以正常播放；\r\n\r\n2. 一些mp4视频在安卓手机上有声音但是没有画面。\r\n\r\n## 问题定位\r\n为了排除是代码的问题，写了个简单的demo：\r\n\r\n```\r\n\u003cvideo src=\"无法播放的视频.mp4\" controls=\"controls\"\u003e\r\n```\r\n\r\n视频在iPhone下依旧无法播放，代码的问题被排除了，安卓手机上可以正常播放，网络的问题也排除了，换其他iPhone测试依旧无法播放，手机的问题也排除了。\r\n\r\nmp4视频无法播放的问题很可能出在**视频本身**。\r\n\r\n## 如何解决\r\n### 查看官方文档\r\n查询 Apple 官网的[设备技术规格](https://support.apple.com/zh_CN/specs) 在 [iPhone 6 - 技术规格](https://support.apple.com/kb/SP705?viewlocale=zh_CN\u0026locale=zh_CN)\r\n\r\n![iPhone 6 支持的视频格式](https://upload-images.jianshu.io/upload_images/6765590-d469f6cd582a7c9a.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n\r\n\r\n明确写到支持的视频格式：H.264 视频：最高支持 1080p、60 fps、High Profile level 4.2 编码\r\n\r\n对照无法播放视频的编码信息，找到了无法播放的真正原因为**视频编码问题**，把视频转码到High Profile level 4.2，视频可以正常播放。（如何转码最后部分会介绍）\r\n\r\n进一步查看问题手机 [iPhone XR - 技术规格](https://support.apple.com/kb/SP781?viewlocale=zh_CN\u0026locale=zh_CN)\r\n\r\n![iPhone XR 支持的视频格式](https://upload-images.jianshu.io/upload_images/6765590-d8624e669377ae93.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n\r\n支持的视频格式：HEVC、H.264、MPEG-4 Part 2 与 Motion JPEG\r\n\r\n并没有明确写出支持的视频编码\r\n\r\n[iPhone 4s - 技术规格](https://support.apple.com/kb/SP643?viewlocale=zh_CN\u0026locale=zh_CN)\r\n\r\n![iPhone 4s 支持的视频格式](https://upload-images.jianshu.io/upload_images/6765590-f986989483a34081.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n\r\n支持视频格式：H.264 视频最高可达 1080p，每秒 30 帧，High Profile level 4.1\r\n\r\n### 文档结论\r\n**iPhone 4s 只支持到High Profile level 4.1编码，iPhone 6 支持到 High Profile level 4.2编码。**\r\n\r\n### 为什么视频编码正确，在iPhone (IOS) 上还是无法播放\r\n\r\n#### 1. 声道的问题\r\n\r\n注意另外一个细节 [iPhone 6 - 技术规格](https://support.apple.com/kb/SP705?viewlocale=zh_CN\u0026locale=zh_CN)  \r\n\r\n如文档中所述，在支持的视频格式中：其音频为 AAC-LC 格式、最高支持 160 Kbps、48kHz、立体声。\r\n\r\n但是某些高档的拍摄设备拍出来的视频是4声道，而立体声是2声道，所以不仅需要正确的编码格式，声道数也不能超过2。\r\n\r\n#### 2. 分辨率的问题\r\n\r\n 畸形的分辨率也会导致视频无法播放。\r\n\r\n\r\n## 技术说明\r\n\r\n##### Profile和level是什么？\r\n\r\nProfile和level是视频的压缩级别，我也看过各大佬对Profile和level的专业解释，简单来说：\r\n\r\nH.264的Profile和level 可以理解为 gzip的level， 等级越高，文件压缩得越小，传输越快，但cpu消耗越多。\r\n\r\n##### Profile和level越高越好吗？\r\n\r\n压缩级别越高不仅在压缩时cpu的消耗越高，视频在播放时也需要消耗更多的cpu进行解压，各类型手机的硬件条件不一样，所以支持的压缩级别也不同\r\n\r\n##### 该怎么选择Profile和level呢？\r\n\r\n支持到iPhone 6及以上，使用High Profile level 4.2即可\r\n\r\n##### H.264，H.265是什么\r\n\r\nH.264和H.265都是视频编码格式，可以理解为zip，rar这种不同的格式。\r\n\r\nH.265是H.264的升级版，它的压缩率更高，但是支持的浏览器较少。\r\n\r\n使用caniuse查询[H.265兼容性](https://caniuse.com/?search=h265)通红一片，大部分浏览器都不兼容\r\n\r\n![image.png](https://upload-images.jianshu.io/upload_images/6765590-6c3f92e2e1263e51.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)\r\n\r\n\r\n## 最后介绍下如何转码\r\n\r\n使用ffmpeg把视频转码为H.264的High Profile level 4.2\r\n\r\n```\r\nffmpeg -i 无法播放的视频文件.mp4 -vcodec h264 -profile:v high -level 4.2 转码后的视频.mp4\r\n```\r\n\r\n## 总结\r\n\r\n很多人认为压缩视频就是把视频的分辨率或码率调低，但这种方式其实是**有损压缩**，提高Profile和level压缩级别则是**无损压缩**。\r\n\r\n很多压缩软件或视频转码软件是没有Profile和level选项的，主要原因也是考虑到视频的压缩级别过高，在某些环境下无法播放。\r\n\r\n现在市场上流行的转码软件，在转码或压缩时：\r\n\r\n1.有的不对Profile和level修改，直接进行有损压缩；\r\n\r\n2.有的是直接转码为Main Profile level 3.1，是因为iPhone 4 支持的最高就是这个档位，具体文档 [iPhone 4  - 技术规格](https://support.apple.com/kb/SP587?viewlocale=zh_CN\u0026locale=zh_CN) \r\n\r\n然而，这个档位的压缩率很低，压缩后的视频文件会很大，所以我们不应该再面向iPhone 4或那时代的产物，而是应该提高压缩级别。\r\n\r\n\u003cbr\u003e\r\n\r\n为此我做了一个[在线视频压缩](https://convert.dxcweb.com/)的网站 https://convert.dxcweb.com/ 。\r\n\r\n提供在线无损压缩在不改变画质保证兼容性上最大化压缩视频，降低带宽成本，提高传输速度。同时也是一款标准化视频编码和标准化视频声音的转码软件。\r\n\r\n压缩级别为High Profile level 4.2，相比Main Profile level 3.1在相同的分辨率和码率的情况下压缩率提高了很多，实测压缩前23.32MB压缩后2.53MB。\r\n \r\n**准化视频编码后同时也解决了视频无法播放的问题。**\r\n\r\n我也正在考虑是否开源，关注我的[GitHub](https://github.com/dxcweb)。\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdxcweb%2Fconvert","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdxcweb%2Fconvert","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdxcweb%2Fconvert/lists"}