453

ビデオからオーディオを抽出するために次のコマンドを試しました。

ffmpeg -i Sample.avi -vn -ar 44100 -ac 2 -ab 192k -f mp3 Sample.mp3

しかし、次の出力が得られます

libavutil     50.15. 1 / 50.15. 1
libavcodec    52.72. 2 / 52.72. 2
libavformat   52.64. 2 / 52.64. 2
libavdevice   52. 2. 0 / 52. 2. 0
libavfilter    1.19. 0 /  1.19. 0
libswscale     0.11. 0 /  0.11. 0
libpostproc   51. 2. 0 / 51. 2. 0
SamplE.avi: Invalid data found when processing input

誰でも助けてもらえますか?

4

13 に答える 13

646

再エンコードせずにオーディオ ストリームを抽出するには:

ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac
  • -vnは動画ではありません。
  • -acodec copy既にそこにあるのと同じオーディオストリームを使用すると言います。

出力を読んでコーデックを確認し、適切なファイル名拡張子を設定します。

于 2014-12-11T01:18:35.417 に答える
63

すべてのオーディオ トラック/ストリームを抽出する

これにより、すべてのオーディオが 1 つのファイルにまとめられます。

ffmpeg -i input.mov -map 0:a -c copy output.mov
  • -map 0:aすべてのオーディオ ストリームのみを選択します。ビデオと字幕は除外されます。
  • -c copyストリーム コピーモードを有効にします。これにより、オーディオがコピーされ、再エンコードされません。-c copyオーディオを再エンコードする場合は削除します。
  • オーディオ形式をサポートする出力形式を選択します。コンテナー形式の比較を参照してください。

特定のオーディオ トラック/ストリームを抽出する

オーディオ ストリームを抽出する例 #4:

ffmpeg -i input.mkv -map 0:a:3 -c copy output.m4a
  • -map 0:a:3オーディオ ストリーム #4 のみを選択します (ffmpegカウントは 0 から始まります)。
  • -c copyストリーム コピーモードを有効にします。これにより、オーディオがコピーされ、再エンコードされません。-c copyオーディオを再エンコードする場合は削除します。
  • オーディオ形式をサポートする出力形式を選択します。コンテナー形式の比較を参照してください。

オーディオの抽出と再エンコード / フォーマットの変更

上記の例に似ていますが、-c copy. さまざまな例:

ffmpeg -i input.mp4 -map 0:a output.mp3
ffmpeg -i input.mkv -map 0:a output.m4a
ffmpeg -i input.avi -map 0:a -c:a aac output.mka
ffmpeg -i input.mp4 output.wav

すべてのオーディオ ストリームを個別に抽出する

この例のこの入力には、4 つのオーディオ ストリームがあります。各オーディオ ストリームは、単一の個別のファイルとして出力されます。

ffmpeg -i input.mov -map 0:a:0 output0.wav -map 0:a:1 output1.wav -map 0:a:2 output2.wav -map 0:a:3 output3.wav

オプションで、-c copy各出力ファイル名の前に追加して、ストリーム コピーモードを有効にします。


特定のチャンネルを抽出する

チャネル分割フィルターを使用します。ステレオ入力からフロント右 (FR) チャンネルを取得する例:

ffmpeg -i stereo.wav -filter_complex "[0:a]channelsplit=channel_layout=stereo:channels=FR[right]" -map "[right]" front_right.wav
  • channel_layout入力のチャンネルレイアウトです。自動的に検出されないため、レイアウト名を指定する必要があります。
  • channels抽出したいチャンネルをリストします。
  • ffmpeg -layoutsオーディオ チャネル レイアウト名 ( の場合channel_layout) およびチャネル名 ( の場合) については、 を参照してくださいchannels
  • ストリーム コピーモード ( ) は、フィルタリング時に使用-c copyできないため、オーディオを再エンコードする必要があります。
  • その他の例については、 FFmpeg Wiki: オーディオ チャネルを参照してください。

-mapとはどう違い-vnますか?

ffmpegには、ストリーム タイプごとに 1 つのストリームを選択するデフォルトのストリーム選択動作があります (1 つのビデオ、1 つのオーディオ、1 つの字幕、1 つのデータ)。

-vn古いレガシーオプションです。デフォルトのストリーム選択動作からビデオを除外します。-anそのため、 、-sn、またはで指示しない限り、音声、字幕、およびデータは引き続き自動的に選択され-dnます。

