ffmpegを使用してビデオに新しいオーディオ(ミキシングではない)を追加する方法は?


131

私は次のようなコマンドを使用しました:

ffmpeg -i video.avi -i audio.mp3 -vcodec codec -acodec codec output_video.avi -newaudio

ビデオに新しいオーディオトラックを追加するための最新バージョン(ミックスではありません)。

しかし、私はffmpegを最新バージョン(ffmpegバージョンgit-2012-06-16-809d71d)に更新しましたが、このバージョンではパラメーター-newaudioが機能しません。

を使用してビデオに新しいオーディオを(ミックスではなく)追加する方法を教えてくださいffmpeg


@Kiquenetはい、そうです。そして答えはすでに出ています。このスレッドを読んでください。この質問は5歳です。
Vetalll

新しいオーディオを追加するということは、オーディオを置き換えることを意味しますよね?それを明確にするためにあなたの質問を編集するかもしれません。
tommy.carstensen

回答:


295

ビデオにオーディオを追加:ストリームコピー

ffmpeg -i video.avi -i audio.mp3 -codec copy -shortest output.avi
  • -mapオプションを省略すると、デフォルトのストリーム選択が使用されます。これは、ビデオ入力にオーディオがない場合に機能します。
  • この例では-codec copyストリームコピーに使用します(再エンコードなし。品質は維持され、高速です)。
  • この-shortestオプションはoutput.avi、最短の入力と同じ期間になります。

ビデオにオーディオを追加:再エンコード

出力が元の形式と異なる場合、または形式を変更する場合は、エンコーダーを指定できます。

ffmpeg -i video.avi -i audio.mp3 -c:v libx264 -c:a libvorbis -shortest output.mkv

特定のストリームを手動で選択するには

デフォルトのストリーム選択では、期待する結果が得られない場合があります。この例でvideo.mp4は、ビデオオーディオがありオーディオaudio.m4aのみがあります。-mapからビデオvideo.mp4とオーディオを選択するために使用しますaudio.m4a

ffmpeg -i video.mp4 -i audio.m4a -map 0:v -map 1:a -c copy -shortest output.mp4
  • -map 0:v–入力0(最初の入力、つまりvideo.mp4)から、videoストリームを選択します。
  • -map 1:a–入力1(2番目の入力audio.m4a)から、audioストリームを選択します。

2つのオーディオ入力を1つにミキシング/結合する

ビデオを取りvideo.webm、そして使用amergeフィルタをからオーディオを結合するvideo.webmaudio.oga

ffmpeg -i video.webm -i audio.oga -filter_complex \
"[0:a][1:a]amerge=inputs=2[a]" \
-map 0:v -map "[a]" -c:v copy -c:a libvorbis -ac 2 -shortest out.webm

サイレントオーディオを生成する

anullsrcフィルターを使用して、無音のオーディオストリームを作成できます。フィルターを使用すると、希望のチャンネルレイアウト(モノ、ステレオ、5.1など)とサンプルレートを選択できます。

ffmpeg -i video.mp4 -f lavfi -i anullsrc=channel_layout=stereo:sample_rate=44100 \
-c:v copy -shortest output.mp4

また見なさい


5
これは最初-map 0:0 -map 1:0-map 0 -map 1うまくいきませんでしたが、代わりにを使うとうまくいきました。ありがとう!
yonix 2013

これにより、最初に空のフレームが挿入されます。
Lenar Hoyt、2015

このコマンドを試してみましたが、ビデオオーディオが失われます。私のビデオ形式はmp4です
アラン

@ Allan.Chan元の質問ではビデオ入力からの音声は必要ありませんでしたが、別の例を追加しました。別の音声入力の例の混合/結合を参照してください。
llogan

-shortestオプションのない最初のソリューションは私にとってよりうまくいきました。
mmj

24

mp3音楽をwavに

ffmpeg -i music.mp3 music.wav

ビデオに合わせて切り詰める

ffmpeg -i music.wav -ss 0 -t 37 musicshort.wav

音楽とビデオをミックス

