Skip to content

add_stream_from_template doesn't propagate time_base #1953

@daveisfera

Description

@daveisfera

time_base for the stream returned when calling add_stream_from_template is None and if you try to assign it, then it gives an error about it being a decoder.

Here's code that can be used to reproduce it:

import sys

from av import open as av_open


def _main(input_filename: str, output_filename: str, set_time_base: bool):
    with av_open(input_filename) as in_container, av_open(output_filename, "w") as out_container:
        in_video = in_container.streams.video[0]
        in_audio = in_container.streams.audio[0]
        print("In:", in_video.time_base, in_audio.time_base)
        out_video = out_container.add_stream_from_template(in_video)
        if set_time_base:
            out_video.time_base = in_video.time_base
        out_audio = out_container.add_stream_from_template(in_audio)
        if set_time_base:
            out_audio.time_base = in_audio.time_base
        print("Out:", out_video.time_base, out_audio.time_base)
        for packet in in_container.demux():
            out_container.mux_one(packet)


if __name__ == "__main__":
    if len(sys.argv) <= 2:
        print("usage:", sys.argv[0], "<input> <output>")
        sys.exit(1)

    _main(sys.argv[1], sys.argv[2], len(sys.argv) > 3 and sys.argv[3] in ("y", "Y"))

Running with a file will output the following:

In: 1/16000 1/8000
Out: None None

And then adding a 3rd argument of y or Y will try to set it and cause it to fail with this error:

Traceback (most recent call last):
  File "/usr/src/app/test_add_stream.py", line 30, in <module>
    _main(sys.argv[1], sys.argv[2], len(sys.argv) > 3 and sys.argv[3] in ("y", "Y"))
  File "/usr/src/app/test_add_stream.py", line 19, in _main
    out_audio.time_base = in_audio.time_base
  File "av/stream.pyx", line 127, in av.stream.Stream.__setattr__
  File "av/codec/context.pyx", line 541, in av.codec.context.CodecContext.time_base.__set__
RuntimeError: Cannot access 'time_base' as a decoder

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions