【发布时间】:2011-10-20 18:08:37
【问题描述】:
浏览网络后,我发现无法生成 WebM 视频。我看到了适用于 Windows 和 QuickTime 的驱动程序,但没有证据表明支持最常见的实用程序 FFmpeg。
是否有任何开源转换器可以生成 WebM?
【问题讨论】:
浏览网络后,我发现无法生成 WebM 视频。我看到了适用于 Windows 和 QuickTime 的驱动程序,但没有证据表明支持最常见的实用程序 FFmpeg。
是否有任何开源转换器可以生成 WebM?
【问题讨论】:
您可以使用ffmpeg 转换为WebM。确保使用--enable-libvpx 和--enable-libvorbis 标志编译它(请参阅FFmpeg compile guides),或访问FFmpeg Download 页面以获取包含支持的构建链接。之后,您可以使用以下命令(我使用input.flv 作为我的示例输入文件):
ffmpeg -i input.flv -vcodec libvpx -acodec libvorbis output.webm
有关更多信息,请参阅FFmpeg vpx (WebM) Encoding Guide。
【讨论】:
ffmpeg -i input.flv -q:v 10 -c:v libvpx -c:a libvorbis output.webm
Important: If neither -b:v nor -crf are set, the encoder will use a low default bitrate and your result will probably look very bad. Always supply one of these options—ideally both.trac.ffmpeg.org/wiki/vpxEncodingGuide
-an 而不是 -acodec libvorbis。您还可以将其限制在视频的某个部分,例如 -ss 00:01:00 -to 00:02:00 以从 1:00 到 2:00(1 分钟长)进行复制。
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 服务器和桌面上完成的,this guide 向我展示了如何 - 其他操作系统的说明 can be found here。
获得适当版本的 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 站点提供的 vp8 编码选项 https://sites.google.com/a/webmproject.org/wiki/ffmpeg。您还应该看看 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 来进行实际的转码。
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
HTH
【讨论】:
试试avconv:
avconv -i inmovie.mp4 -flags global_header -strict experimental outmovie.webm
【讨论】:
如果您正在寻找一种简单的图形方式来实现此目的,另一种选择是 HandBrake(尽管 HandBrake 确实也有 commandline flavor,以防万一编写该过程的脚本,或者可能只是更喜欢命令行)。就像其他人在此处建议的 ffmpeg 一样,HandBrake 可在 Linux、Mac 和 Windows 上使用,因此您使用的操作系统无关紧要。流程和界面几乎一模一样。
现在,.webm 容器基本上只是一个 Matroska 文件,但真正使它成为 webm 的是它包含的流。根据WebM Project,视频流必须是 VP8 或 VP9,音频流必须是 Vorbis 或 Opus,因此在使用 HandBrake 时,您需要确保正确设置这些选项。
因此,要将视频编码为 webm,当然,您需要选择一个视频,所以让我们先这样做。在 HandBrake 窗口顶部的工具栏中,第一个选项显示“开源”。它不是指软件的性质(尽管它是实际上是开源软件),而是指使用您的操作系统的您可能已经不止一次看到过标准文件请求程序窗口。单击该按钮,然后导航到系统上您要编码为 webm 文件的视频。
现在您已经选择了一个文件,界面的一些位会更新一些新信息,您可以开始为您的转换选择选项。有很多有趣的选择,但对于这个答案,我们将关注与“如何创建 webm 视频文件?”问题相关的选择。而不是详细讨论每个选项。如果您对更多详细信息感兴趣,可以随时阅读HandBrake Documentation。
English (AC3)(5.1 ch)(48khz) Bitrate: 448kbps)。 -> 的右侧列出了您要从左侧转换为 到 的格式。这就是我们需要确保 Vorbis 或 Opus 的地方。.webm 文件,请确保您的文件名实际上以 .webm 结尾,或者您只是在使用 webm 流创建 Matroska 文件。 (完全有效,但是如果一些不太复杂的软件需要 webm 并且文件被命名为 something.mkv,尽管它们是相同的,只是文件名不同,可能会感到困惑。)此时您应该准备好单击工具栏中的“开始编码”以立即开始编码,或者如果您正在编码许多视频并且只想开始一个列表并全部完成,则可以单击“添加到队列”一个又一个自动。现在你就等着吧。这可能需要一段时间,所以请耐心等待。完成后它会通知您。
【讨论】: