菜鸟教程小白 发表于 2022-12-12 18:04:19

ios - FFMPEG 将 .avi 转换为可播放的 iOS 电影 mp4


                                            <p><p>我正在尝试将 h264 编码的baseline4.0 avi 文件转换为使用baseline3 编码的新h264 mpeg 文件。</p>
<p>由于baseline4.0,文件原始文件无法在任何iOS设备上播放(我认为?)</p>
<p>我在这里使用这个包装类 <a href="https://github.com/OpenWatch/FFmpegWrapper" rel="noreferrer noopener nofollow">https://github.com/OpenWatch/FFmpegWrapper</a> </p>
<p>但实际上我不知道如何设置基线。我可以转换为 mpeg4,但似乎每次都默认为baseline4.0。</p>
<p>我尝试在 AVCodecContext 上设置它</p>
<pre><code>AVCodecContext *outputCodecContext = outputStream-&gt;codec;
outputCodecContext-&gt;level = 31;
outputCodecContext-&gt;profile = FF_PROFILE_H264_BASELINE;
</code></pre>
<p>但这没有任何效果。</p>
<p>也许任何人都有线索,或者有更好的 FFMPEGWrapper。</p>
<p><strong>来自原始视频的规范:</strong>
<a href="/image/4RwMJ.png" rel="noreferrer noopener nofollow"><img src="/image/4RwMJ.png" alt="original video"/></a> </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>首先看一下<a href="https://developer.apple.com/library/mac/documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/UsingHTTPLiveStreaming/UsingHTTPLiveStreaming.html#//apple_ref/doc/uid/TP40008332-CH102-SW8" rel="noreferrer noopener nofollow">this</a>网站了解哪些苹果设备支持什么:</p>

<blockquote>
<ul>
<li><p>Encode video using H.264 compression</p>

<ul>
<li>H.264 Baseline 3.0: All devices</li>
<li>H.264 Baseline 3.1: iPhone 3G and later, and iPod touch 2nd generation and later.</li>
<li>H.264 Main profile 3.1: iPad (all versions), Apple TV 2 and later, and iPhone 4 and later.</li>
<li>H.264 Main Profile 4.0: Apple TV 3 and later, iPad 2 and later, and iPhone 4S and later.</li>
<li>H.264 High Profile 4.0: Apple TV 3 and later, iPad 2 and later, and iPhone 4S and later.</li>
<li>H.264 High Profile 4.1: iPad 2 and later and iPhone 4S and later.</li>
</ul></li>
</ul>
</blockquote>

<p>每个配置文件末尾的数字不是配置文件的版本!它是一个<strong>级别</strong>。这意味着如果您想支持所有设备,您应该坚持使用 Baseline 配置文件和 Level 3.0。</p>

<p>我不知道这个包装器的东西,但是使用简单的 ffmpeg 你会使用这个选项:</p>

<pre><code>-profile:v baseline -level 3.0
</code></pre>

<p><strong>编辑</strong>:</p>

<p>抱歉,我没有注意到您已经设置了级别(可能以正确的方式)。但这里还有一个提示。注意 <a href="https://github.com/OpenWatch/FFmpegWrapper/blob/d640203805aa83050c99eaea9b73cf49201b3065/FFmpegWrapper/FFmpegWrapper.m" rel="noreferrer noopener nofollow">FFmpegWrapper</a> 的 <code>init</code> 中对 <code>av_register_all()</code> 和 <code>avcodec_register_all()</code> 的调用.会不会是先初始化wrapper再改<code>AVCodecContext</code>?</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - FFMPEG 将 .avi 转换为可播放的 iOS 电影 mp4,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/34675983/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/34675983/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - FFMPEG 将 .avi 转换为可播放的 iOS 电影 mp4