-mapより複雑ですが、より柔軟で便利です。-mapデフォルトのストリーム選択動作を無効にffmpegし、オプションで指定したもののみを含めます-map-map特定のストリームまたはストリーム タイプを除外するためにも使用できます。たとえば、すべてのビデオを除く-map 0 -map -0:vすべてのストリームが含まれます。

その他の例については、 FFmpeg Wiki: マップを参照してください。


エラー

オーディオ ストリームが無効です。MP3 オーディオ ストリームが 1 つだけ必要です。

MP3 は 1 つのオーディオ ストリームのみをサポートします。このエラーは、複数のオーディオ ストリームを MP3 に入れようとしていることを意味します。非 MP3 オーディオを MP3 に変換しようとしている可能性もあります。

WAVE ファイルにはストリームが 1 つだけあります

上記と同様。

ストリーム #0 でコーデックのタグが見つかりませんでした。コーデックは現在コンテナでサポートされていません

PCM (WAV) を MP4 に変換するなど、オーディオ形式をサポートしていない出力に挿入しようとしています。

を削除する-c copyか、別の出力形式を選択する (ファイル名拡張子を変更する) か、手動でエンコーダー ( など-c:a aac) を選択します。

コンテナー形式の比較を参照してください。

出力ファイル #0 のヘッダーを書き込めませんでした (コーデック パラメータが正しくありませんか?): 引数が無効です

これは役に立たない一般的なエラーです。実際の有益なエラーは、この一般的なエラー メッセージの直前に表示されます。

于 2020-08-03T22:42:40.103 に答える
30

ビデオ ファイルからオーディオを抽出し、ステレオ チャンネルにダウンミックスしているようです。
オーディオのみを抽出するには (再エンコードせずに):

ffmpeg.exe -i in.mp4 -vn -c:a copy out.m4a

オーディオとダウンミックスをステレオに抽出するには(再エンコードなし):

ffmpeg.exe -i in.mp4 -vn -c:a copy -ac 2 out.m4a

mp3 ファイルを生成するには、オーディオを再エンコードします。

ffmpeg.exe -i in.mp4 -vn -ac 2 out.mp3
于 2021-02-09T13:41:59.750 に答える
11

ffmpeg -i sample.aviファイルのオーディオ/ビデオ形式情報を提供します。入力ストリームを解析するために適切なライブラリが構成されていることを確認してください。また、ファイルが破損していないことを確認してください。

于 2012-03-28T17:55:34.120 に答える
9

mp3 オーディオをエンコードするには、 ffmpeg.orgに次の例を示します。

ffmpeg -i input.wav -codec:a libmp3lame -qscale:a 2 output.mp3

input.wavビデオのファイル名に置き換えるだけで、ビデオからオーディオを抽出しました。2平均 190 kb/秒。上記の私のリンクで他の品質レベルを見ることができます.

于 2016-12-13T06:28:33.500 に答える
4

複数のビデオ クリップからオーディオ ブックを作成する

  1. 最初に、一連の h264 ファイルからオーディオを (`.m4a として) 抽出します。
for f in *.mp4; do ffmpeg -i "$f" -vn -c:a copy "$(basename "$f" .mp4).m4a"; done

出力オプションは、-vnビデオ出力 (任意のビデオ ストリームの自動選択またはマッピング) を無効にします。完全な手動制御については、-mapオプションを参照してください。

オプション

  1. たとえば 40 秒のイントロがある場合は、次の-ssパラメーターを使用してスキップできます。
for f in *.m4a; do ffmpeg -i "$f" -ss 00:00:40  -c copy crop/"$f"; done
  1. すべてのファイルを 1 つに結合するには:
ffmpeg -f concat -safe 0 -i <(for f in ./*.m4a; do echo "file '$PWD/$f'"; done) -c copy output.m4a
于 2021-09-07T22:02:21.013 に答える
2

-acodec mp3avi にラップされたオーディオが最初から mp3 形式でない場合は、追加のパラメーターとして指定する必要がある場合があります。または、mp3 コーデックが何であれ (Linux システムではおそらく-acodec libmp3lame)。-f mp3ffmpeg のすべてのバージョンがそのスイッチをサポートしているわけではありませんが、代わりにフォーマットを mp3 に「強制」するように指定することで、プラットフォームに依存しない同じ効果が得られる場合もあります。あなたのマイレージは異なる場合があります。

于 2014-10-28T21:41:01.247 に答える