Fixed task creation for videos with uneven dimensions. (#1594)

* used yuv420p format for compressed and original chunks

* updated changelog
main
Andrey Zhavoronkov 6 years ago committed by GitHub
parent 2c21068417
commit 7c800f7f7d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -54,6 +54,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Fixed an error when exporting a task with cuboids to any format except CVAT (<https://github.com/opencv/cvat/pull/1577>)
- Synchronization with remote git repo (<https://github.com/opencv/cvat/pull/1582>)
- A problem with mask to polygons conversion when polygons are too small (<https://github.com/opencv/cvat/pull/1581>)
- Unable to upload video with uneven size (<https://github.com/opencv/cvat/pull/1594>)
### Security
-

@ -1,4 +1,4 @@
# Copyright (C) 2019 Intel Corporation
# Copyright (C) 2019-2020 Intel Corporation
#
# SPDX-License-Identifier: MIT
@ -304,10 +304,16 @@ class Mpeg4ChunkWriter(IChunkWriter):
self._output_fps = 25
@staticmethod
def _create_av_container(path, w, h, rate, pix_format, options):
def _create_av_container(path, w, h, rate, options):
# x264 requires width and height must be divisible by 2 for yuv420p
if h % 2:
h += 1
if w % 2:
w += 1
container = av.open(path, 'w')
video_stream = container.add_stream('libx264', rate=rate)
video_stream.pix_fmt = pix_format
video_stream.pix_fmt = "yuv420p"
video_stream.width = w
video_stream.height = h
video_stream.options = options
@ -320,14 +326,12 @@ class Mpeg4ChunkWriter(IChunkWriter):
input_w = images[0][0].width
input_h = images[0][0].height
pix_format = images[0][0].format.name
output_container, output_v_stream = self._create_av_container(
path=chunk_path,
w=input_w,
h=input_h,
rate=self._output_fps,
pix_format=pix_format,
options={
"crf": str(self._image_quality),
"preset": "ultrafast",
@ -373,18 +377,11 @@ class Mpeg4CompressedChunkWriter(Mpeg4ChunkWriter):
output_h = input_h // downscale_factor
output_w = input_w // downscale_factor
# width and height must be divisible by 2
if output_h % 2:
output_h += 1
if output_w % 2:
output_w +=1
output_container, output_v_stream = self._create_av_container(
path=chunk_path,
w=output_w,
h=output_h,
rate=self._output_fps,
pix_format='yuv420p',
options={
'profile': 'baseline',
'coder': '0',

Loading…
Cancel
Save