如何创建webm视频文件?

时间:2011-08-05 10:23:26

标签: ffmpeg webm

在查看网络项目后,我看不到有关生成网络视频的方法的证据。我看到Windows和Quicktime的驱动程序,但没有证据表明支持最常见的实用程序ffmpeg。

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

感谢。

9 个答案:

答案 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
  • “-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,服务器配置为client_low_ip到client_high_ip,同时在server_ip上处理mpeg到webm会话(下面继续)。

此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

  • 启动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。“ Gain”和“ DRC”是指您的音频轨道是否太安静,以及整个轨道的高音和柔音之间是否存在巨大差异。在该窗口上单击“确定”以锁定您的选择。
  • 在窗口底部,您看到带有文件名的“另存为:”和带有文件夹的“ To:”。 “收件人:”是您可以选择文件保存位置的位置,“另存为:”是您选择要创建文件的名称的位置。确保如果您尝试创建一个.webm文件,您的文件名实际上以结尾 .webm,或者您只是使用webm流创建了一个Matroska文件。 (完全有效,但是某些复杂程度较低的软件如果期望使用webm且文件名是something.mkv,尽管它们是同一个东西,只是文件名不同,则可能会感到困惑。)

这时,您应该已经准备好单击工具栏中的“开始编码”以立即开始编码,如果您要编码许多视频并且只想开始一个列表并全部进行编码,则应单击“添加到队列”。接auto而至。现在,您只需等待。这可能需要一段时间,因此请耐心等待。它会在完成时通知您。

相关问题