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]
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))
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)
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, )
# 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()
from ffmpegio import ffmpegprocess as ffprocess print(ffprocess.versions()) ffprocess.run({"global_options": {"init_hw_device": "cuda"}})