PyAV-Org / PyAV

Pythonic bindings for FFmpeg's libraries.
https://pyav.basswood-io.com/
BSD 3-Clause "New" or "Revised" License
2.43k stars 359 forks source link

Bitstream filter API fixes #1379

Closed skeskinen closed 4 months ago

skeskinen commented 4 months ago

Hello again,

This is a little follow-up to PR #1375 and issue #489 I realized and fixed 2 problems with the API as defined previously:

Here's a minimal example that shows example expected usage and why it's useful to separate the input and output arguments:

with av.open(input_path, mode='r') as input_av_container:
    v_stream = input_av_container.streams.video[0]

    with av.open(output_path, 'w') as output_av_container:
        out_stream = output_av_container.add_stream(template=v_stream)

        filter = av.bitstream.BitStreamFilterContext('h264_mp4toannexb',
            in_stream = v_stream, out_stream = out_stream)

        for packet in input_av_container.demux(v_stream):
            for p in filter.filter(packet):
                p.stream = out_stream
                output_av_container.mux(p)

        for p in filter.filter(None):
            p.stream = out_stream
            output_av_container.mux(p)