我有一个应用程序,允许用户从他们的库中选择一个视频或用相机拍摄视频,然后将其上传到服务器。当我将视频发送到服务器时,我需要视频以特定格式(m4v,h.264,AAC)。在iOS 5中,也许更早,视频记录为.mov文件(尽管有h.264和AAC)。
如何将视频转换为m4v?不可否认,我对视频编码的细节和差异有点粗略,如果我在这里无知,请原谅我。
答案 0 :(得分:4)
大卫,我可以建议你的服务器进行转码吗?在手机上进行转码既复杂又繁琐。但是,iPhone已经使用了h.264和AAC编码,所以你确定你甚至需要做任何事情吗? .mov vs .m4v对你来说可能并不重要,所有扩展指示的是容器支持的原子。我发现90%的时间视频非常基本,并使用容器格式的最小功能集。要进行比较,请查看维基页面:http://en.wikipedia.org/wiki/Comparison_of_container_formats。
您可以随时使用Atom Box Viewer仔细检查文件的结构(有2天的试用版下载期,它可用于调查视频文件结构)http://www.jongbel.com/?page_id=114。不幸的是,它不是很直观,因为它假设您已经了解了视频容器,但是,您可以非常快速地判断您的目标容器是否与从iPhone获得的容器相匹配。
如果你确实需要强制执行容器/内容语义,那么我建议你不要编写自己的代码转换器来使用ffmpeg http://ffmpeg.org/。 ffmpeg支持许多不同的音频和视频容器和格式。例如,您可以通过以下方式调用它来强制执行标准:
ffmpeg.exe -i inputFile.mp4 -vcodec libx264 -s 320x240 -acodec libfaac outputFile.m4v
我给你的例子非常简单,打破了它:
-i => input file
-vcodec libx264 => video codec set to use h.264 using the x264 encoder. to list more you can do: ffmpeg -formats
-s 320x240 => here I'm just explicitly specifying my size. If you don't set a size it will use whatever the input source size is
-acodec libfaac => use the faac AAC encoding library to transcode the audio
最后将输出文件作为最后一个参数
如果需要,你也可以更具体,指定你想要的编码通道数(2遍将为你提供更好的压缩和更少的工件),你的目标比特率是多少(也许你想要将你的转码限制为一定数量的数据,以便您可以有效地传输它?)。
我建议你转到http://forum.doom9.org/,这是一个关于视频编码/转码的更多详细信息的绝佳论坛。另一个链接http://www.catswhocode.com/blog/19-ffmpeg-commands-for-all-needs包含其他有用的ffmpeg配置。
另外,一个可用于玩设置的GUI是http://handbrake.fr/(手刹),它实际上是一个ffmpeg包装器。
手刹将ffmpeg与其安装捆绑在一起,所以我会从那里得到它。请注意ffmpeg / handbrake的许可,因为它们在法国分发,我不确定您是否可以将它与您的应用程序一起分发,但您可以使用它在服务器端。我总是模糊这些东西的合法性。
我希望这至少可以指出你正确的方向。