Example #1
0
def avi_stream(request):
    url = "tests/assets/testmulti-1m.mp4"
    codecs = dict(
        u8="pcm_u8",
        s16="pcm_s16le",
        s32="pcm_s32le",
        s64="pcm_s64le",
        flt="pcm_f32le",
        dbl="pcm_f64le",
    )
    vframes = 16
    f = io.BytesIO(
        ffmpegprocess.run(
            {
                "inputs": [(url, None)],
                "outputs": [
                    (
                        "-",
                        {
                            "f": "avi",
                            "vcodec": "rawvideo",
                            "pix_fmt": request.param[0],
                            "acodec": codecs[request.param[1]],
                            "vframes": vframes,
                        },
                    )
                ],
            }
        ).stdout
    )
    return [f, vframes, *request.param]
Example #2
0
def test_run_progress():
    url = "tests/assets/testaudio-1m.mp3"
    sample_fmt = "s16"
    out_codec, container = utils.get_audio_codec(sample_fmt)

    def progress(*args):
        print(args)
        return False

    with open(url, "rb") as f:
        args = {
            "inputs": [("-", {
                "f": "mp3"
            })],
            "outputs": [("-", {
                "f": container,
                "c:a": out_codec,
                "sample_fmt": sample_fmt
            })],
        }

        ffmpegprocess.run(args, capture_log=True, progress=progress, stdin=f)
def test_log_completed():
    url = "tests/assets/testmulti-1m.mp4"
    with TemporaryDirectory() as tmpdir:
        f = run(
            {
                "inputs": [(url, {
                    "t": 0.1
                })],
                "outputs": [(path.join(tmpdir, "test.mp4"), None)],
                "global_options": None,
            },
            capture_log=True,
        )
        logs = re.split(r"[\n\r]+", f.stderr)

        pprint(log.extract_output_stream(logs))
        pprint(log.extract_output_stream(logs, 0, 1))
Example #4
0
def test_run_from_stream():
    url = "tests/assets/testaudio-1m.mp3"
    sample_fmt = "s16"
    out_codec, container = utils.get_audio_codec(sample_fmt)

    with open(url, "rb") as f:
        args = {
            "inputs": [("-", {
                "f": "mp3"
            })],
            "outputs": [("-", {
                "f": container,
                "c:a": out_codec,
                "sample_fmt": sample_fmt
            })],
        }
        out = ffmpegprocess.run(args, capture_log=True, stdin=f)

    print(f"FFmpeg output: {len(out.stdout)} bytes")
    print(out.stderr)
Example #5
0
def test_run_help():
    ffmpegprocess.run({"global_options": {"help": None}})
def test_transcode():
    # files = [path.abspath("tests/assets/testaudio-1m.mp3")] * 2
    url = "tests/assets/testaudio-1m.mp3"

    with tempfile.TemporaryDirectory() as tmpdirname:

        in_url = path.join(tmpdirname, "input.wav")
        transcode(url, in_url)

        out_url = path.join(tmpdirname, "output.wav")

        # example 1
        files = [in_url] * 2
        ffconcat = FFConcat()
        ffconcat.add_files(files)
        with ffconcat:
            transcode(
                ffconcat,
                out_url,
                f_in="concat",
                # protocol_whitelist_in="pipe,file",
                safe_in=0,
                codec="copy",
                # show_log=True,
                overwrite=True,
            )

        # example 2
        files = [path.basename(in_url)] * 2
        ffconcat = FFConcat(ffconcat_url=path.join(tmpdirname, "concat.txt"))
        ffconcat.add_files(files)
        with ffconcat:
            transcode(
                ffconcat,
                out_url,
                f_in="concat",
                # protocol_whitelist_in="pipe,file",
                # safe_in=0,
                codec="copy",
                show_log=True,
                overwrite=True,
            )

        # example 3
        files = [f"file:{in_url}"] * 2
        ffconcat = FFConcat(pipe_url="-")
        ffconcat.add_files(files)
        transcode(
            ffconcat,
            out_url,
            f_in="concat",
            protocol_whitelist_in="pipe,file",
            safe_in=0,
            codec="copy",
            overwrite=True,
            show_log=True,
        )

        # example 4
        files = [path.basename(in_url)] * 2
        with FFConcat(
                ffconcat_url=path.join(tmpdirname, "concat.txt")) as ffconcat:
            ffconcat.add_files(files)
            ffconcat.update()
            transcode(
                ffconcat,
                out_url,
                f_in="concat",
                codec="copy",
                show_log=True,
                overwrite=True,
            )

        # example 5
        ffconcat = FFConcat()
        ffconcat.add_files([url] * 2)
        inputs, fg = ffconcat.as_filter(v=0, a=1)
        run(
            {
                "inputs": inputs,
                "outputs": [(out_url, None)],
                "global_options": {
                    "filter_complex": fg
                },
            },
            capture_log=None,
            overwrite=True,
        )
