如何告诉 ffmpeg 转码为 Windows Media Player 支持的视频编解码器?

Eve*_*one 7 ffmpeg matroska

下面的命令执行没有错误。

ffmpeg -i thevideo.mkv outvideo.avi
Run Code Online (Sandbox Code Playgroud)

随后尝试在 Windows Media 播放器中播放 outvideo.avi 引发此错误

You may need an additional video decoder to play this file.

This file contains a track in an unknown format (code "ARGB") format. You may need to     
install a DirectShow decoder for this video format in order to play this file.
Run Code Online (Sandbox Code Playgroud)

Windows Media 播放器提供的错误详细信息表明播放视频需要 mpg2 编解码器。如何告诉 ffmpeg 转码为 Windows Media Player 支持的视频编解码器?

slh*_*hck 6

您不能,因为ffmpeg它本身不知道您的系统上安装了哪些编解码器,并且 Windows Media Player 可以访问这些编解码器。这是因为ffmpeg使用自己的libavcodeclibavformat库进行编码和解码。因此,生成的视频ffmpeg不一定要在 Windows Media Player 中播放。


解决方案 1:安装其他编解码器

您可能需要为此视频格式安装 DirectShow 解码器才能播放此文件。

这是您最终必须做的事情,因为 Windows 并未随附所有可能的编解码器。事实上,Windows 7 之前的版本几乎没有额外的编解码器,需要用户安装像K-LiteCCCP这样的编解码器包。但是,您不能假设每台 PC 都安装了这些,并且您可能希望使用 VLC 等媒体播放器发送视频,该播放器提供自己的编解码器并且不依赖于 Windows

不过,您可能应该在每台新的 Windows 机器上安装额外的多媒体编解码器。


解决方案 2:转换为编解码器 WMP 播放

根据有关 Windows Media Player 支持的多媒体文件类型信息,有一些本机支持的格式,但它们并不太具体。如果您想安全起见,您可能应该转换为 Windows Media Video (wmv)。对于其他一切,好吧,这就是微软所说的:

如果计算机上安装了适当的编解码器,则使用各种编解码器压缩的音频内容或视频内容可以存储在 .avi 文件中并在 Windows Media Player 中播放。.avi 文件中经常使用的视频编解码器包括以下编解码器 [...]

ffmpeg 的 FAQ更具体一些。他们说:

Windows 支持哪些编解码器?

以下视频编解码器列表应该适用于大多数 Windows 系统:

  • msmpeg4v2, .avi/.asf
  • msmpeg4, 仅 .asf
  • wmv1, 仅 .asf
  • wmv2 仅.asf
  • mpeg4, 仅当您安装了诸如 ffdshow 或 Xvid 之类的 MPEG-4 编解码器时。
  • mpeg1video, 仅 .mpg

请注意,ASF 文件在 Windows 中通常具有 .wmv 或 .wma 扩展名。还应该提到的是,Microsoft 声称拥有 ASF 格式的专利,并且可能会起诉或威胁使用非 Microsoft 软件创建 ASF 文件的用户。强烈建议尽可能避免 ASF。

以下音频编解码器列表应该适用于大多数 Windows 系统:

  • adpcm_ima_wav
  • adpcm_ms
  • pcm_s16le, 总是
  • libmp3lame, 如果安装了像 LAME 这样的 MP3 编解码器。

因此,当您转换时,您可以分别使用视频和音频的-vcodec-acodec选项来指定要使用的编解码器。

例如:

ffmpeg -i input.mp4 -vcodec msmpeg4v2 -acodec pcm_s16le output.avi
Run Code Online (Sandbox Code Playgroud)

请注意,这是使用未压缩的音频,因为您无法确定 Windows 将支持哪种音频编解码器。如果幸运的话,您可以尝试 MP3(它应该适用于大多数新机器),并使用该libmp3lame选项。