flp
Call FFMPEG with Complex Filter from Ports
I’m trying to call FFMPEG with a complex filter from Ports, but despite the command working in my shell, I somehow miss the understanding to get it working in Elixir with ports when combined with a complex filter.
This works in my shell,
ffmpeg -i input.mp4 -filter_complex " [0:a] volume=1 [final_audio]" -map ‘[final_audio]’ output.mp4
but the following in Elixir does not work. It seems to get stuck before the transformation.
ffmpeg = System.find_executable(“ffmpeg”)
ffmpeg_args = [“-i”, “input.mp4”, “-filter_complex”, “[0:a] volume=1 [final_audio]”, “-map”, “[final_audio]”, “-c:v”, “libx264”, “output.mp4”]
Port.open({:spawn_executable, ffmpeg}, [{:args, ffmpeg_args}, :binary, :exit_status, :hide, :use_stdio])
also the following gets stuck:
ffmpeg_args = [“-i”, “input.mp4”, “-filter_complex”, “[0:a]”, “volume=1”, “[final_audio]”, “-map”, “[final_audio]”, “-c:v”, “libx264”, “output.mp4”]
On the other hand, the following works:
ffmpeg = System.find_executable(“ffmpeg”)
ffmpeg_args = [“-i”, “video.mp4”, final_output]
Port.open({:spawn_executable, ffmpeg}, [{:args, ffmpeg_args}, :binary, :exit_status, :hide, :use_stdio])
Marked As Solved
flp
I first wanted to get it working to optimize later so I avoid spending a lot of time for nothing.
Luckily, it’s working now with complex filters.
ffmpeg_args = ~W(-i interception.mp4 -filter_complex [0:a]volume=1[final_audio] -map [final_video] -c:v libx264 final_output.mp4)
Also Liked
cblavier
Do you want to keep with bare Elixir or would you mind trying a wrapper?
I remember that when Port was hurting me with stdin handling, I found the rambo lib to be incredibly useful!
eksperimental
I think you can simplify the argument passing by using the ~W/~w sigils.
ffmpeg_args = ~W(-i input.mp4 -filter_complex [0:a] volume=1 [final_audio] -map [final_audio] -c:v libx264 output.mp4)







