.mp4ファイルからすべてのオーディオストリームをコピーするためにffmpegを取得するのに問題があります。何時間もオンラインで検索した後、これはallストリーム( ここの例4に示すように )をコピーするはずです:
ffmpeg -i in.mp4 -map 0 -c copy out.mp4
in.mp4
には3つのストリームが含まれます。
out.mp4
(in.mp4
と同一でなければなりません)には2つのストリームのみが含まれます。
FFmpegは3つのストリームすべてを正しく識別するように見えますが、それらすべてをコピーするわけではありません。 FFmpegからの出力:
Stream mapping:
Stream #0:0 -> #0:0 (copy)
Stream #0:1 -> #0:1 (copy)
Stream #0:2 -> #0:2 (copy)
編集:ffmpeg -v 9 -loglevel 99 -i in.mp4
からの出力:
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from in.mp4':
Metadata:
major_brand : isom
minor_version : 512
compatible_brands: isomiso2avc1mp41
encoder : Lavf57.36.100
Duration: 00:00:06.03, start: 0.000000, bitrate: 5582 kb/s
Stream #0:0(und), 1, 1/15360: Video: h264 (Main), 1 reference frame (avc1 /
0x31637661), yuv420p(tv, bt470bg/unknown/unknown, left), 1920x1080 (0x0) [SAR 1:
1 DAR 16:9], 0/1, 5317 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
Metadata:
handler_name : VideoHandler
Stream #0:1(und), 1, 1/48000: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz,
stereo, fltp, 128 kb/s (default)
Metadata:
handler_name : SoundHandler
Stream #0:2(und), 1, 1/48000: Audio: aac (LC) (mp4a / 0x6134706D), 48000 Hz,
stereo, fltp, 128 kb/s
Metadata:
handler_name : SoundHandler
Successfully opened the file.
At least one output file must be specified
[AVIOContext @ 0000000001c2b9e0] Statistics: 153350 bytes read, 2 seeks
Edit 2(解決済み):this ticket から正しい構文を見つけることができました。興味がある他の人にとって、正しい構文は次のとおりです。
ffmpeg -i in.mp4 -vcodec copy -c:a copy -map 0 out.mp4
これにより、すべてのストリームがコピーされます。
どうやらこれはよくある質問なので、他の人が見ることができるように、ソリューションを回答として投稿しています(以前はコメントの返信でした)。
この ticket から正しい構文を見つけることができました。正しい構文は次のとおりです。
ffmpeg -i in.mp4 -vcodec copy -c:a copy -map 0:0 -map 0:1 -map 0:2 out.mp4
これにより、3つのストリームすべてがコピーされます。
まず、ここでこのより広範な答えを試しました: https://stackoverflow.com/a/54616353/14226
しかし、サポートされていない字幕トラックで問題が発生したため、このコマンドを使用する必要がなくなりました。
avconv -i INFILE -c copy -map 0:a -map 0:v OUTFILE
コピーを依頼した後、基本的にコピーしたのはマッピングしたもののみ(そしてもちろんすべてのオーディオをマッピングした)字幕が埋め込まれていることに注意してください。字幕をマッピングする場合は、この-map 0:s
。
OK、ffmpeg
のマニュアルページをかなり深く読んでみると、これが役に立つはずです。
現在、各出力ストリームには単一の入力ストリームからのチャネルのみを含めることができます。たとえば、「-map_channel」を使用して、(同じまたは異なるファイルからの)異なるストリームに含まれる複数の入力オーディオチャンネルを選択し、それらを単一の出力ストリームにマージすることはできません。そのため、たとえば、2つの別々のモノストリームを1つのステレオストリームに変換することは現在できません。ただし、ステレオストリームを2つのシングルチャネルモノストリームに分割することは可能です。
この機能が必要な場合、可能な回避策は、マージフィルターを使用することです。たとえば、2つのモノラルオーディオストリームを持つメディア(ここではinput.mkv)を1つの単一のステレオチャネルオーディオストリームにマージする(およびビデオストリームを保持する)必要がある場合、次のコマンドを使用できます。
ffmpeg -i input.mkv -filter_complex "[0:1] [0:2] amerge" -c:a pcm_s16le -c:v copy output.mkv
man ffmpeg-filters
のマニュアルページの指示を読み、実験して、チャネルと予想される出力の命名にどの程度の複雑さがあるかを理解することをお勧めします。
[編集:Mulvyaが指摘したように、これは質問に答えますが、元のポスターの質問ではありませんでした。]