0°

FFmpeg的使用,webm格式转mp4

如何轻松将WEBM转换为MP4

WebM是由Google提出,一个开放、免费的视听媒体文件格式。

由于使用还不是很普遍,很多电脑、设备和智能手机都需要插件、组件和其他特定要求来播放WebM文件。

因此为了避免这种麻烦,我们需要将WebM格式转换成常用的MP4格式。

H264编码

这里先来谈一下我们比较熟悉的H264编码格式。

H.264也被称为AVC,适用于视频摄像机、蓝光播放器和很多其他设备。

从技术上来说,H.264代表了当前业界最先进的视频压缩技术,能够在较低带宽(2M以内)情况下提供高质量(类似DVD画质)的图像传输。

H264编码技术是由微软、三星、索尼和东芝等公司在内的很多专利做支持,所以各种技术类产品中如果要使用到H264编解码技术都是要征收高昂的许可费。

相比之下,WebM则一直是一款开源的、免费的技术。

它的视频编码格式是VP8,另外结合了另外一款免费的音频编解码技术Theora。这可能也是谷歌另起炉灶的原因吧。

市面上关于WebM转码成MP4的转换器也不是很多,今天就来介绍两种方法帮助大家来解决这个问题。

FFmpeg基础使用

摘取《ffmpeg基础使用》:https://www.jianshu.com/p/ddafe46827b7

FFmpeg win64位下载地址

ffmpeg win64位安装包

提取码:zhla,解压码:无

下载

32位系统下载链接:https://down.moerats.com/FFmpeg/

常用命令

ffmpeg使用.png

1. 视频格式转换

比如一个avi文件,想转为mp4,或者一个mp4想转为ts。

ffmpeg -i input.avi output.mp4

ffmpeg -i input.mp4 output.ts

2. 提取音频

我只保留声音,不需要视频

ffmpeg -i input.mp4 -acodec copy -vn output.aac

上面的命令,默认mp4的audio codec是aac,如果不是会出错,咱可以暴力一点,不管什么音频,都转为最常见的aac。

ffmpeg -i 晓松奇谈.mp4 -acodec aac -vn output.aac

(-vn 不处理视频 )

3. 提取视频

只保留视频,不需要声音。

ffmpeg -i input.mp4 -vcodec copy -an output.mp4

-an 不处理音频

4. 视频剪切

经常要测试视频,但是只需要测几秒钟,可是视频却有几个G,我们需要截取功能。

下面的命令,就可以从时间为00:00:15开始,截取5秒钟的视频。

ffmpeg -ss 00:00:15 -t 00:00:05 -i input.mp4 -vcodec copy -acodec copy output.mp4

-ss表示开始切割的时间,-t表示要切多少。上面就是从开始,切5秒钟出来。

摘自使用 MediaSource 搭建流式播放器

注意一个问题,ffmpeg 在切割视频的时候无法做到时间绝对准确,因为视频编码中关键帧(I帧)和跟随它的B帧、P帧是无法分割开的,否则就需要进行重新帧内编码,会让视频体积增大。所以,如果切割的位置刚好在两个关键帧中间,那么 ffmpeg 会向前/向后切割,所以最后切割出的 chunk 长度总是会大于等于应有的长度。

5. 码率控制

码率控制对于在线视频比较重要。因为在线视频需要考虑其能提供的带宽。

那么,什么是码率?

很简单: bitrate = file size / duration

比如一个文件20.8M,时长1分钟,码率就是:

biterate = 20.8M bit/60s = 20.8*1024*1024*8 bit/60s= 2831Kbps

一般音频的码率只有固定几种,比如是128Kbps。

那么视频码率就是

video biterate = 2831Kbps -128Kbps = 2703Kbps。

ffmpg控制码率有3种选择

-minrate -b:v -maxrate

  • -b:v主要是控制平均码率。 比如一个视频源的码率太高了,有10Mbps,文件太大,想把文件弄小一点,但是又不破坏分辨率。 ffmpeg -i input.mp4 -b:v 2000k output.mp4上面把码率从原码率转成2Mbps码率,这样其实也间接让文件变小了。目测接近一半。
  • 不过,ffmpeg官方wiki比较建议,设置b:v时,同时加上 -bufsize
    -bufsize 用于设置码率控制缓冲器的大小,设置的好处是,让整体的码率更趋近于希望的值,减少波动。(简单来说,比如1 2的平均值是1.5, 1.49 1.51 也是1.5, 当然是第二种比较好) ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k output.mp4
  • -minrate -maxrate就简单了,在线视频有时候,希望码率波动,不要超过一个阈值,可以设置maxrate。
    ffmpeg -i input.mp4 -b:v 2000k -bufsize 2000k -maxrate 2500k output.mp4

6. 视频编码格式转换

比如一个视频的编码是MPEG4,想用H264编码

ffmpeg -i input.mp4 -vcodec h264 output.mp4

相反也一样

ffmpeg -i input.mp4 -vcodec mpeg4 output.mp4

当然了,如果ffmpeg当时编译时,添加了外部的x265或者X264,那也可以用外部的编码器来编码。(不知道什么是X265,可以Google一下,简单的说,就是她不包含在ffmpeg的源码里,是独立的一个开源代码,用于编码HEVC,ffmpeg编码时可以调用它。当然了,ffmpeg自己也有编码器)

ffmpeg -i input.mp4 -c:v libx265 output.mp4

ffmpeg -i input.mp4 -c:v libx264 output.mp4

7.改变视频分辨率

将输入的1920×1080缩小到960×540输出:

ffmpeg -i input.mp4 -vf scale=960:540 output.mp4


ps: 如果540不写,写成-1,即scale=960:-1, 那也是可以的,ffmpeg会通知缩放滤镜在输出时保持原始的宽高比。

WEBM转MP4格式

方法一: FFMPEG转格式

关于webm转mp4的代码

ffmpeg -i “输入文件.webm” -b:v 2000k -bufsize 2000k -maxrate 2500k “输出文件.mp4”

其中 -b:v 2000k -bufsize 2000k -maxrate 2500k 可以根据自己需要调整。如果对视频文件大小和码率大小没有要求可以不加。

-b:v 控制平均码率,希望视频清晰一些可以调大一些。

-bufsize 设置码率控制缓冲器区间,根据需要可以调整。

-maxrate 2500k 视频最大码率,主要是为了控制文件大小。

方法二:在线网站转格式

在线网站转格式网站: convertio.co

网站使用的方法很简单,把文件上传上去确认即可,网站最大支持500M的文件转码,想要升级功能也可以付费。

赞赏
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论