19

当文件类型不是 flv/mp4/webm 时,我需要将所有视频转换为我的视频播放器(在网站中)。

当我使用: ffmpeg -i filename.mkv -sameq -ar 22050 filename.mp4:

[h264 @ 0x645ee0] 解码 MB 22 1 时出错,字节流 (8786)

我的意思是,当我需要将文件类型: .mkv 和其他(jwplayer 不支持)转换为 flv/mp4 而不损失质量时,我应该怎么做。

4

4 回答 4

24

不使用-sameq,不代表“质量一样”

此选项已在不久前从 FFmpeg 中删除。这意味着您使用的是过时的版本。

-crf使用libx264 进行编码时,请改用该选项。这是 H.264 视频编码器ffmepg,如果可用,它是 MP4 输出的默认编码器。有关更多信息,请参阅FFmpeg H.264 视频编码指南

获取最近的ffmpeg

转到FFmpeg 下载页面并在那里进行构建。有适用于 Linux、OS X 和 Windows 的选项。或者,您可以遵循FFmpeg 编译指南之一。由于 FFmpeg 开发非常活跃,因此始终建议您使用实用的最新版本。

你将不得不接受一些质量损失

您可以使用 libx264 生成无损输出,但这可能会创建绝对巨大的文件,并且可能无法被浏览器解码和/或被 JW Player 支持(我从未尝试过)。

好消息是,您可以创建大致视觉无损的视频。同样,文件可能有点大,但您需要在质量和文件大小之间做出选择。

-crf选择一个介于 18 到 29 之间的值。选择仍能提供可接受质量的最高数字。为您的视频使用该值。

其他事情

  • 添加-movflags +faststart. 这会将 moov 原子从文件末尾重新定位到开头。这将允许视频在下载时开始播放。否则,必须完全下载整个视频才能开始播放。

  • 添加-pix_fmt yuv420p. 这将确保对所有播放器都兼容的色度子采样。否则,ffmpeg默认情况下,取决于几个因素,将尝试最小化或避免色度二次采样,结果通常无法由非 FFmpeg 播放器播放。

于 2014-08-29T17:15:03.670 回答
20

代替 -sameq(由 FFMpeg 删除),使用-qscale 0:文件大小会增加,但会保持质量。

于 2018-01-05T09:10:13.177 回答
7

将所有 mkv 转换为 mp4 而不会造成质量损失(实际上只是重新打包):

for %a in ("*.mkv") do ffmpeg.exe -i "%a" -vcodec copy -acodec copy -scodec mov_text "%~na.mp4"
于 2015-01-10T16:56:44.177 回答
2

对我来说,这是转换它的最佳方式。

ffmpeg -i {input} -vcodec copy {output}

我正在用 python 编写一个脚本,将多个 .webm 文件附加到一个 .mp4 中。我花了 10 到 20 秒来转换一块 5 秒的时间,使用:

ffmpeg -i {input} -qscale 0 copy {output}

有一些文件夹超过 500 个块。

现在每个块只需要不到一秒钟的时间。我花了 5 分钟来转换一个 1:20:00 的长视频。

于 2020-07-28T20:18:13.330 回答