Simplify FFmpeg amerge and volume customization
I have 3 consecutive FFmpeg commands that will customize the volume of an audio, customize the volume of a video, and amerge
audio and video to a final output.
First command, edit volume level of a mp3 File
ffmpeg -i music.mp3 -vol 100 music2.mp3
Second command, edit volume level of a mp4 file
ffmpeg -i video.mp4 -vol 200 video2.mp4
Third command,merge music2.mp3
andvideo2.mp4
ffmpeg -i music2.mp3 -i ruby.mp4 -filter_complex \
"[0:a][1:a]amerge,pan=stereo:c0<c0+c2:c1<c1+c3[out]" \
-map 1:v -map "[out]" -c:v copy -c:a libfdk_aac -shortest video2.mp4
Is there an easy way to simplify and breakdown processes into just one process/command?
I've tried this one, but not working:
ffmpeg -i music.mp3 -vol 100 -i video.mp4 -vol 200 -filter_complex \
"[0:a][1:a]amerge,pan=stereo:c0<c0+c2:c1<c1+c3[out]" \
-map 1:v -map "[out]" -c:v copy -c:a libfdk_aac -shortest output.mp4
Error log(s):
ffmpeg version N-60332-ga0d5204 Copyright (c) 2000-2014 the FFmpeg developers
built on Feb 4 2014 21:31:51 with Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
configuration: --prefix=/usr/local --enable-gpl --enable-nonfree --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libxvid
libavutil 52. 63.100 / 52. 63.100
libavcodec 55. 49.101 / 55. 49.101
libavformat 55. 29.101 / 55. 29.101
libavdevice 55. 7.100 / 55. 7.100
libavfilter 4. 1.102 / 4. 1.102
libswscale 2. 5.101 / 2. 5.101
libswresample 0. 17.104 / 0. 17.104
libpostproc 52. 3.100 / 52. 3.100
Input #0, mp3, from 'adele.mp3':
Metadata:
title : Chasing Pavements
artist : Adele
track : 3
album : 19 (Deluxe Edition)
date : 2008
Duration: 00:03:30.55, start: 0.025056, bitrate: 160 kb/s
Stream #0:0: Audio: mp3, 44100 Hz, stereo, s16p, 159 kb/s
Stream #0:1: Video: mjpeg, yuvj420p(pc), 600x600 [SAR 72:72 DAR 1:1], 90k tbr, 90k tbn, 90k tbc
Metadata:
title :
comment : Other
Input #1, mov,mp4,m4a,3gp,3g2,mj2, from 'Ruby on Rails 101- What is Ruby on Rails_.mp4':
Metadata:
major_brand : mp42
minor_version : 0
compatible_brands: isommp42
creation_time : 2013-12-21 07:56:20
Duration: 00:05:42.40, start: 0.000000, bitrate: 1214 kb/s
Stream #1:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720, 1020 kb/s, 30 fps, 30 tbr, 60 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #1:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 191 kb/s (default)
Metadata:
creation_time : 2013-12-21 07:56:23
handler_name : IsoMedia File Produced by Google, 5-11-2011
[Parsed_pan_1 @ 0x7fcd23d00680] This syntax is deprecated. Use '|' to separate the list items.
-vol has been deprecated. Use the volume audio filter instead.
-vol is forwarded to lavfi similarly to -af volume=0.781250.
-vol has been deprecated. Use the volume audio filter instead.
-vol is forwarded to lavfi similarly to -af volume=0.781250.
File 'output.mp4' already exists. Overwrite ? [y/N] y
[Parsed_amerge_0 @ 0x7fcd23d00000] No channel layout for input 1
Last message repeated 1 times
[AVFilterGraph @ 0x7fcd23c0f5a0] The following filters could not choose their formats: Parsed_amerge_0
Consider inserting the (a)format filter near their input or output.
One command to bind them
You can do this in one command using the volume
audio filter instead of the old -vol
option (as mentioned by your console output):
ffmpeg -i music.mp3 -i videowithaudio.mp4 -filter_complex \
"[0:a]volume=0.390625[a1];[1:a]volume=0.781250[a2]; \
[a1][a2]amerge,pan=stereo:c0<c0+c2:c1<c1+c3[out]" \
-map 1:v -map "[out]" -c:v copy -c:a libfdk_aac -shortest output.mp4
You may have to adjust the values for volume
.
Potential problems
syntax is deprecated
[Parsed_pan_4 @ 0x244c980] This syntax is deprecated. Use '|' to separate the list items.
Don't worry – you can ignore this message.
could not choose their formats
[AVFilterGraph @ 0x26549a0] The following filters could not choose their formats: Parsed_amerge_3
Consider inserting the (a)format filter near their input or output.
All inputs must have the same sample rate and format for amerge
. If they are different then you will have to use the aformat
audio filter:
ffmpeg -i music.mp3 -i videowithaudio.mp4 -filter_complex \
"[0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.5[a1]; \
[1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.8[a2]; \
[a1][a2]amerge,pan=stereo:c0<c0+c2:c1<c1+c3[out]" \
-map 1:v -map "[out]" -c:v copy -c:a libfdk_aac -shortest output.mp4