ffmpeg -i musicshort.wav -i movie.avi final_video.avi

3
私が覚えているように、最後のバリアントは古いオーディオを新しいものに置き換えます。
Vetalll 2012

新しいオーディオを古いオーディオとマージするオプションはありますか?
Iqbal Malik

1
@jwilsonこのコマンドを試してみましたが、ビデオオーディオが失われます。私のビデオ形式はmp4です
アラン

失わないための@Allanソリューション?
Kiquenet

20

入力ビデオに複数のオーディオトラックがあり、さらに1つ追加する必要がある場合は、次のコマンドを使用します。

ffmpeg -i input_video_with_audio.avi -i new_audio.ac3 -map 0 -map 1 -codec copy output_video.avi

-map 0最初の入力ファイル(input_video_with_audio.avi)からすべてのストリームをコピー(含める-map 1)し、2番目の入力ファイル(new_audio.ac3)からすべてのストリーム(この場合は1)を含めることを意味します。


この答えが最良の答えだと思います。
Nabi KAZ 2017年

3

これらの解決策はどれも私にとってはうまくいきませんでした。元のオーディオが上書きされるか、より複雑な「amerge」の例で「メモリのマップに失敗しました」のようなエラーが発生しました。-filter_complex amixが必要だったようです。

ffmpeg -i videowithaudioyouwanttokeep.mp4 -i audiotooverlay.mp3 -vcodec copy -filter_complex amix -map 0:v -map 0:a -map 1:a -shortest -b:a 144k out.mkv

1

何もうまくいかなかったので(入力.mp4ビデオにオーディオがなかったためだと思います)、これでうまくいくことがわかりました。

ffmpeg -i input_video.mp4 -i balipraiavid.wav -map 0:v:0 -map 1:a:0 output.mp4


0

古いバージョンのFFMPEGを使用していて、アップグレードできない場合は、以下を実行できます。

ffmpeg -i PATH/VIDEO_FILE_NAME.mp4 -i PATH/AUDIO_FILE_NAME.mp3 -vcodec copy -shortest DESTINATION_PATH/NEW_VIDEO_FILE_NAME.mp4

-vcodecを使用したことに注意してください


0

ffmpegを使用してビデオにオーディオを追加するコード。

オーディオの長さがビデオの長さよりも長い場合、オーディオはビデオの長さにカットされます。ビデオの完全なオーディオが必要な場合は、コマンドから-shortestを削除してください。

String[] cmd = new String[]{"-i", selectedVideoPath,"-i",audiopath,"-map","1:a","-map","0:v","-codec","copy", ,outputFile.getPath()};

private void execFFmpegBinaryShortest(final String[] command) {



            final File outputFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/videoaudiomerger/"+"Vid"+"output"+i1+".mp4");




            String[] cmd = new String[]{"-i", selectedVideoPath,"-i",audiopath,"-map","1:a","-map","0:v","-codec","copy","-shortest",outputFile.getPath()};


            try {

                ffmpeg.execute(cmd, new ExecuteBinaryResponseHandler() {
                    @Override
                    public void onFailure(String s) {
                        System.out.println("on failure----"+s);
                    }

                    @Override
                    public void onSuccess(String s) {
                        System.out.println("on success-----"+s);
                    }

                    @Override
                    public void onProgress(String s) {
                        //Log.d(TAG, "Started command : ffmpeg "+command);
                        System.out.println("Started---"+s);

                    }

                    @Override
                    public void onStart() {


                        //Log.d(TAG, "Started command : ffmpeg " + command);
                        System.out.println("Start----");

                    }

                    @Override
                    public void onFinish() {
                        System.out.println("Finish-----");


                    }
                });
            } catch (FFmpegCommandAlreadyRunningException e) {
                // do nothing for now
                System.out.println("exceptio :::"+e.getMessage());
            }


        }

なにEnvironment.getExternalStorageDirectory().getAbsolutePath()+"/videoaudiomerger/"+"Vid"+"output"+i1+".mp4");
Kiquenet
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.