@@ -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