2016-01-08 119 views
2

我试图将h264编码的baseline4.0的avi文件转换为使用baseline3编码的新h264 mpeg文件。FFMPEG将.avi转换为可播放的iOS电影mp4

文件原始文件没有任何iOS设备上播放,由于baseline4.0(我想?)

我使用这个包装类在这里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

+0

你解决了你的问题吗?我有类似的。 – Vive

回答

2

首先来看看this网站了解哪些苹果设备支持什么样的:使用H.264压缩

  • 编码视频

    • H.264基线3.0:所有设备
    • H.264基准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及更高版本。

在每个配置文件的末尾数字是不是配置文件的版本!它的一个级别。这意味着如果你想支持所有设备,你应该坚持基线配置文件和3.0级。

我不知道关于这个包装的东西,但使用简单的ffmpeg可以使用此选项:

-profile:v baseline -level 3.0 

编辑

对不起,我没注意到你已经设置了关卡(可能是以正确的方式)。但这里还有一个提示。请注意拨打av_register_all()avcodec_register_all()拨打FFmpegWrapperinit。是否可以首先初始化包装,然后更改AVCodecContext

+0

是的,这个包装器并没有真正的选项列表,就像使用命令行一样。所以我需要像上面提到的那样直接将值设置为AVCodec/CodecContext。是的,我初始化包装,然后我改变AVCodecContext,我应该如何改变? –

+0

是否有可能先创建一个包装器对象,然后设置编解码器上下文,然后进行初始化? – incBrain

+0

不,我需要包装对象,因为有触发整个libav的东西的所有值和功能。我检查了AVCodecContext对输出文件的更改,当转码开始时,正确的值在AVCodecContext中设置,但ffmpeg不使用它。也许我必须通过libav直接设置它。 –

相关问题