59

环顾网络后,我发现无法生成 WebM 视频。我看到了适用于 Windows 和 QuickTime 的驱动程序,但没有证据表明支持最常见的实用程序 FFmpeg。

是否有任何产生 WebM 的开源转换器?

4

9 回答 9

73

您可以使用ffmpeg转换为 WebM。确保使用--enable-libvpxand--enable-libvorbis标志编译它(参见FFmpeg 编译指南),或访问FFmpeg 下载页面以获取包含支持的构建的链接。之后,您可以使用以下命令(我将input.flv其用作示例输入文件):

ffmpeg -i input.flv -vcodec libvpx -acodec libvorbis output.webm

有关其他信息,请参阅FFmpeg vpx (WebM) 编码指南

于 2011-08-08T13:59:07.217 回答
12
ffmpeg -i input.mp4 -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis output.webm

默认情况下,CRF 值可以从 4 到 63,而 10 是一个很好的起点。较低的值意味着更好的质量。

于 2017-03-04T09:01:20.977 回答
6

我最近设置了这个,但它有点痛苦。这是我必须做的:

首先,从源代码构建 ffmpeg 以包含 libvpx 驱动程序(即使您使用具有它的版本,您也需要最新的(截至本月)来流式传输 webm,因为它们只是添加了包含全局标头的功能)。我在 Ubuntu 服务器和桌面上执行此操作,本指南向我展示了如何在此处找到其他操作系统的说明。

一旦您获得了适当版本的 ffmpeg/ffserver,您就可以将它们设置为流式传输,在我的情况下,这是按如下方式完成的。

在视频捕获设备上:

ffmpeg -f video4linux2 -standard ntsc -i /dev/video0 http://<server_ip>:8090/0.ffm
  • 其中的“-f video4linux2 -standard ntsc -i /dev/video0”部分可能会根据您的输入源而改变(我的是用于视频采集卡)。

相关 ffserver.conf 摘录:

Port 8090
#BindAddress <server_ip>
MaxHTTPConnections 2000
MAXClients 100
MaxBandwidth 1000000
CustomLog /var/log/ffserver
NoDaemon

<Feed 0.ffm>
File /tmp/0.ffm
FileMaxSize 5M
ACL allow <feeder_ip>
</Feed>
<Feed 0_webm.ffm>
File /tmp/0_webm.ffm
FileMaxSize 5M
ACL allow localhost
</Feed>

<Stream 0.mpg>
Feed 0.ffm
Format mpeg1video
NoAudio
VideoFrameRate 25
VideoBitRate 256
VideoSize cif
VideoBufferSize 40
VideoGopSize 12
</Stream>
<Stream 0.webm>
Feed 0_webm.ffm
Format webm
NoAudio
VideoCodec libvpx
VideoSize 320x240
VideoFrameRate 24
AVOptionVideo flags +global_header
AVOptionVideo cpu-used 0
AVOptionVideo qmin 1
AVOptionVideo qmax 31
AVOptionVideo quality good
PreRoll 0
StartSendOnKey
VideoBitRate 500K
</Stream>

<Stream index.html>
Format status
ACL allow <client_low_ip> <client_high_ip>
</Stream>
  • 请注意,这是为 feeder_ip 上的服务器配置的,以执行上述 ffmpeg 命令,并为 server_ip 上的服务器配置,因此在 server_ip 上处理 mpeg 到 webm 对话时,通过 client_high_ip 服务器到 client_low_ip(下文继续)。

这个 ffmpeg 命令在以前称为 server_ip 的机器上执行(它处理实际的 mpeg --> webm 转换并将其反馈到不同源的 ffserver 中):

ffmpeg -i http://<server_ip>:8090/0.mpg -vcodec libvpx http://localhost:8090/0_webm.ffm

一旦这些都启动了(首先是 ffserver,然后是 feeder_ip ffmpeg 进程,然后是 server_ip ffmpeg 进程),您应该能够访问 http://:8090/0.webm 上的实时流并检查 http 上的状态://:8090/

希望这可以帮助。

于 2013-03-16T14:57:31.607 回答
3

对于 Linux: 可用于 linux 的 vp8 和 vp9 编解码器的开源软件是用于 gnome 桌面的 Arista。谷歌:Arista 转码器

对于 Windows 和 Linux: Miro Video Converter 也是免费和开源的,具有非常流畅的 GUI。您可以在以下位置查看:谷歌:mirovideoconverter

FFMPEG 是一个命令行工具,我发现它是跟上 webmd 项目的最新版本。不要忘记查看webmproject 站点 https://sites.google.com/a/webmproject.org/wiki/ffmpeg提供的 vp8 编码选项。您还应该查看VPX 编码指南: https ://trac.ffmpeg.org/wiki/vpxEncodingGuide

