无质量损失的ffmpeg转换

无质量损失的ffmpeg转换,ffmpeg,loss,Ffmpeg,Loss,当文件类型不是flv/mp4/webm时,我需要将所有视频转换为我的视频播放器(在网站中) 使用时:ffmpeg-I filename.mkv-sameq-ar 22050 filename.mp4: [h264@0x645ee0]解码MB 22 1时出错,字节流(8786) 我的观点是,当我需要将文件类型:.mkv和其他(jwplayer不支持)转换为flv/mp4而不丢失质量时,我应该做什么。不要使用 此选项不久前已从FFmpeg中删除。这意味着您使用的是过时的版本 使用libx264编码时

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

使用时:
ffmpeg-I filename.mkv-sameq-ar 22050 filename.mp4

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

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

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

使用libx264编码时,请使用
-crf
选项。这是ffmepg使用的H.264视频编码器,如果可用,是MP4输出的默认编码器。有关这方面的更多信息,请参阅

获取最近的
ffmpeg
转到页面并在那里获得一个构建。Linux、OS X和Windows都有选项。或者,您可以按照其中一种方法进行操作。由于FFmpeg开发非常活跃,因此始终建议您使用实用的最新版本

你将不得不接受一些质量损失 您可以使用libx264生成无损输出,但这可能会创建绝对巨大的文件,并且浏览器可能无法解码和/或JW Player支持(我从未尝试过)

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

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

其他事情
  • 添加
    -movflags+faststart
    。这将把moov原子从文件的末尾重新定位到开头。这将允许视频在下载过程中开始播放。否则,必须完全下载整个视频才能开始播放

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


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


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

对我来说,这是转换文件的最佳方式

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

ffmpeg -i {input} -qscale 0 copy {output}
有些文件夹的块数超过500个


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

回答解释如何在不重新编码的情况下复制(ffmpeg-i input.mkv-c copy-map 0 output.mp4)@mpromonet如果您想保留编解码器,
-c copy
可以,但要转换编解码器并保持相同的质量,我必须使用
-qscale 0
,就像我在回答中读到的那样。对我来说,一个简单的
ffmpeg-I input_file.mkv output_file.mp4
完成了这个技巧。@ThiagoNegri将重新编码所有内容;使用“复制”可以潜在地避免这样做
-qscale
,或者更准确地说
-qscale:v
,应该只用于传统的MPEG系列:mjpeg、mpeg1video、mpeg2video、mpeg4等。它被使用
-crf
的libx264和libx265忽略。@LordNeckbeard等等,如果您正在从mpeg4转换呢(例如mp4v)到H.264,两者都涉及?@Michael输入格式不重要:只有用于输出的编码器才重要。这是因为ffmpeg将把输入分解成原始格式,而不管输入格式如何。然后编码器将原始格式处理成输出。(当然,除非您使用
-c copy
进行流复制,否则不会重新编码)。ffmpeg 4.2.1抛出黄色“请使用-q:a或-q:v,-qscale不明确”消息当使用
-qscale 0
时,最好澄清CRF是什么,它做什么以及如何使用此参数。CRF代表恒定速率系数。引用ffmpeg文档:“CRF等级的范围是0到51,其中0是无损的,23是默认的,51是最差的质量。较低的值通常会导致更高的质量,主观理智范围是17到28。考虑17或18是视觉上的无损或几乎是这样。”有用的链接:@ AlexanderMosov有一个链接到wiki,你在我的答案中引用。
ffmpeg -i {input} -qscale 0 copy {output}