FFMPEG 转换媒体类型以及重定位 MOOV 原子

Jim*_*Jim 6 video ffmpeg command-line

我在网上找到了这条线

ffmpeg -i input.mp4 -c:a copy -c:v copy -movflags faststart output.mp4
Run Code Online (Sandbox Code Playgroud)

它接受一个输入,并复制音频、视频并将 MOOV 原子设置为一个名为 output.mp4 的元素的开头。基本上在一个新的地方用 MOOV 原子创建相同的视频。

我需要转换这种媒体的类型 - 所以我有这条线

ffmpeg -i input.wmv -vcodec h264 -f mp4 output.mp4
Run Code Online (Sandbox Code Playgroud)

我的问题是,这可能在一行中吗?我知道我可以一个接一个地运行,但是当我只需要生成的视频时会创建几个视频,这可能会导致大量内存浪费。

我确定这条线

ffmpeg -i input.wmv -movflags faststart -vcodec h264 -f mp4 output.mp4 
Run Code Online (Sandbox Code Playgroud)

是合法的,但没有直接副本,这需要很长时间来计算。

欢迎任何关于 MOOV 原子和 ffmpeg 计算的输入。

llo*_*gan 6

复制流更快

您的第一个示例只是复制流,然后重新定位 moov 原子。这种重新定位允许视频在完全下载之前开始播放,例如观看者通过浏览器观看您的视频。

ffmpeg -i input.mp4 -codec copy -map 0 -movflags +faststart output.mp4
Run Code Online (Sandbox Code Playgroud)

编码较慢

与第二个示例一样,编码可能需要很长时间,具体取决于以下几个因素:输入的复杂性和持续时间、ffmpeg 和 x264 构建的编译方式、构建的时间(可能缺乏功能、改进和错误修复)、您的 CPU、使用的编码器以及您的编码设置。并非所有这些都可以控制,但您可以确保您使用的是最新版本,并且您可以更改编码设置以更好地满足您的需求。

获取 FFmpeg

静态构建易于使用:只需下载、提取和运行即可。有关适用于 Linux、Windows 和 OS X 用户的选项,请参阅FFmpeg 下载页面。您还可以编译,并且可以使用几个分步FFmpeg 编译指南

使用预设

使用 x264 编码时,您可以使用更快的编码预设:

ffmpeg -i in.wmv -codec:v libx264 -preset fast -movflags +faststart out.mp4
Run Code Online (Sandbox Code Playgroud)

预设是一组决定编码效率的选项,因此也会影响速度。当前预设为:ultrafastsuperfastveryfastfasterfastmediumslowslowerveryslowplacebo。默认为medium,placebo浪费时间。一般建议是简单地使用您有耐心的最慢的预设。有关更多信息,请参阅FFmpeg 和 x264 编码指南

-f mp4是不必要的,根据您的 ffmpeg 版本h264可以用作编码器名称,这是使用的约定libx264

  • '-movflags faststart' 运行第二遍移动文件顶部的 moov 原子。此操作可能需要一段时间,并且在碎片输出等各种情况下都不起作用,因此默认不启用。<-- 为什么这会“需要一段时间”?每当我使用 **ffmpeg -i input.mp4 -c:a copy -c:v copy -movflags faststart output.mp4** 运行它时,它都非常快。 (2认同)