@@ -716,3 +716,51 @@ def test__probe__exception():
716716def test__probe__extra_args ():
717717 data = ffmpeg .probe (TEST_INPUT_FILE1 , show_frames = None )
718718 assert set (data .keys ()) == {'format' , 'streams' , 'frames' }
719+
720+ def get_filter_complex_input (flt , name ):
721+ m = re .search (r'\[([^]]+)\]{}(?=[[;]|$)' .format (name ), flt )
722+ if m :
723+ return m .group (1 )
724+ else :
725+ return None
726+
727+ def get_filter_complex_outputs (flt , name ):
728+ m = re .search (r'(^|[];]){}((\[[^]]+\])+)(?=;|$)' .format (name ), flt )
729+ if m :
730+ return m .group (2 )[1 :- 1 ].split ('][' )
731+ else :
732+ return None
733+
734+ def test__get_filter_complex_input ():
735+ assert get_filter_complex_input ("" , "scale" ) is None
736+ assert get_filter_complex_input ("scale" , "scale" ) is None
737+ assert get_filter_complex_input ("scale[s3][s4];etc" , "scale" ) is None
738+ assert get_filter_complex_input ("[s2]scale" , "scale" ) == "s2"
739+ assert get_filter_complex_input ("[s2]scale;etc" , "scale" ) == "s2"
740+ assert get_filter_complex_input ("[s2]scale[s3][s4];etc" , "scale" ) == "s2"
741+
742+ def test__get_filter_complex_outputs ():
743+ assert get_filter_complex_outputs ("" , "scale" ) is None
744+ assert get_filter_complex_outputs ("scale" , "scale" ) is None
745+ assert get_filter_complex_outputs ("scalex[s0][s1]" , "scale" ) is None
746+ assert get_filter_complex_outputs ("scale[s0][s1]" , "scale" ) == ['s0' , 's1' ]
747+ assert get_filter_complex_outputs ("[s5]scale[s0][s1]" , "scale" ) == ['s0' , 's1' ]
748+ assert get_filter_complex_outputs ("[s5]scale[s1][s0]" , "scale" ) == ['s1' , 's0' ]
749+ assert get_filter_complex_outputs ("[s5]scale[s1]" , "scale" ) == ['s1' ]
750+ assert get_filter_complex_outputs ("[s5]scale[s1];x" , "scale" ) == ['s1' ]
751+ assert get_filter_complex_outputs ("y;[s5]scale[s1];x" , "scale" ) == ['s1' ]
752+
753+ def test__multi_output_edge_label_order ():
754+ scale2ref = ffmpeg .filter_multi_output ([ffmpeg .input ('x' ), ffmpeg .input ('y' )], 'scale2ref' )
755+ out = (
756+ ffmpeg .merge_outputs (
757+ scale2ref [1 ].filter ('scale' ).output ('a' ),
758+ scale2ref [10000 ].filter ('hflip' ).output ('b' )
759+ )
760+ )
761+
762+ args = out .get_args ()
763+ flt_cmpl = args [args .index ('-filter_complex' )+ 1 ]
764+ out1 , out2 = get_filter_complex_outputs (flt_cmpl , 'scale2ref' )
765+ assert out1 == get_filter_complex_input (flt_cmpl , 'scale' )
766+ assert out2 == get_filter_complex_input (flt_cmpl , 'hflip' )
0 commit comments