另一篇帖子提到了vpxenc.exe,但是vpxenc.exe需要源码编译。

FFMEG 示例使用: 将 {NPUT} 和 {OUTPUT} 替换为文件位置。在 Windows 7 上,我必须使用 power shell (开始 > 附件 > Windows Power Shell > Power Shell)并提供 ffmpeg、输入和输出的完整位置。注意参数-vcodec libvpx默认使用 VP8。使用 VP9 替换为-vcodec libvpx-vp9

卫报

ffmeg.exe -i {INPUT} -s hd480 -vcodec libvpx -g 120 -lag-in-frames 16 -deadline good -cpu-used 0 -vprofile 0 -qmax 63 -qmin 0 -b:v 768k -acodec libvorbis -ab 112k -ar 44100 -f webm {OUTPUT}
于 2014-01-10T16:52:20.340 回答
3

FFmpeg。MP4 到 WebM。口型同步和高质量

$ ffmpeg -i input.mp4 -b:v 1M -q:v 10 -vcodec libvpx -acodec libvorbis output.webm
ffmpeg version 2.8.6-1ubuntu2 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 5.3.1 (Ubuntu 5.3.1-11ubuntu1) 20160311
  configuration: --prefix=/usr --extra-version=1ubuntu2 --build-suffix=-ffmpeg --toolchain=hardened --libdir=/usr/lib/x86_64-linux-gnu --incdir=/usr/include/x86_64-linux-gnu --cc=cc --cxx=g++ --enable-gpl --enable-shared --disable-stripping --disable-decoder=libopenjpeg --disable-decoder=libschroedinger --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmodplug --enable-libmp3lame --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librtmp --enable-libschroedinger --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzvbi --enable-openal --enable-opengl --enable-x11grab --enable-libdc1394 --enable-libiec61883 --enable-libzmq --enable-frei0r --enable-libx264 --enable-libopencv
  libavutil      54. 31.100 / 54. 31.100
  libavcodec     56. 60.100 / 56. 60.100
  libavformat    56. 40.101 / 56. 40.101
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 40.101 /  5. 40.101
  libavresample   2.  1.  0 /  2.  1.  0
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.101 /  1.  2.101
  libpostproc    53.  3.100 / 53.  3.100
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'SPBFRE_01.mp4':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42mp41
    creation_time   : 2015-05-29 14:49:20
  Duration: 00:01:41.61, start: 0.000000, bitrate: 9452 kb/s
    Stream #0:0(eng): Video: h264 (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 9132 kb/s, 50 fps, 50 tbr, 50k tbn, 100 tbc (default)
    Metadata:
      creation_time   : 2015-05-29 14:49:20
      handler_name    : ?Mainconcept Video Media Handler
      encoder         : AVC Coding
    Stream #0:1(eng): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 317 kb/s (default)
    Metadata:
      creation_time   : 2015-05-29 14:49:20
      handler_name    : #Mainconcept MP4 Sound Media Handler
File 'output.webm' already exists. Overwrite ? [y/N] y
[libvpx @ 0x132af40] v1.5.0
Output #0, webm, to 'output.webm':
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: mp42mp41
    encoder         : Lavf56.40.101
    Stream #0:0(eng): Video: vp8 (libvpx), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], q=-1--1, 1000 kb/s, 50 fps, 1k tbn, 50 tbc (default)
    Metadata:
      creation_time   : 2015-05-29 14:49:20
      handler_name    : ?Mainconcept Video Media Handler
      encoder         : Lavc56.60.100 libvpx
    Stream #0:1(eng): Audio: vorbis (libvorbis), 44100 Hz, stereo, fltp (default)
    Metadata:
      creation_time   : 2015-05-29 14:49:20
      handler_name    : #Mainconcept MP4 Sound Media Handler
      encoder         : Lavc56.60.100 libvorbis
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> vp8 (libvpx))
  Stream #0:1 -> #0:1 (aac (native) -> vorbis (libvorbis))
Press [q] to stop, [?] for help
frame=  755 fps= 10 q=0.0 size=    1987kB time=00:00:15.12 bitrate=1076.5kbits/s 
于 2016-09-23T06:41:11.573 回答
2

MiroVideoConverter是一个很好的跨平台和开源的 ffmpeg 包装器,特别是它支持转换为 WebM。

于 2011-11-24T17:54:16.170 回答
1

我不确定我的 FFMPEG 副本是否支持 WebM,所以首先我使用 FFMPEG 将我的 MPEG4 视频转换为原始视频。

然后我使用 WebM 项目的 SDK 提供的 vpxenc.exe 将其转换为 WebM。

SDK 下载链接: http ://code.google.com/p/webm/downloads/list

