当文件类型不是flv/mp4/webm时,我需要将所有视频转换为我的视频播放器(在网站中).
当我使用ffmpeg -i filename.mkv -sameq -ar 22050 filename.mp4::
解码MB 22 1,字节流(8786)时出现[h264 @ 0x645ee0]错误
我的观点是,当我需要将文件类型:.mkv和其他(jwplayer不支持)转换为flv/mp4时,我应该做什么,而不会丢失质量.
llo*_*gan 18
-sameq,它并不意味着"相同的质量"这个选项刚刚从FFmpeg中删除了.这意味着您使用的是过时的构建.
使用-crflibx264进行编码时,请使用该选项.这是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:文件大小会增加,但会保持质量。
小智 7
将所有mkv转换为mp4而不会造成质量损失(实际上它只是重新打包):
for %a in ("*.mkv") do ffmpeg.exe -i "%a" -vcodec copy -acodec copy -scodec mov_text "%~na.mp4"
Run Code Online (Sandbox Code Playgroud)