如何解复用音频并知道它是什么类型?
将音频混合到视频中时,ffmpeg、mencoder 等需要知道音频的编码是什么。编码器通常使用文件名的扩展名作为“参数”。例如。 .aac
但是,当要混合的音频从另一个视频中分离出来时,如何确定脚本中的编码类型?
我找到这个神奇信息的最接近方法是获取编解码器的 4CC 字符串(四字符代码),但这并不合适。 *(更新:这似乎不是4CC代码,实际上是mplayer的指定“编解码器家族”..通过以下方式列出: mplayer -afm help
/usr/share/mplayer/midentify.sh $audio |sed -nr 's/^ID_AUDIO_CODEC=(.*)/\1/p')"
我的输出视频使用 MP4 容器,因此我需要知道输入音频是什么格式,并在需要时进行转码...并且在任何情况下都需要音频编码器类型,不是上面命令输出的代码。
即使解复用似乎也需要预知或编解码器类型!
我尝试过使用通用转储mplayer -dumpaudio $audio
,但即使我手动添加适当的后缀,输出也不会播放。
答案1
我所知道的最好的命令行媒体类型识别工具是媒体信息。它的项目页面将其显示为 Windows GUI 程序,但所有三个主要平台都有命令行版本。命令行输出是可读的,但从 Perl 等语言中解析起来相当容易。
我知道的第二好的此类工具ffprobe
是ffmpeg包裹。它的输出比 MediaInfo 的输出更难阅读,但也更容易解析。 (例如,两者都需要上下文相关的解析器,因为它们执行诸如打印多个“编解码器”行之类的操作,每个行对应多路复用器中的各个流。)MediaInfo 似乎也提供了有关流的更详细信息。
ffprobe
如果您已经在使用,您可能会更喜欢ffmpeg
,因为您在安装时可以免费获得它ffmpeg
。另外,因为它们基于相同的代码,所以您可以确信,如果ffprobe
可以告诉您有关该文件的有用信息,ffmpeg
就能够处理它。