私はビデオからオーディオを抽出するために次のコマンドを試しました: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
誰か助けてください。
再エンコードせずにオーディオストリームを抽出するには
ffmpeg -i input-video.avi -vn -acodec copy output-audio.aac
-vn
はビデオではありません。-acodec copy
は、すでにそこにあるのと同じオーディオストリームを使うと言います。正しいコーデック拡張子を設定するために、それがどんなコーデックであるかを見るために出力を読んでください。
AVIから高品質のMP3をエンコードするには、 - q:aの可変ビットレートを使用します。
ffmpeg -i sample.avi -q:a 0 -map a sample.mp3
あなたがビデオからオーディオの一部を抽出したい場合は、 - ssを使用してください。 - )開始タイムスタンプを指定するオプションと、 - tオプションを指定してエンコード時間を指定します(例:3分5秒から45秒まで)。
ffmpeg -i sample.avi -ss 00:03:05 -t 00:00:45.0 -q:a 0 -map a sample.mp3
タイムスタンプは、HH:MM:SS.xxx形式または秒単位である必要があります。
- tオプションを指定しないと、最後に進みます。
ffmpeg -i sample.avi
はあなたのファイルのためのオーディオ/ビデオフォーマット情報をあなたに与えるでしょう。入力ストリームを解析するように適切なライブラリが構成されていることを確認してください。また、ファイルが破損していないことを確認してください。
コマンドラインは正しく、有効なビデオファイルで機能します。私はあなたがmp3で動作するように正しいライブラリをインストールしたことを確認するでしょう、他のオーディオコーデックでlame oプローブをインストールします。
通常
ffmpeg -formats
または
ffmpeg -codecs
あなたがもっと知るために十分な情報を与えるでしょう。
Mp3オーディオをエンコードするには ffmpeg.org は次の例を示します。
ffmpeg -i input.wav -codec:a libmp3lame -qscale:a 2 output.mp3
input.wav
をビデオのファイル名に置き換えるだけで、ビデオからオーディオを抽出しました。 2
は190 kb/secを意味します。あなたは上記の私のリンクで他の品質レベルを見ることができます。
ただ推測:
-ab 192
あるべき
-ab 192k
そのように思えるかもしれませんが、ffmpegはそれを修正するのに十分賢いです。
Aviにラップされたオーディオが最初はmp3フォーマットではない場合、追加パラメータとして-acodec mp3
を指定する必要があるかもしれません。またはあなたのmp3コーデックがなんであれ(Linuxシステムではおそらく-acodec libmp3lame
)。 ffmpegのすべてのバージョンがまだそのスイッチをサポートしているわけではありませんが、代わりに-f mp3
を指定してフォーマットをmp3に「強制」しても、プラットフォームに依存しない同じ効果が得られます。あなたのマイレージは異なる場合があります。
変換せずに抽出するには、Linuxのファイルマネージャーカスタムアクションとしてコンテキストメニューエントリを使用して、次を実行します(ビデオに含まれるオーディオタイプを確認した後、ogg
オーディオを含むビデオの例):
bash -c 'ffmpeg -i "$0" -map 0:a -c:a copy "${0%%.*}".ogg' %f
これは、ffmpegコマンドffmpeg -i INPUT -map 0:a -c:a copy OUTPUT
に基づいています。
私は問題なく-map 0:1
を使用しましたが、@ LordNeckbeardのコメントで述べられているように、「ストリーム0:1
は常にオーディオであるとは限りません。代わりに-map 0:a
of -map 0:1
はあいまいさを回避します。 "
-b:a
は現在古くなっているため、-ab
の代わりに-ab
を使用してください。入力ファイルのパスが正しいことを確認してください。
ビデオからオーディオを抽出するために、以下のコマンドとその正常な動作を使用しました。
String[] complexCommand = {"-y", "-i", inputFileAbsolutePath, "-vn", "-ar", "44100", "-ac", "2", "-b:a", "256k", "-f", "mp3", outputFileAbsolutePath};
ここに、
-y
尋ねずに出力ファイルを上書きします。
-私
ffmpegは、-iオプションで指定された任意の数の入力「ファイル」から読み取ります。
-vn
ビデオ録画を無効にする
-ar
エンコードされている場合、オーディオストリームのサンプリングレートを設定します
-交流
音声チャンネル数を設定します。
-b:a
オーディオのビットレートを設定する
-f
フォーマット
Githubの私の完全なサンプルffmpeg Androidプロジェクトのために this をチェックしてください。
これが私が今使ったものです:
ffmpeg -i input.mkv -ss 01:06:57 -to 01:21:07 -c:v copy -c:a copy output.mp4
これが私が今使ったものです:
ffmpeg -i my.mkv -map 0:3 -vn -b:a 320k my.mp3
オプションの説明
-map 0:3
は、ビデオファイルから3番目のストリームが欲しいことを意味します。そこにあなたのNを置く - ビデオファイルはしばしば複数のオーディオストリームを持っています。省略するか、-map 0:a
を使用してデフォルトのオーディオストリームを取得できます。 ffprobe my.mkv
を実行してビデオファイルのストリームを確認します。