ffmpeg - 加速视频编码
问题描述
我的任务是从输入视频(.avi、.mov、.mp4 等)创建与 html5 兼容的视频。我的理解是我的输出应该是 .webm 或 .mp4(H264 视频,aac 音频)。我使用ffmpeg进行转换,需要很多时间。我想知道是否可以使用 ffprobe 来测试输入视频是否为“H264”和“aac”,如果是,那么也许我可以直接将视频/音频复制到输出中而无需修改。
即我有下一个想法:
- 使用 ffprobe 获取输入视频信息:
ffprobe {input} -v quiet -show_entries stream=codec_name,codec_type -print_format json
结果将是这样的 JSON:
"streams": [
{codec_name="mjpeg",codec_type="video"},
{codec_name="aac",codec_type="audio"}
]
- 如果 JSON 告诉视频编解码器是 h264,那么我想我可以复制视频流。如果 JSON 告诉音频编解码器是
h264aac,那么我想我可以复制音频流。 - 上面的 JSON 告诉我我的音频是“aac”。所以我想我可以将音频流复制到输出视频中,但仍然需要视频流转换。对于上面的示例,我的 ffmpeg 命令如下:
ffmpeg -i {input} -c:v libx264 -c:a copy ouput.mp4
问题是我是否总是可以使用这个想法来制作与 html5 兼容的视频,以及这种方法是否真的会加速视频转换。
解决方案
问题是我是否总是可以使用这个想法来制作兼容 html5 的视频
可能,但有一些警告:
- 您的输出可能使用 H.264 High profile,但您的目标设备可能不支持(但现在不太可能)。
- 确保像素格式为 yuv420p。如果不是,那么它可能无法播放,您将不得不重新编码
-vf format=yuv420p
。您可以pix_fmt
在您的-show_entries stream
. - 如果文件直接来自摄像机或其他编码效率低的设备,则文件大小可能对您的查看器来说过大。
- 添加
-movflags +faststart
到您的命令,以便视频可以在文件完全下载之前开始播放。
如果这种方法真的会加速视频转换。
是的,因为您只是快速的流复制(重新混合),而不是重新编码一些/所有缓慢的流。
推荐阅读
- json-ld - JSON-LD 应该放在我网站的什么位置?
- c# - 如何从 .aspx 读取用户输入并将其存储在 .aspx.cs 中的 SQL Server 数据库中
- python - 在这种情况下,if 代码块如何从 while 循环停止的地方继续?
- c# - 自动完成在使用 ajax 的网络表单中不起作用
- google-apps-script - 有没有办法在填写时使用应用程序脚本编辑 Google 表单?
- karate - 如何使用空手道跳过 SSL 证书验证?
- events - 命令 ID 与基础设施消息 ID 有何不同?
- javascript - 拒绝直接访问 IIS Web 服务器中的 JavaScript 文件
- git - git - 如何从远程存储库中获取特定文件
- javascript - 在嵌入的 PDF、Javascript 中插入超链接