[FFmpeg-user] Can you encode lossless Motion JPEG 2000 videos with ffmpeg using the right command line arguments?

Paul B Mahol onemda at gmail.com
Tue Jun 19 15:39:53 CEST 2012

On 6/19/12, David Rice <daverice at mac.com> wrote:
> On Jun 18, 2012, at 9:17 PM, Gabri Nurtinaz Shally wrote:
>> On Jun 19, 2012 8:00 AM, "Shyamal Chandra" <shyamalc at gmail.com> wrote:
>>> Hi,
>>> Can you encode lossless Motion JPEG videos with ffmpeg using the right
>>> command line arguments?
>>> I want to convert an uncompressed AVI into a lossless Motion JPEG 2000.
>> yes, you can, since mjpeg can be found in "ffmpeg -codecs" output. you
>> can
>> try:
>> ffmpeg -i yourfile.avi -vcodec mjpeg -acodec copy output.mkv
>> FYI, JPEG itself is a lossy format, so overall it is not a lossless
>> video.
>> for me, i'll choose h264 for same bitrate.
> Motion JPEG is a lossy codec.
> Motion JPEG 2000 is a container format primarily (or perhaps solely?) for
> containing jpeg2000 encodings.
> jpeg2000 is a codec that could be used in either lossy or lossless modes.
> Since you're interested in lossless encoding, I presume you're interested in
> Motion JPEG 2000 and/or jpeg2000. FFmpeg does not support writing Motion
> JPEG 2000 files but can read them. If you need Motion JPEG2000 you could
> look at frames_to_mj2 in http://code.google.com/p/openjpeg/. FFmpeg can
> encode lossless jpeg2000 with either its included, but experimental,
> jpeg2000 codec (listed as 'j2k') or via libopenjpeg if you compile it with
> --enable-libopenjpeg.
> If you compile with openjpeg you could try:
> ffmpeg -i file.avi -map 0 -c:v libopenjpeg -c:a copy lossless.mov
> If not, then try:
> ffmpeg -i file.avi -map 0 -c:v j2k -strict experimental -c:a copy
> output.mov
> Note that the j2k and libopenjpeg versions of the jpeg2000 encoder support
> different sets of pixel formats. For instance libopenjpeg can encode yuv410p
> but the j2k codec would format this to yuv444p. If your goal is to
> losslessly encode the source video so that both the source and resulting
> lossless file decode to the same pixels then watch ffmpeg's reporting
> closely. You could also use ffmpeg's framemd5 format to make sure that the
> source and lossless version decode to the same values. From the example
> above, these two commands should yield the same result:
> ffmpeg -i file.avi -map 0:v:0 -f framemd5 file.avi.framemd5
> ffmpeg -i output.mov -map 0:v:0 -f framemd5 output.mov.framemd5

As already pointed out j2k codec, both encoder and decoder are not lossless nor
bitexact with reference jpeg2000 implementations, which explains why
they are experimental.

More information about the ffmpeg-user mailing list