ffmpeg 实时输入 MP4 错误

ffmpeg 实时输入 MP4 错误

目前我的电脑上连接着一个麦克风和一个网络摄像头。我在 CentOS 6.3 上运行 ffmpeg。

当我尝试通过以下方式录制没有音频的视频时:

ffmpeg -y -f video4linux2 -t 15 -s 640x480 -r 25 -i /dev/video0 /home/irdb/Desktop/out2.mp4

它运行完美,我得到了一个不错的视频。但是当我尝试在包含音频的情况下运行时:

ffmpeg -y -f video4linux2 -t 15 -s 640x480 -r 25 -i /dev/video0 -f alsa -ar 22050 -ab 64k -ac 2 -i default /home/irdb/Desktop/out2.mp4

它出错并打印:

[NULL @ 0x1e33fc0] Codec is experimental but experimental codecs are not enabled,      see -strict -2
Output #0, mp4, to '/home/irdb/Desktop/out2.mp4':
Stream #0:0: Video: h264, yuv420p, 640x480, q=-1--1, 90k tbn, 25 tbc
Stream #0:1: Audio: none, 22050 Hz, 2 channels, flt, 128 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (rawvideo -> libx264)
Stream #1:0 -> #0:1 (pcm_s16le -> aac)
Error while opening encoder for output stream #0:1 - maybe incorrect parameters such    as bit_rate, rate, width or height

我猜想这和第一个错误有关,因为当我使用 mpg 之类的东西时,它工作得很好。但是我计划实时流式传输,并且想要 mp4 格式,因为几乎所有浏览器都支持这种格式(Firefox 带有 flash 后备功能)。

有谁知道如何让音频无需额外处理即可工作(因为我想实时流式传输而不是最终写入文件)。

答案1

简短回答:在输出文件名前添加-strict experimental(或别名)。-strict -2

较长的答案: mp4通常包含 H.264 视频和 AAC 音频。对于 H.264 视频,您需要使用 GPL 许可对其进行编码libx264(您正在这样做)。

有多个 AAC 编码器可与 ffmpeg 一起使用。有一个原生的 ffmpeg AAC 编码器,但它是实验性的,质量不如其他 AAC 编码器。-strict experimental可以使用该选项启用它。Fraunhofer 编码器libfdk_aac具有最高的质量;它于 2012 年作为 Android Jelly Bean 源代码版本的一部分根据自定义版权许可发布。由于 GPL 仅允许在整个作品根据 GPL 发布的情况下重新分发包含 GPL 许可代码的二进制文件,因此除非您自己编译它,否则您的 ffmpeg 可能未配置此编码器。

您可以在 ffmpeg 的AAC 编码指南

相关内容