手刹设置可将MKV转换为MP4,同时保持原始质量


44

我有大量的MKV文件需要转换为MP4,我选择的软件是Handbrake。

我一直坚持哪种设置最适合转换。我想保持完整的品质。我是否仅使用原始设置进行转换,而不更改任何内容,还是需要更改任何特定内容?


在手刹的设置在这里是非常详细的指导mattgadient.com/2013/06/12/...
janot

我在某些文件上出现错误(对于mkv到mp4以及mp4到mkv):输出文件#0不包含任何流。有人知道这意味着什么吗?
PrimitiveNom

Answers:


85

手刹有什么问题?

当您使用Handbrake将一种容器格式转换为另一种容器格式(即您的情况下从MKV转换为MP4)时,Handbrake将重新编码视频。另请参阅将启用视频传递的相应功能请求

抱歉,未计划添加视频直通。HandBrake被设计为视频转码器。它并非旨在允许通过。

因此,无论何时使用Handbrake更换容器,您的视频都将被重新编码,这意味着a)需要时间,b)可能会导致质量下降。

我需要重新编码吗?我不能只交换容器吗?

由于无法通过,请问问自己:我需要重新编码吗?如果您只想将容器从MKV更改为MP4,通常不需要编码,只需更改视频周围的“包装”即可。这不会失去质量,这将是一个更快的过程。

您可以使用FFmpeg轻松地交换容器-您只需要告诉它复制视频和音频流即可:

ffmpeg -i input.mkv -c copy -map 0 output.mp4

还有诸如MP4Box之类的工具,它们也可以创建MP4容器-具有MKVtoolnix的 MKV也存在相同的工具

但是,有一个很大的警告:仅当目标(MP4)容器中支持音频和视频编解码器时,此方法才有效,例如H.264 / H.265和AAC就是这种情况,而其他许多情况则不是。另外,对MP4的字幕格式支持与MKV不同,并且实际上受到很大限制,因此此命令可能会失败。

如果此命令不起作用,并且您的输入对输出容器使用了错误的编解码器,则可能必须重新编码。在这种情况下,编解码器将适应输出容器。

要了解为什么需要这样做,了解视频编解码器和容器之间区别非常重要。实际上,这将帮助您理解为何更改容器有效以及为何MP4和MKV容器与视频编解码器几乎没有关系。

无论如何,为什么重新编码不好?

编码已经编码的视频时,您通常不能保持完整的质量。这是因为原始文件已经通过丢弃信息而被压缩,而再次执行此操作则会引入世代损失

通常,您想在视频尺寸发生变化时重新编码视频,或者需要特定的比特率将视频流压缩到其中,或者原始视频使用的编解码器由于某种原因而无法播放。

因此,如果将MKV视频加载到Handbrake中,然后用x264重新编码,则Handbrake使用的H.264编码器将其存储在MP4容器中,无论如何,质量都会下降,除非您设置了比特率或品质因数如此之高,以至于您(真的)看不到差异。但是,文件大小也会变大。

在理想的情况下,您可以将视频转换为未压缩的视频,这不会损失任何质量,但是即使是几分钟的视频素材,也可以提供12 GB的文件大小。

好的,但是我真的必须重新编码!

如果确实需要重新编码,请确保不要设置平均比特率,而应选择“ 恒定速率因子”,例如“恒定质量”。就像MP3的“可变比特率”一样:它将确保将比特花费在需要它们的视频部分上,并以相同的文件大小提高整体质量。

Sane CRF值在19到24之间,其中“ lower”(低)表示“更好”。因此,您可以尝试使用19的速率因子。此外,请确保设置“高”配置文件,这使编码器可以使用所有铃声,并针对给定的比特率优化质量。


谢谢!看来您是唯一一个关心这个问题并帮助我的人,我按照您的建议进行操作,并且质量与原始版本相同!:)
橙色

对于某些mkv文件,此操作将失败(无法为输出文件写标题...错误的编解码器)。使用ffprobe -i file.mkv查看a / v的格式,您可能需要使用x264视频和aac / ac3音频进行
重新

u 100%确定重新包装文件不会造成质量损失?
PrimitiveNom

1
@BallpointBen不可能,没有:github.com/HandBrake/HandBrake/issues/…–
slhck

1
@Hashim我尝试根据要求澄清该帖子。关于您的问题,由于手刹不允许通过,因此从MP4转换为MKV 导致质量下降。这将花费很多时间。只要做ffmpeg -i input.mp4 -c copy output.mkv,你就可以了。
slhck

4

这对我来说很好。以下是将Windows中所有.mkv转换为.mp4文件的代码。

  • 您可能需要将ffmpeg添加到您的路径。您可以将完整路径放在ffmpeg可执行文件D:\ apps \ ffmpeg \ bin \ ffmpeg.exe中
  • 在此处下载适用于Windows的ffmpeg。
  • 用法:将.mkv文件拖放到该文件上。它将执行整个目录。

保存在名为convert.bat的文件中。

for %%a in ("*.mkv") do ffmpeg.exe -i "%%a" -vcodec copy -acodec copy "%%~na .mp4"
pause

奇迹般有效。
Kit Johnson

我将其放在带有ffmpeg.exe的文件夹中,然后将其更改为for %%a in ("*.mkv") do %~dp0ffmpeg.exe -i "%%a" -vcodec copy -acodec copy "%%~na .mp4"
davidtbernal
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.