目前我有一个麦克风和一个网络摄像头连接到我的电脑。我在 CentOS 6.3 上运行 ffmpeg。
当我尝试通过以下方式录制没有音频的视频时:
ffmpeg -y -f video4linux2 -t 15 -s 640x480 -r 25 -i /dev/video0 /home/irdb/Desktop/out2.mp4
Run Code Online (Sandbox Code Playgroud)
它运行完美,我得到了一个不错的视频。但是,当我尝试使用包含以下内容的音频运行时:
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
Run Code Online (Sandbox Code Playgroud)
它出错并打印:
[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
Run Code Online (Sandbox Code Playgroud)
我认为这与第一个错误有关,因为当我使用 mpg 之类的东西时它工作得很好。但是,我计划直播这个直播,并希望使用 mp4 格式,因为所有浏览器都支持这种格式(具有 Flash 回退功能的 Firefox)。
有谁知道如何在没有额外处理的情况下让音频工作(因为我想实时流式传输而不是最终写入文件)。
简短回答:在输出文件名之前添加-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 源代码发布的一部分在自定义 Copyleft 许可下发布。因为 GPL 只允许重新分发包含 GPL 许可代码的二进制文件,如果整个工作是在 GPL 下发布的,除非您自己编译,否则您的 ffmpeg 可能没有配置此编码器。
您可以在 ffmpeg 的AAC 编码指南 中找到更多详细信息。
归档时间: |
|
查看次数: |
571 次 |
最近记录: |