Example #7
0
    #     url1, url2, t=1, blocksize=1000, ref_stream="a:0"
    # ) as reader:
    #     for data in reader:
    #         print({k: (v.shape, v.dtype) for k, v in data.items()})

    # create a short example with both audio & video
    f = io.BytesIO(
        ffmpegprocess.run(
            {
                "inputs": [(url1, None), (url2, None)],
                "outputs": [
                    (
                        "-",
                        {
                            "f": "avi",
                            "vcodec": "rawvideo",
                            "pix_fmt": "rgb24",
                            "acodec": "pcm_s16le",
                            "vframes": 16,
                        },
                    )
                ],
            }
        ).stdout
    )

    streams, hdrl = aviutils.read_header(f)
    pprint(streams[0]["pix_fmt"])
    pprint(streams[1]["sample_fmt"])
    pprint(hdrl)
    i = 0
        "outputs": [("tests/assets/testaudio-1m.mp3", None)],
        "global_options": {"y": None},
    },
    {
        "inputs": [
            ("testsrc=r=30000/1001:d=60", {"f": "lavfi"}),
            (
                "aevalsrc = '0.1*sin(2*PI*(360-2.5/2)*t) | 0.1*sin(2*PI*(360+2.5/2)*t)':d=60",
                {"f": "lavfi"},
            ),
            ("testsrc2=d=60", {"f": "lavfi"}),
            ("anoisesrc=d=60:c=pink:r=44100:a=0.5:d=60", {"f": "lavfi"}),
        ],
        "outputs": [("tests/assets/testmulti-1m.mp4", {"map": (0, 1, 2, 3)})],
        "global_options": {"y": None},
    },
    {
        "inputs": [("testsrc=r=1:d=5", {"f": "lavfi"})],
        "outputs": [("tests/assets/imgs/testimage-%d.png", None)],
        "global_options": {"y": None},
    },
)


for cfg in command_list:
    url = cfg["outputs"][0][0]
    if not path.isfile(url):
        ffmpegprocess.run(cfg)
    url = url.replace("%d", "1")
    pprint(probe.full_details(url))
    from ffmpegio import ffmpeg, configure
    import io

    args = {
        "inputs": [(url1, None), (url2, None)],
        "outputs": [
            (
                "-",
                {
                    "vframes": 16,
                },
            )
        ],
    }
    use_ya = configure.finalize_media_read_opts(args)
    pprint(args)

    # create a short example with both audio & video
    f = io.BytesIO(ffmpegprocess.run(args).stdout)

    reader = threading.AviReaderThread()
    reader.start(f, use_ya)
    try:
        reader.wait()
        print(f"thread is running {reader.is_alive()}")
        pprint(reader.streams)
        pprint(reader.rates)
    except:
        reader.join()
Example #10
0
from ffmpegio import ffmpegprocess as ffprocess

print(ffprocess.versions())

ffprocess.run({"global_options": {"init_hw_device": "cuda"}})