Ffmpeg 如何创建webm视频文件?

Ffmpeg 如何创建webm视频文件?,ffmpeg,webm,Ffmpeg,Webm,在浏览了这个web项目之后,我没有看到任何证据表明有一种方法可以生成webm视频。我看到了Windows和Quicktime的驱动程序,但没有证据表明最常用的实用程序ffmpeg得到了支持 是否有产生webm的开源转换器?您可以使用ffmpeg转换为webm。请确保使用--enable libvpx和--enable libvorbis标志(请参阅)对其进行编译,或者访问页面以获取包含支持的构建的链接。之后,您可以使用以下命令(我使用input.flv作为示例输入文件): 有关更多信息,请参阅。

在浏览了这个web项目之后,我没有看到任何证据表明有一种方法可以生成webm视频。我看到了Windows和Quicktime的驱动程序,但没有证据表明最常用的实用程序ffmpeg得到了支持


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

您可以使用
ffmpeg
转换为webm。请确保使用
--enable libvpx
--enable libvorbis
标志(请参阅)对其进行编译,或者访问页面以获取包含支持的构建的链接。之后,您可以使用以下命令(我使用
input.flv
作为示例输入文件):


有关更多信息,请参阅。

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

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

链接到SDK下载:

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

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

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

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

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

首先,从源代码构建ffmpeg以包含libvpx驱动程序(即使您使用的是有libvpx驱动程序的版本,您也需要最新的驱动程序(从本月开始)来流式传输webm,因为它们只是添加了包含全局头的功能)。我在Ubuntu服务器和桌面上完成了这项工作,并向我展示了其他操作系统的操作说明

一旦您获得了合适版本的ffmpeg/ffserver,您就可以将它们设置为流媒体,在我的例子中,这是按如下方式完成的

在视频捕获设备上:

ffmpeg -f video4linux2 -standard ntsc -i /dev/video0 http://<server_ip>:8090/0.ffm
ffmpeg-f video4linux2-标准ntsc-i/dev/video0 http://:8090/0.ffm
  • 其中的“-f video4linux2-标准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>
端口8090
#绑定地址
MaxHTTPConnections 2000
MAXClients 100
最大带宽1000000
CustomLog/var/log/ffserver
诺达蒙
文件/tmp/0.ffm
文件最大大小5米
ACL允许
文件/tmp/0_webm.ffm
文件最大大小5米
ACL允许本地主机
饲料0.ffm
格式化MPEG1视频
诺奥迪奥
视频帧率25
视频比特率256
视频大小到岸价
视频缓冲区大小40
录像带12
馈送0_webm.ffm
格式webm
诺奥迪奥
视频编解码器libvpx
视频大小320x240
视频帧率24
AVOptionVideo标志+全局_标题
AVOptionVideo cpu使用了0
AVOptionVideo qmin 1
AVOptionVideo qmax 31
视频质量好
预滚0
斯塔森多基
视频比特率500K
格式状态
ACL允许
  • 注意:这是为feeder_ip上的服务器配置的,以执行上述ffmpeg命令,并为server_ip上的服务器配置的,因此,在处理server_ip上的mpeg到webm对话时,通过client_high_ip将server到client_low_ip(以下继续)
此ffmpeg命令在以前称为服务器ip的机器上执行(它处理实际的mpeg-->webm转换,并以不同的源将其反馈到ffserver):

ffmpeg-i http://:8090/0.mpg-vcodec libvpxhttp://localhost:8090/0_webm.ffm
一旦这些都启动(首先是ffserver,然后是feeder\u ip ffmpeg进程,然后是server\u ip ffmpeg进程),您应该能够访问http://:8090/0.webm上的实时流,并在http://:8090上检查状态/


希望这有帮助。

使用avconv尝试一下:

avconv -i inmovie.mp4 -flags global_header -strict experimental outmovie.webm

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

对于Windows和Linux:Miro Video Converter也是免费的、开源的,具有非常灵活的GUI。您可以在以下网址查看:Google:mirovideconverter

FFMPEG是一个命令行工具,我发现它是与webmd项目同步的最新工具。不要忘记查看webmproject站点提供的vp8编码选项。您还应该看看VPX编码指南:

另一篇文章提到了vpxenc.exe,但是,vpxenc.exe需要通过源代码进行编译

FFMEG示例使用:将{NPUT}和{OUTPUT}替换为文件位置。在Windows7上,我必须使用power shell(开始>附件>Windows power shell>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}

FFmpeg。MP4到WebM。拥有lipsync和高品质

$ 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 

默认情况下,CRF值可以在4–63之间,10是一个良好的起点。较低的值意味着更好的质量。

如果您正在寻找一种简单的图形化方法来实现这一点,另一个选择是(尽管手刹也有,以防您编写过程脚本,或者可能只是更喜欢命令行)。就像其他人在这里建议的
ffmpeg
一样,HandBrake在Linux、Mac和Windows上都可用,因此您使用的操作系统并不重要。过程和接口几乎完全相同

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

所以,要将视频编码到webm,当然,您需要选择一个视频,所以让我们先这样做。在手刹窗口顶部的工具栏中,第一个选项显示“开源”。它不涉及软件的性质(尽管它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 -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 
ffmpeg -i input.mp4 -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis output.webm