下载、解压并查看“bin”文件夹。那里有一些示例应用程序。还提供了一个解码器。

我用来将原始视频转换为 WebM 的命令:

vpxenc.exe -w 720 -h 480 --rt -o v1.webm v1.yuv

高温高压

于 2011-11-24T17:26:58.583 回答
0

试试看avconv

avconv -i inmovie.mp4 -flags global_header -strict experimental outmovie.webm
于 2013-06-28T12:44:12.107 回答
0

如果您正在寻找一种简单的图形方式来完成此操作,另一个选择是HandBrake (尽管 HandBrake命令行风格,以防您正在编写过程脚本,或者可能只是更喜欢命令行)。就像ffmpeg其他人在这里建议的那样,HandBrake 可在 Linux、Mac 和 Windows 上使用,因此您使用的操作系统无关紧要。流程和界面几乎完全相同。

现在,.webm容器基本上只是一个 Matroska 文件,但真正使它成为 webm 的是它包含的流。根据WebM 项目,视频流必须是 VP8 或 VP9,音频流必须是 Vorbis 或 Opus,因此在使用 HandBrake 时,您需要确保正确设置这些选项。

因此,要将视频编码为 webm,自然需要选择一个视频,所以让我们先这样做。在 HandBrake 窗口顶部的工具栏中,第一个选项显示“开源”。它不是指软件的性质(即使它实际上是开源软件),而是指使用您可能已经不止一次看到的操作系统的标准文件请求窗口打开视频源. 单击该按钮,然后导航到系统上要编码为 webm 文件的视频。

现在您已经选择了一个文件,界面的一些位更新了一些新信息,您可以开始为您的转换选择选项。有很多有趣的选择,但对于这个答案,我们将关注与“如何创建 webm 视频文件?”问题相关的选择。而不是详细讨论每个选项。如果您对更多细节感兴趣,您可以随时阅读HandBrake 文档。

  • 在启动 HandBrake 后看到的选项的第一页上,大约一半,您会看到“格式:”以及“MPEG-4”或“Matroska”的选项。这将选择容器。对于 webm,您需要“Matroska”。
  • 在此之上,您会看到一个选项按钮栏,可在各个页面之间切换。您可以在那里设置各种漂亮的选项,但我们接下来想要的是“视频”,因此单击它并查找“视频编码器:”,您将根据自己的喜好将其设置为“VP8”或“VP9”和用例。VP9 较新且压缩效果更好,但需要更多 CPU 工作来进行编码和播放,因此请记住这一点。
  • 最后但同样重要的是,让我们看看“音频”选项。因为您选择了一个视频,所以“音频”页面的“曲目列表”框中应该至少有一个 (可能不止一个)音频流。该音轨的左侧列出了该音轨当前的格式(English (AC3)(5.1 ch)(48khz) Bitrate: 448kbps例如)。那里的右侧->列出了您要从左侧转换为的格式。这就是我们需要确保 Vorbis 或 Opus 的地方。
  • 单击您正在编码的音轨最右侧的小铅笔图标,您将在屏幕上看到一个新窗口,您可以在其中选择要编码的音轨,更重要的是,编码器的详细信息。确保将编码器设置为 Vorbis 或 Opus (Opus 比 Vorbis 更新且总体上更好,因此您几乎每次都想选择那个),并为大多数正常目的选择 128、160 或 192 作为比特率。你可以更高或更低,但要知道更高会增加音轨的大小,而不会显着改善音频质量(如果有的话),并且更低,您可能会开始真正注意到音轨的退化。“混合”设置将是个人喜好,具体取决于源材料和您对输出的需求。采样率通常应设置为 48。“增益”和“DRC”是指您的音轨太安静,并且整个音轨的响亮和柔和电平之间存在巨大差异。单击该窗口上的“确定”以锁定您的选择。
  • 在窗口底部,您会看到带有文件名的“另存为:”和带有文件夹的“收件人:”。“收件人:”是您可以选择文件保存位置的位置,“另存为:”是您选择要命名的文件的位置。确保如果您尝试创建一个.webm文件,您的文件名实际上以 结尾 .webm,或者您只是创建一个带有 webm 流的 Matroska 文件。(完全有效,但是如果一些不太复杂的软件需要 webm 并且文件被命名为something.mkv尽管它们是相同的东西,只是使用不同的文件名,它可能会感到困惑。)

此时,您应该准备好单击工具栏中的“开始编码”以立即开始编码,或者如果您正在编码许多视频并且只想开始一个列表并自动一个接一个地完成它们,则可以单击“添加到队列” . 现在你就等着吧。这可能需要一段时间,所以请耐心等待。它会在完成时通知您。

于 2019-12-03T22:32:56.380 回答