我应该在 ffmpeg/mencoder/some_other_CLI_app 中执行哪些命令才能获得所有正确格式的视频适合所有人的视频?
即是否有一个微妙之处,可以防止出现机械教程,说
VIDEO=video.mp4
TYPE=$(ffmpeg --find-information-about-the-video ... )
ffmpeg ... > video.mov
ffmpeg ... > video.flv
ffmpeg ... > video.webm
ffmpeg ... > video.h.264
...
然后将 Video for Everybody 代码复制并粘贴到您的页面中?
我的目标是在我托管的个人网页中嵌入视频。首选带有 Flash 后备功能的 HTML5,因此最简单的方法似乎是 Video for Everybody。但该页面将最复杂的部分(将视频编码为各种不同格式)留给读者通过阅读来弄清楚一篇关于视频格式的长而完整的文章。当然这不是必要的。我可以为用户提供一系列命令,让他们盲目地将音频文件转换为多种不同的格式。希望 ffmpeg 专家可以对视频做同样的事情。
答案1
笔记:这个答案可能不是你需要的,自 2012 年首次发布以来,它已被大量编辑。现在是 2022 年;流媒体的工作方式与以前不同。本指南假设以给定的分辨率(例如 1080p)对一个视频文件进行简单的渐进式下载 - 没有自适应流媒体。如果您需要自适应流媒体(MPEG-DASH 或 HLS),请搜索其他指南。
要求
首先,确保下载最新ffmpeg
版本(下载静态构建;不要调用apt-get install ffmpeg
或类似)。
要生成大多数浏览器支持的视频,请始终检查最新的兼容性表. 最常支持的视频编解码器和容器是:
- MP4 容器中的 H.264 或 H.265 视频
- WebM/MKV 容器中的 VP9 或 AV1 视频
由于 H.264 和 VP9 编码速度更快,因此本回答仅关注它们。要使用其他编解码器(H.265、AV1),请检查FFmpeg Wiki 编码指南。
WebM(VP9/Vorbis)
遵循FFmpeg VP9 指南并使用具有速率约束的两遍编码方法:
ffmpeg -y -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libopus -pass 1 -f webm /dev/null && \
ffmpeg -i input-c:v libvpx-vp9 -b:v 2000k -minrate 500k -maxrate 2500k -c:a libopus -pass 2 output.webm
目标比特率取决于您的分辨率、帧速率、内容类型以及您想要的质量。对于 30 fps 的高清视频,2.5 MBit/s 应该是一个不错的折衷方案。请参阅这个谷歌指南以获得一些建议。
MP4(H.264 / AAC)
遵循FFmpeg H.264 指南并使用具有速率限制的两遍编码方法。对于流式应用程序,两遍比特率方法是首选:
ffmpeg -y -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 1 -an -f mp4 /dev/null && \
ffmpeg -i input -c:v libx264 -b:v 5000k -minrate 1000k -maxrate 8000k -pass 2 -c:a aac -b:a 192k -movflags faststart output.mp4
这里的目标比特率应该比 VP9 视频高出约 50%,因为 H.264 效率不高。将该-movflags faststart
选项添加到第二遍可加快视频的初始加载速度。
要设置音频选项,请参阅AAC 编码指南。