fraunhoferhhi / vvenc

VVenC, the Fraunhofer Versatile Video Encoder
https://www.hhi.fraunhofer.de/en/departments/vca/technologies-and-solutions/h266-vvc.html
BSD 3-Clause Clear License
957 stars 172 forks source link

Stream concatenation, Decoding #2

Closed master-of-zen closed 3 years ago

master-of-zen commented 4 years ago

Please provide links and guide how to properly concatenate and decode.

adamjw24 commented 4 years ago

Working on some more extensive documentation, will update you soon.

master-of-zen commented 4 years ago

@adamjw24 Sorry for pinging, but is there any updates?

master-of-zen commented 3 years ago

@adamjw24 Hey, any updates/eta on how vvc bitestreams currently can be concatenated?

adamjw24 commented 3 years ago

Sorry for the long wait. We are just preparing an update that will ease it up.

I assume you want to do Open-GOP encoding and encode each intra-period in parallel?

So for the segment parallel encoding, you need to use the full-featured app and the process is very much similar to VTM. Its easiest if each segment encoder has access to the full YUV file and you just define the segment with --FrameSkip and --FramesToBeEncoded parameters (similar to VTM). Now, for all presets but faster, we use an temporal filter, which for segment parallel encoding needs frames outside of its segment to create the proper temporal context. So for all but first segment, you need to set --MCTFNumLeadFrames=2 and for all but last segment --MCTFNumTrailFrames=2.

The segments can be concatenated using the parcat app from VTM repository.

Best you run it once with --SEIDecodedPictureHash=1 and confirm on the decoder that the decoded hashes match.

Let me know if this works.

Soon this functionality will also be available in the easy app.

master-of-zen commented 3 years ago

@adamjw24 That's amazing answer and one I have been looking for quite a while)) Thank you, will look into that :+1:

adamjw24 commented 3 years ago

For simple app, please use the --segment parameter to indicate if the position of the segment within the encoded sequence

adamjw24 commented 2 years ago

A comment on this dead topic because I was thinking about it recently.

If still of interest (I saw VVC is no longer supported with Av1an), here is an update. There is some stuff I see differently and more practical today than at the beginning of the development.

If using bitstream concatenation after splitting the input at scene-cuts, best way is to do non-overlapping chunks and just use cat for concatenation. There's no point having prediction continuity at scene-cuts.

If using regular chunking, just make sure the chunks are big enough (say >=10s), make them non-overlapping, and also use cat for concatenation. An optimization here would be to make sure that the chunk size is a multiple of intra-period, otherwise the last intra-period in a chunk will be smaller than the rest. The prediction discontinuity will have a penalty, but the longer the chunk, the smaller the penalty. With >=10s it should be less than 1% relative bitrate increase.