有可能在h264中进行完全无损编码吗?所谓无损,我的意思是如果我给它提供一系列的帧并对它们进行编码,然后如果我从编码的视频中提取所有帧,我将得到与输入中完全相同的帧,逐个像素,逐帧。这真的可能吗?举个例子:
我生成一堆帧,然后我将图像序列编码为未压缩的AVI (使用类似virtualdub的东西),然后应用无损h264 (帮助文件声称设置--qp 0使无损压缩,但我不确定这是否意味着在过程的任何点都没有损失,或者只是量化是无损的)。然后,我可以使用类似于mplayer的东西从生成的h264视频中提取帧。
我先试了一下手闸,但发现它不支持无损编码。我尝试过x264,但它崩溃了。这可能是因为我的源AVI文件是在RGB色彩空间,而不是YV12。我不知道如何向x264提供一系列的YV12位图以及以什么格式,所以我甚至不能尝试。
总而言之,我想知道的是,如果有一种方法可以从
无损位图序列(在任何颜色空间中)编码一些变换-> -> h264 -> h264解码->一些变换->原始系列无损位图
如果有办法做到这一点呢?
编辑:关于无损H264没有太多意义,这是一个非常有效的观点。我很清楚,我没有办法(用我的眼睛)分辨出H264中未压缩的剪辑和另一个高速压缩的剪辑之间的区别,但我不认为它是没有用的。例如,它可能有助于存储视频以供编辑,而不会占用大量空间,并且不会在每次保存文件时损失质量和花费太多编码时间。
更新2:现在x264不会崩溃。我可以使用avisynth或无损yv12 lagarith作为源(以避免色彩空间压缩警告)。然而,即使使用--qp0和rgb或yv12源代码,我仍然得到了一些差异,虽然很小,但仍然存在。这很麻烦,因为我在无损预测编码(--qp 0)上找到的所有信息都声称整个编码应该是无损的,但我无法验证这一点。
发布于 2013-08-29 17:05:33
在花了一整天的时间试图弄清楚如何将YUV4:4:4像素放入x264之后,我将为这个问题添加一个延迟的答案。虽然x264确实接受文件中的原始4:2:0像素,但要传入4:4:4像素确实相当困难。对于最新版本的ffmpeg,以下代码用于完全无损编码和提取以验证编码。
首先,将原始yuv 4:4:4像素写入平面格式的文件。平面是一组Y字节,然后是U和V字节,其中U和V使用128作为零值。现在,调用ffmpeg并传入原始YUV帧的大小作为使用"yuv444p“像素格式两次,如下所示:
ffmpeg -y -s 480x480 -pix_fmt yuv444p -i Tree480.yuv \
-c:v libx264 -pix_fmt yuv444p -profile:v high444 -crf 0 \
-preset:v slow \
Tree480_lossless.m4v一旦完成对h264的编码并包装为Quicktime文件,就可以提取完全相同的字节,如下所示:
ffmpeg -y -i Tree480_lossless.m4v -vcodec rawvideo -pix_fmt yuv444p \
Tree480_m4v_decoded.yuv最后,使用diff验证这两个二进制文件:
$ diff -s Tree480.yuv Tree480_m4v_decoded.yuv
Files Tree480.yuv and Tree480_m4v_decoded.yuv are identical请记住,您需要自己将YUV字节写入文件,不要让ffmpeg对YUV值进行任何转换!
发布于 2011-07-15 09:56:29
如果x264做了无损编码,但是不喜欢您的输入格式,那么最好的办法就是使用ffmpeg来处理输入文件。试着从这样的东西开始
ffmpeg -i input.avi -f yuv4mpegpipe -pix_fmt yuv420p -y /dev/stdout \
| x264 $OPTIONS -o output.264 /dev/stdin并从那里添加选项。YUV4MPEG是一种无损的未压缩格式,适用于不同视频工具之间的管道传输;x264知道如何写入它,而ffmpeg知道如何读取它。
发布于 2012-09-06 23:57:02
FFmpeg为x264提供了“无损”模式,请参阅FFmpeg和x264编码指南
§ Lossless H.264
从本质上讲,它是-crf 0
https://stackoverflow.com/questions/6701805
复制相似问题