8000 Merge pull request #230 from komar007/fix_multiple_output_order · Powercoder64/ffmpeg-python@c14efc9 · GitHub
[go: up one dir, main page]

Skip to content

Commit c14efc9

Browse files
authored
Merge pull request kkroening#230 from komar007/fix_multiple_output_order
Fix multiple output order
2 parents 63973d0 + 732bf21 commit c14efc9

File tree

3 files changed

+50
-2
lines changed

3 files changed

+50
-2
lines changed

ffmpeg/_run.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ def _allocate_filter_stream_names(filter_nodes, outgoing_edge_maps, stream_name_
8484
stream_count = 0
8585
for upstream_node in filter_nodes:
8686
outgoing_edge_map = outgoing_edge_maps[upstream_node]
87-
for upstream_label, downstreams in list(outgoing_edge_map.items()):
87+
for upstream_label, downstreams in sorted(outgoing_edge_map.items()):
8888
if len(downstreams) > 1:
8989
# TODO: automatically insert `splits` ahead of time via graph transformation.
9090
raise ValueError(

ffmpeg/dag.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ def get_incoming_edges(downstream_node, incoming_edge_map):
100100

101101
def get_outgoing_edges(upstream_node, outgoing_edge_map):
102102
edges = []
103-
for upstream_label, downstream_infos in list(outgoing_edge_map.items()):
103+
for upstream_label, downstream_infos in sorted(outgoing_edge_map.items()):
104104
for downstream_info in downstream_infos:
105105
downstream_node, downstream_label, downstream_selector = downstream_info
106106
edges += [

ffmpeg/tests/test_ffmpeg.py

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -716,3 +716,51 @@ def test__probe__exception():
716716
def 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

Comments
 (0)
0