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])
Trending in Questions
Other Trending Topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #elixirconf-us
- #websockets
- #supervisor
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #hex
- #performance











First 5 of 5 Posts
mpope
I think you’re missing single quotes around the
[final_audio]. And a set of double quotes around[0:a] volume=1 [final_audio]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)flp
unfortunately, all of that does not seem to work. Somehow the complex filter seems to let the call get stuck before file transformation
cblavier
Do you want to keep with bare Elixir or would you mind trying a wrapper?
I remember that when
Portwas hurting me with stdin handling, I found therambolib to be incredibly useful!https://github.com/jayjun/rambo
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.