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)
Popular in Questions
Other popular 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
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance








