在 Linux CLI 上将常见视频格式转换为 FLV 的最佳工具是什么 [关闭]
题
我被指派开发的新产品的一部分涉及到服务器端将“常见”视频格式转换为 Flash 可以播放的格式。
据我所知,我唯一的选择就是转换为 FLV。我一直在尝试 ffmpeg,但我发现一些 WMV 文件带有乱码(我尝试过使用音频速率)。
还有其他适用于 Linux 的“好”CLI 转换器吗?或者Flash还有其他可以播放的视频格式吗?
解决方案
Flash 可以播放以下格式:
FLV with AAC or MP3 audio, and FLV1 (Sorenson Spark H.263), VP6, or H.264 video.
MP4 with AAC or MP3 audio, and H.264 video (mp4s must be hinted with qt-faststart or mp4box).
ffmpeg 是一个总体上很好的转换实用程序;mencoder 在晦涩且专有的格式上工作得更好(由于 w32codecs 二进制解码器包),但它的多路复用相当次优(阅读:通常完全损坏)。一种解决方案可能是通过 mencoder 用 x264 编码 H.264,然后用 mp4box 单独复用。
作为 x264 的开发人员(以及用于在线视频播放的 flash 的狂热用户),我在此类内容方面拥有相当多的经验,因此如果您需要更多帮助,我也可以在 Freenode IRC 上的 #x264 上找到我, #ffmpeg 和 #mplayer。
其他提示
默认情况下,大多数编码器(包括 ffmpeg)将 mp4 的标头原子(“moov 原子”)放在视频的末尾,因为它们在完成编码之前无法放置标头。但是,为了使文件在下载完成之前开始播放,必须将 moov 原子移到前面。
为此,您必须使用 mp4box(默认情况下执行此操作)进行(重新)复用,或者使用 qt-faststart,这是一个用于 ffmpeg 的脚本,只需将原子移动到前面。这很简单。
请注意,对于 FLV,默认情况下,ffmpeg 将使用 FLV1 视频格式,这非常糟糕;到目前为止,它已经有十多年的历史了,而且考虑到现代标准,它的效率相当糟糕。使用 H.264 等更现代的格式会更好。