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

时间:2016-01-08 11:27:59

标签: ios objective-c video ffmpeg

我正在尝试将h264编码的baseline4.0的avi文件转换为使用baseline3编码的新h264 mpeg文件。

由于基线4.0(我认为?),文件原始文件无法在任何iOS设备上播放。

我在这里使用这个包装器类https://github.com/OpenWatch/FFmpegWrapper

但实际上我不知道如何设置基线。我可以转换为mpeg4,但似乎每次都默认为baseline4.0。

我尝试在AVCodecContext上设置它

AVCodecContext *outputCodecContext = outputStream->codec;
outputCodecContext->level = 31;
outputCodecContext->profile = FF_PROFILE_H264_BASELINE;

但这没有效果。

也许任何人都有线索,或者有更好的FFMPEGWrapper。

来自原始视频的规范 original video

1 个答案:

答案 0 :(得分:2)

首先看一下this网站,了解哪些苹果设备支持以下内容:

  
      
  • 使用H.264压缩编码视频

         
        
    • H.264 Baseline 3.0:所有设备
    •   
    • H.264 Baseline 3.1:iPhone 3G及更高版本,iPod touch第二代及更高版本。
    •   
    • H.264主要配置文件3.1:iPad(所有版本),Apple TV 2及更高版本以及iPhone 4及更高版本。
    •   
    • H.264 Main Profile 4.0:Apple TV 3及更高版本,iPad 2及更高版本以及iPhone 4S及更高版本。
    •   
    • H.264 High Profile 4.0:Apple TV 3及更高版本,iPad 2及更高版本以及iPhone 4S及更高版本。
    •   
    • H.264 High Profile 4.1:iPad 2及更高版本以及iPhone 4S及更高版本。
    •   
  •   

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

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

-profile:v baseline -level 3.0

修改

对不起,我没注意到你已经设定了等级(可能是以正确的方式)。但这是另一个暗示。请注意av_register_all() avcodec_register_all()中对initAVCodecContext的调用。你可以先初始化包装然后更改{{1}}吗?