目前我的电脑上连接着一个麦克风和一个网络摄像头。我在 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 编码指南。