如何创建webm视频文件?

Mar*_*eau 47 ffmpeg webm

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

有没有生产webm的开源转换器?

谢谢.

mat*_*boy 60

您可以使用ffmpeg转换为webm.确保使用--enable-libvpx--enable-libvorbisflags 编译它(请参阅FFmpeg编译指南),或访问FFmpeg下载页面以获取包含支持的构建的链接.之后,您可以使用以下命令(我input.flv用作我的示例输入文件):

ffmpeg -i input.flv -vcodec libvpx -acodec libvorbis output.webm
Run Code Online (Sandbox Code Playgroud)

有关其他信息,请参阅FFmpeg vpx(WebM)编码指南.

  • 或者带有质量标志的别名短版本(范围在0(低)和10(高)之间):`ffmpeg -i input.flv -q:v 10 -c:v libvpx -c:a libvorbis output.webm` (14认同)
  • 正如文档中所述,设置比特率非常重要:`重要:如果既未设置-b:v也未设置-crf,编码器将使用低默认比特率,结果可能看起来非常糟糕.始终提供其中一个选项 - 最好是两个选项.https://trac.ffmpeg.org/wiki/vpxEncodingGuide (9认同)

小智 10

ffmpeg -i input.mp4 -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis output.webm
Run Code Online (Sandbox Code Playgroud)

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


Cor*_*ryG 6

我最近设置了它,但这是一种痛苦.这就是我必须做的事情:

首先,从源代码构建ffmpeg以包含libvpx驱动程序(即使您使用的是具有它的版本,您需要最新的(截至本月)才能流式传输webm,因为它们刚刚添加了包含全局标头的功能).我在Ubuntu服务器和桌面上做了​​这个,本指南向我展示了如何 - 可以在这里找到其他操作系统的说明.

一旦你得到了适当版本的ffmpeg/ffserver,就可以设置它们用于流式传输,在我的例子中,这是按照如下方式完成的.

在视频捕获设备上:

ffmpeg -f video4linux2 -standard ntsc -i /dev/video0 http://<server_ip>:8090/0.ffm
Run Code Online (Sandbox Code Playgroud)
  • "-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>
Run Code Online (Sandbox Code Playgroud)
  • 请注意,这是为feeder_ip上的服务器配置执行上述ffmpeg命令,为server_ip上的服务器配置服务器,通过client_high_ip配置client_low_ip,同时在server_ip上处理mpeg到webm会话(下面继续).

这个ffmpeg命令在以前称为server_ip的机器上执行(它处理实际的mpeg - > webm转换并将其反馈到另一个feed上的ffserver中):

ffmpeg -i http://<server_ip>:8090/0.mpg -vcodec libvpx http://localhost:8090/0_webm.ffm
Run Code Online (Sandbox Code Playgroud)

一旦这些全部启动(首先是ffserver,然后是feeder_ip ffmpeg进程,然后是server_ip ffmpeg进程),你应该能够访问http://:8090/0.webm的实时流并检查http的状态://:8090 /

希望这可以帮助.