@@ -716,3 +716,51 @@ def test__probe__exception():
716
716
def test__probe__extra_args ():
717
717
data = ffmpeg .probe (TEST_INPUT_FILE1 , show_frames = None )
718
718
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