环顾网络后,我发现无法生成 WebM 视频。我看到了适用于 Windows 和 QuickTime 的驱动程序,但没有证据表明支持最常见的实用程序 FFmpeg。
是否有任何产生 WebM 的开源转换器?
您可以使用ffmpeg
转换为 WebM。确保使用--enable-libvpx
and--enable-libvorbis
标志编译它(参见FFmpeg 编译指南),或访问FFmpeg 下载页面以获取包含支持的构建的链接。之后,您可以使用以下命令(我将input.flv
其用作示例输入文件):
ffmpeg -i input.flv -vcodec libvpx -acodec libvorbis output.webm
有关其他信息,请参阅FFmpeg vpx (WebM) 编码指南。
ffmpeg -i input.mp4 -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis output.webm
默认情况下,CRF 值可以从 4 到 63,而 10 是一个很好的起点。较低的值意味着更好的质量。
我最近设置了这个,但它有点痛苦。这是我必须做的:
首先,从源代码构建 ffmpeg 以包含 libvpx 驱动程序(即使您使用具有它的版本,您也需要最新的(截至本月)来流式传输 webm,因为它们只是添加了包含全局标头的功能)。我在 Ubuntu 服务器和桌面上执行此操作,本指南向我展示了如何在此处找到其他操作系统的说明。
一旦您获得了适当版本的 ffmpeg/ffserver,您就可以将它们设置为流式传输,在我的情况下,这是按如下方式完成的。
在视频捕获设备上:
ffmpeg -f video4linux2 -standard ntsc -i /dev/video0 http://<server_ip>:8090/0.ffm
相关 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>
这个 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/
希望这可以帮助。
对于 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}
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
MiroVideoConverter是一个很好的跨平台和开源的 ffmpeg 包装器,特别是它支持转换为 WebM。
我不确定我的 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
高温高压
试试看avconv
:
avconv -i inmovie.mp4 -flags global_header -strict experimental outmovie.webm
如果您正在寻找一种简单的图形方式来完成此操作,另一个选择是HandBrake (尽管 HandBrake也有命令行风格,以防您正在编写过程脚本,或者可能只是更喜欢命令行)。就像ffmpeg
其他人在这里建议的那样,HandBrake 可在 Linux、Mac 和 Windows 上使用,因此您使用的操作系统无关紧要。流程和界面几乎完全相同。
现在,.webm
容器基本上只是一个 Matroska 文件,但真正使它成为 webm 的是它包含的流。根据WebM 项目,视频流必须是 VP8 或 VP9,音频流必须是 Vorbis 或 Opus,因此在使用 HandBrake 时,您需要确保正确设置这些选项。
因此,要将视频编码为 webm,自然需要选择一个视频,所以让我们先这样做。在 HandBrake 窗口顶部的工具栏中,第一个选项显示“开源”。它不是指软件的性质(即使它实际上是开源软件),而是指使用您可能已经不止一次看到的操作系统的标准文件请求窗口打开视频源. 单击该按钮,然后导航到系统上要编码为 webm 文件的视频。
现在您已经选择了一个文件,界面的一些位更新了一些新信息,您可以开始为您的转换选择选项。有很多有趣的选择,但对于这个答案,我们将关注与“如何创建 webm 视频文件?”问题相关的选择。而不是详细讨论每个选项。如果您对更多细节感兴趣,您可以随时阅读HandBrake 文档。
English (AC3)(5.1 ch)(48khz) Bitrate: 448kbps
例如)。那里的右侧->
列出了您要从左侧转换为的格式。这就是我们需要确保 Vorbis 或 Opus 的地方。.webm
文件,您的文件名实际上以 结尾 .webm
,或者您只是创建一个带有 webm 流的 Matroska 文件。(完全有效,但是如果一些不太复杂的软件需要 webm 并且文件被命名为something.mkv
尽管它们是相同的东西,只是使用不同的文件名,它可能会感到困惑。)此时,您应该准备好单击工具栏中的“开始编码”以立即开始编码,或者如果您正在编码许多视频并且只想开始一个列表并自动一个接一个地完成它们,则可以单击“添加到队列” . 现在你就等着吧。这可能需要一段时间,所以请耐心等待。它会在完成时通知您。