Answers:
这是您@abrahab的最后评论的答案。
您不需要mp4box
文件就可以通过nginx伪流式传输它。无论moov原子的位置如何(mp4box
将moov原子移动到文件的开头),MP4流模块都会处理它。
现在,对于500服务器错误,您是否在mp4box中使用了“ -frag”选项?MP4流模块无法读取零碎的MP4文件。mp4box
伪流的良好使用是对视频进行交织以便更好地查找。Moov原子移位是一个额外的优势。
我总是对mp4box
FFmpeg编码的文件执行此操作
MP4Box -add MyVideo.mp4 -isma Myvideo-box.mp4
默认情况下,这还将以500毫秒的块间隔插入MP4文件。
通常,您要在MP4容器中创建x264视频。基本上所有设备和浏览器都支持此选项。
以下内容就足够了。确保替换输入名称和CRF选项。后者设置了质量,理智的值介于19到25之间–值越低意味着质量越好,但比特率也越高:
ffmpeg -i input.avi -c:v libx264 -crf 23 -c:a aac -movflags faststart output.mp4
如果您喜欢GUI方式,也可以使用Handbrake进行编码。
faststart
选项现在,您需要做的就是将MP4容器的MOOV原子移到开头。这个原子(本质上是MP4容器中的一个数据单元)将包含有关视频/音频流本身的重要元数据。-movflags faststart
应该做到这一点。
如果您的FFmpeg版本没有此选项,请考虑升级。如果无法升级,则可以使用以下任何工具来实现相同的目的:
QTIndexSwapper,一个Adobe AIR应用程序
MP4Box,免费和开放源代码,运行类似于以下命令,您可以在其中更改间隔(此处为500):
mp4box -inter 500 input.mp4
Python中的qt-faststart,可在安装了Python的任何地方使用。
qtfaststart input.mp4
就是这样
现在,当然,对于流式传输,您实际上可能希望将比特率限制在一定范围内。您可以在我的有关速率控制方法的博客文章中阅读有关此内容的更多信息。
例如,通过添加-maxrate 2M -bufsize 2M
编码选项,您可以将编码上限设置为2 Mbit / s,这对于720p视频来说可能就足够了。当然,所需的比特率将取决于内容的复杂程度。这需要一些反复试验。
ffmpeg -i 1.flv -vcodec libx264 -f mp4 -an -g 1 -f mp4 -g 30 -level 3 new.mp4
,然后mp4box
和MP4不能寻求和nginx的报告500 internal server error
为启动参数的更多的是0
,当视频编码没有-vcoded libx264
(默认MP4编码)的所有工作文件(但质量!恶心!):((对不起,现在,不允许您回答)
-movflags faststart
正是我所需要的
您可以尝试使用ffmpeg:
ffmpeg.exe -i "INPUT_FILE.AVI" -threads 2 -s 800x600 -r 25.00 -threads 1 -pix_fmt yuv420p -g 300 -qmin 3 -b 2048k -async 1 -acodec pcm_s16le -ar 22050 -ac 1 -ab 128k -y "OUTPUT_FILE.mp4"
-acodec pcm_s16le
(error :)一起使用Could not write header for output file #0 (incorrect codec parameters ?): Invalid argument
。似乎也缺少像IETF草案那样为什么要精确选择这些参数的充分理由。
MP4Box -isma -inter 500 Myvideo.mp4