当文件类型不是 flv/mp4/webm 时,我需要将所有视频转换为我的视频播放器(在网站中)。
当我使用: ffmpeg -i filename.mkv -sameq -ar 22050 filename.mp4
:
[h264 @ 0x645ee0] 解码 MB 22 1 时出错,字节流 (8786)
我的意思是,当我需要将文件类型: .mkv 和其他(jwplayer 不支持)转换为 flv/mp4 而不损失质量时,我应该怎么做。
-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 播放器播放。
代替 -sameq(由 FFMpeg 删除),使用-qscale 0
:文件大小会增加,但会保持质量。
将所有 mkv 转换为 mp4 而不会造成质量损失(实际上只是重新打包):
for %a in ("*.mkv") do ffmpeg.exe -i "%a" -vcodec copy -acodec copy -scodec mov_text "%~na.mp4"
对我来说,这是转换它的最佳方式。
ffmpeg -i {input} -vcodec copy {output}
我正在用 python 编写一个脚本,将多个 .webm 文件附加到一个 .mp4 中。我花了 10 到 20 秒来转换一块 5 秒的时间,使用:
ffmpeg -i {input} -qscale 0 copy {output}
有一些文件夹超过 500 个块。
现在每个块只需要不到一秒钟的时间。我花了 5 分钟来转换一个 1:20:00 的长视频。