ffmpeg filter_complexで2つのオーディオファイルを連結


1

で2つのmp4ビデオファイルを連結しようとすると -filter_complex コマンドを使用して:

ffmpeg -i a.mp4 -i b.mp4 -filter_complex \
"[0:1] [0:0] [1:1] [1:0] concat=n=2:v=1:a=1 [v] [a]" \
-map [v] -map [a] -y testfull.mp4

それはうまく働きますが、私が以下のようなオーディオファイルで同じように試みるなら:

ffmpeg -i a.mp3 -i b.mp3 -filter_complex \
"[0:1] [0:0] [1:1] [1:0] concat=n=2:a=1 [a]" \
-map [a] -y testfull.mp3

エラーが発生します。

Input #1, mp3, from 'b.mp3':   Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isomavc1mp42
    creation_time   : 2010-12-13 21:15:11
    encoder         : Lavf53.4.0   Duration: 00:02:01.61, start: 0.000000, bitrate: 64 kb/s
    Stream #1:0: Audio: mp3, 8000 Hz, stereo, s16p, 64 kb/s
Stream specifier ':1' in filtergraph description [0:1] [0:0] [1:1] [1:0] concat= n=2:a=1 [a] matches no streams.

修正したら -filter_complex 引数を指定してコマンドを実行します。

ffmpeg -i a.mp3 -i b.mp3 -filter_complex \
"concat=n=2:a=1 [a]" -map [a] -y testfull.mp3

以下のエラーが発生します

Input #1, mp3, from 'b.mp3':   Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isomavc1mp42
    creation_time   : 2010-12-13 21:15:11
    encoder         : Lavf53.4.0   Duration: 00:02:01.61, start: 0.000000, bitrate: 64 kb/s
    Stream #1:0: Audio: mp3, 8000 Hz, stereo, s16p, 64 kb/s
Cannot find a matching stream for unlabeled input pad 0 on filter Parsed_concat_ 0

誰かが私を助けることができますどのように私は最新版を介して2つのオーディオファイルを結合することができます ffmpeg で構築可能 -filter_complex


更新: さて、これで私の問題を解決しました ffmpeg コマンド:

ffmpeg -i "concat:a.mp3|b.mp3" -c copy output.mp3

回答:


1

物事を明確にするためだけに [0:1] [0:0] [1:1] [1:0] 2つのファイルからのストリームを参照します。

あなたの場合:

[0:1] is video from first file  
[0:0] is audio from first file  
[1:1] is video from second file  
[1:0] is audio from second file

mp3ファイルの場合、ビデオストリームは存在しません。そのため、コマンド内のビデオストリーム参照を削除する必要があります。

あなたの最後のコマンドがうまくいった場合 - はいそれはmp3ファイルのための有効な解決策です。


はい私は落としたが、それでもエラーが出ます。フィルタを使う代わりに直接ストリームを連結することで私の問題を解決しました
irfanmcsd

0

あなたはビデオがないことを連結フィルタに伝えなければなりません: v=0 ビデオストリームに対処する必要はありません [0:0] [1:0] どちらでも、コマンドは次のようになります。

ffmpeg -i a.mp3 -i b.mp3 -filter_complex \
"[0:a] [1:a] concat=n=2:v=0:a=1 [a]" \
-map [a] -c:a mp3 testfull.mp3

これはうまくいきません。 MP3はシングルストリームなので [0:1][1:1] 失敗します。つかいます [0:a][1:a] また、フィルタを使用しているときはストリームをコピーできません。 -c:a mp3
Gyan

0

nは入力ファイルではなく、ストリームセグメントの数です。

concatのドキュメントから

フィルタは、同期されたビデオとオーディオストリームのセグメントに対して機能します。すべてのセグメントは、各タイプの同数のストリームを持っている必要があります。これは、出力時のストリーム数にもなります。

フィルタは以下のオプションを受け入れます。

n - セグメント数を設定します。デフォルトは2です。

私は過去数日間これと戦ってきたし、この質問とその回答を何度も読んできました。私はPNGシーケンス(入力0)をWAVファイル(入力1)とマージし、同じエラーを出し続けていました

フィルターParsed_concat_ 0でラベルなし入力パッド0に一致するストリームが見つかりません

15回試行して失敗した後、v = 1でn = 1(つまり1つの出力ストリーム)に落ちました。a = 1 ...つまり1つのビデオと1つのオーディオ入力ストリーム。 0とオーディオを入力1と多田からそれはうまく働いた。

フルコマンドライン

ffmpeg -i '/var/tmp/input.%04d.png -i' /var/tmp/input.wav '-filter_complex' [0:v:0] [1:a:0]連結= n = 1: v = 1:a = 1 [出力] [出力] '-map' [出力] '-map' [出力] '-vcodec' mjpeg '' /var/tmp/output.mov '


0

オーディオストリームをミックスする必要があります。

ffmpeg -i 1.mp4 -i 1.3gp -i 2.3gp -i 1.mp3
  -filter_complex "[2]adelay=10000|10000[s2];[3:a][1:a][s2]amix=3[a]"
  -map 0:v -map "[a]" -c:v copy result.mp4
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.