使用 ffmpeg 为 HTML5 编码视频
问题:
你有一个视频文件,想将其编码为支持大多数设备上当前可用的所有三种 HTML5 编解码器(WebM、Theora 和 H.264)。
解决方案
你可以使用 ffmpeg 完成此任务。
在 Linux 上,你可以使用以下 bash 脚本,假设你已安装 ffmpeg
ffmpeg_encode_commands.sh
#!/bin/bash
#从文件名中剥离路径和扩展名
strippedFilename=$(echo $1 | rev | cut -d/ -f1 | cut -d. -f2- | rev)
resolution=640x360
#编码 H.264
avconv -i $1 -b 1500k -vcodec libx264 -vpre slow -vpre baseline -g 30 -s $resolution ${strippedFilename}.mp4
#编码 WebM
avconv -i $1 -b 1500k -vcodec libvpx -acodec libvorbis -ab 160000 -f webm -g 30 -s $resolution ${strippedFilename}.webm
#编码 Theora
avconv -i $1 -b 1500k -vcodec libtheora -acodec libvorbis -ab 160000 -g 30 -s $resolution ${strippedFilename}.ogv
#提取缩略图
avconv -i $1 -ss 00:10 -vframes 1 -r 1 -s $resolution -f image2 ${strippedFilename}.jpg记住根据你期望的视频质量调整分辨率变量(如果你想使用原始分辨率则完全移除 -s 选项)。如果带宽比质量更重要,640x480 对我来说似乎是一个好的解决方案。如果你让它加载几秒钟,甚至在 2G 连接上也可查看。
注意 avconv 是新版本中 ffmpeg 工具的替代品。ffmpeg 本身已弃用。如果你有旧版本的 ffmpeg,只需将上面脚本中所有 avconv 替换为 ffmpeg。
脚本还创建缩略图,参见最后一条命令。
你也可以使用此修改版本的脚本,它不剥离双重扩展名或目录,例如编码 video.avi 时,你会得到 video.avi.mp4 而不是 video.mp4。当你需要编码已经具有要生成的扩展名之一(.mp4、.ogv 或 .webm)的文件且需要此文件在当前目录中时,使用修改版本。
encode_for_html5.sh
#!/bin/bash
#编码 H.264
avconv -i $1 -b 1500k -vcodec libx264 -vpre slow -vpre baseline -g 30 -s 640x360 $1.mp4
#编码 WebM
avconv -i $1 -b 1500k -vcodec libvpx -acodec libvorbis -ab 160000 -f webm -g 30 -s 640x360 $1.webm
#编码 Theora
avconv -i $1 -b 1500k -vcodec libtheora -acodec libvorbis -ab 160000 -g 30 -s 640x360 $1.ogv
#提取缩略图
avconv -i $1 -ss 00:10 -vframes 1 -r 1 -s 640x360 -f image2 $1.jpg命令取自此博客条目并修改为在 Linux 上适当工作。有关 Windows 解决方案,请参见原始帖子。
Check out similar posts by category:
Allgemein
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow