在查看网络项目后,我看不到有关生成网络视频的方法的证据。我看到Windows和Quicktime的驱动程序,但没有证据表明支持最常见的实用程序ffmpeg。
是否有任何产生webm的开源转换器?
感谢。
答案 0 :(得分:58)
您可以使用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。
答案 1 :(得分:5)
我最近设置了这个,但这有点痛苦。这就是我必须做的事情:
首先,从源代码构建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 - &gt; webm转换并将其反馈到另一个Feed上的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 /
希望这有帮助。
答案 2 :(得分:3)
对于Linux: 可用于Linux的vp8和vp9编解码器的开源软件是用于gnome桌面的Arista。谷歌:Arista Transcoder
适用于Windows&amp; Linux: Miro Video Converter也是免费的开源软件,具有非常灵活的GUI。您可以访问:Google: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上,我必须使用电源外壳(开始&gt;附件&gt; Windows Power Shell&gt; Power Shell)并提供ffmpeg,输入和输出的完整位置。请注意,参数 -vcodec libvpx 默认使用VP8。要使用VP9替换 -vcodec libvpx-vp9
WedmbSD
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}
答案 3 :(得分:3)
ffmpeg -i input.mp4 -c:v libvpx -crf 10 -b:v 1M -c:libvorbis output.webm
默认情况下,CRF值可以是4-63,而10是一个很好的起点。值越低意味着质量越好。
答案 4 :(得分:2)
MiroVideoConverter是ffmpeg的一个很好的跨平台和开源包装器,特别支持转换为WebM。
答案 5 :(得分:2)
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
答案 6 :(得分: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
HTH
答案 7 :(得分:0)
使用avconv
:
avconv -i inmovie.mp4 -flags global_header -strict experimental outmovie.webm
答案 8 :(得分:0)
如果您正在寻找一种简单的图形方法来实现此目的,则可以选择HandBrake (尽管HandBrake 确实也有commandline flavor如果您正在编写脚本,或者只是喜欢使用命令行)。就像其他人在这里建议的ffmpeg
一样,HandBrake可在Linux,Mac和Windows上使用,因此无论使用哪种操作系统都没关系。流程和界面几乎完全相同。
现在,.webm
容器基本上只是一个Matroska文件,但真正使它成为webm的却是它包含的流。根据{{3}},视频流必须为VP8或VP9,音频流必须为Vorbis或Opus,因此使用HandBrake时,您需要确保正确设置了这些选项
因此,要自然地将视频编码为webm,您需要选择一个视频,因此我们首先进行选择。在HandBrake窗口顶部的工具栏中,第一个选项为“ Open Source”。它不是指软件的性质(即使它实际上是是开源软件),而是指使用操作系统的操作系统打开视频源。标准文件请求者窗口,您可能已经看过多次了。单击该按钮,然后导航到系统上要编码为webm文件的视频。
现在您已经选择了一个文件,界面的一些内容会随着一些新信息更新,您可以开始选择转换选项。有很多有趣的选择,但是对于这个答案,我们将重点关注与“如何创建webm视频文件?”问题相关的选择。而不是详细介绍每个选项。如果您对更多详细信息感兴趣,可以随时阅读WebM Project。
English (AC3)(5.1 ch)(48khz) Bitrate: 448kbps
之类的东西)。 ->
的右侧列出了您要从左侧的转换为的格式。那是我们需要确保Vorbis或Opus的地方。.webm
文件,您的文件名实际上以结尾 .webm
,或者您只是使用webm流创建了一个Matroska文件。 (完全有效,但是某些复杂程度较低的软件如果期望使用webm且文件名是something.mkv
,尽管它们是同一个东西,只是文件名不同,则可能会感到困惑。)这时,您应该已经准备好单击工具栏中的“开始编码”以立即开始编码,如果您要编码许多视频并且只想开始一个列表并全部进行编码,则应单击“添加到队列”。接auto而至。现在,您只需等待。这可能需要一段时间,因此请耐心等待。它会在完成时通知您。