FFMpegでは、フィルターグラフはデフォルトでオーディオストリームをコピーしますか?


0

FFMpegには次のコマンドがあります。

ffmpeg -i file_input.mp4 -filter_complex split=2[i1][i2];[i1]scale=trunc(oh*a/2)*2:480[o1];[i2]scale=trunc(oh*a/2)*2:640[o2] -map [o1] -map 0:a -pix_fmt yuv420p -vcodec libx264 file_out_1.mp4 -map [o2] -map 0:a -pix_fmt yuv420p -vcodec libx264 file_out_2.mp4

このコマンドは、基本的にソースファイルを2つに分割し、ビデオを2つの異なる形式にスケーリングし、x264コーデックを使用してビデオストリームを再エンコードします。ここまでは順調ですね。

-map 0:aフラグに注意してください。2つのストリームのいずれかからこれを削除すると、結果の出力ファイルにはオーディオがまったく含まれなくなります。これは、scaleフィルターが花束から音声を自動的に削除するのか、それとも別のものなのかと疑問に思います。

コマンドをこれにわずかに変更し、結果の[o1]または[o2]からオーディオストリームをフェッチしようとしても、音が聞こえません。

ffmpeg -i eFront_sample.mp4 -filter_complex split=2[i1][i2];[i1]scale=trunc(oh*a/2)*2:480[o1];[i2]scale=trunc(oh*a/2)*2:640[o2] -map [o1]:a -pix_fmt yuv420p -vcodec libx264 file_out_1.mp4 -map [o2]:a -pix_fmt yuv420p -vcodec libx264 file_out_2.mp4

ここで何が欠けていますか?

前もって感謝します。

回答:


1

蒸気選択

デフォルトでは、ストリームタイプごとに1つのストリームが選択されます。使用すると-map、このデフォルトのストリーム選択動作は無効になります。

ただし、予期しないストリーム選択の問題を回避するために、デフォルトに依存するのではなく、フィルターの入力と出力を明示的に定義することをお勧めします。

規模

代わりに、trunc(oh*a/2)*2おそらく単に使用できます-2。スケールビデオフィルターのドキュメントから:

値の1つが-nでn> 1の場合、スケールフィルターは、指定された他の次元から計算された入力画像のアスペクト比を維持する値も使用します。ただし、その後、計算された次元がnで割り切れることを確認し、必要に応じて値を調整します。

x264では、yuv420pを出力するときに幅と高さが2で割り切れる必要があるため、-2宣言された値が受け入れられると仮定して対処します。

その結果、コマンドは次のようになります。

ffmpeg -i input.mp4 -filter_complex \
"[0:v]split=2[i1][i2]; \
 [i1]scale=-2:480,format=yuv420p[o1]; \
 [i2]scale=-2:640,format=yuv420p[o2]" \
-map "[o1]" -map 0:a -c:v libx264 output1.mp4 \
-map "[o2]" -map 0:a -c:v libx264 output2.mp4
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.