web-dev-qa-db-ja.com

MP4ビデオファイルからオーディオトラックを削除する方法

複数のオーディオトラックを含むmp4ビデオファイルがあります。残りのトラックを取り除き、1つだけ残したいと思います。どうすればよいですか?

107
tshepang

最初にffmpeg -i file.mp4を実行して、ファイルに存在するストリームを確認します。次のようなものが表示されます。

Stream #0.0: Video: mpeg4, yuv420p, 720x304 [PAR 1:1 DAR 45:19], 23.98 tbr, 23.98 tbn, 23.98 tbc
Stream #0.1: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s
Stream #0.2: Audio: ac3, 48000 Hz, 5.1, s16, 384 kb/s

次に、ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4を実行して、ビデオストリームと2番目のオーディオストリームをnew_file.mp4にコピーします。

122
gelraen

関連する問題-削除 すべて mp4ファイルからのオーディオトラックは次のように実行できます。

ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4
106
Greg Marks

ストリーム番号を特定します。

$ ffmpeg -i in.mp4
   ...
   Stream #0:0: Video: ...
   Stream #0:1: Audio: ...
   Stream #0:2: Audio: ...

使用する -map _file_:_stream_処理および出力するストリームを選択します

$ ffmpeg -i in.mp4 -map 0:0 -map 0:2 -vcodec copy -acodec copy out.mp4

参照: https://ffmpeg.org/ffmpeg.html#Advanced-options

8
jgr

avidemux を試してみてください。これは、内部で1つのオーディオファイルのみを処理します(したがって、特定のトラックを1つ選択する必要があります)。 .mp4で試したことはありませんが、他の形式で動作します。

4
wag

Avidemux (GUI)を数回使用しました ffmpeg (コンソール)。

Avidemuxでは、メインメニューで[オーディオ]-> [トラックの選択]を選択します。次に、ビデオを新しいファイルとして保存します。

興味深いことに、Avidemuxはffmpegよりも「より良い」出力を生成する場合がありました。

念のため、Avidemuxとffmpegは標準のFedora Linuxリポジトリにあります。 (他のLinuxフレーバーでも標準的だと思います。)

3
Maxim

-vnまたは-anは、すべてのビデオまたはオーディオトラックを削除します。供給-vn -acodec copyは動画を削除します。 -an -vcodec copyはすべてのオーディオを削除します。

-vcodec copyは、ffmpegが既存のビデオトラックを直接コピーする(そしてそれを処理/エンコードしない)ことを指定します。これを指定しない場合でも機能しますが、ffmpegは既存のビデオトラックを再エンコードする場合があり、操作により多くのCPUが使用され、かなり時間がかかる場合があります。

1
lots of crisps

ffmpegプログラムはavconvに置き換えられました。 avconvの使い方はffmpegとよく似ているため、この投稿のすべてのコマンドは次のようになります。

avconv <old ffpmeg command line options>

Ubuntuを使用している場合は、 このリンク に従ってavconvをインストールします。

0
SmallChess

コマンドラインでのavidemuxの使用。

(Avidemux GUIでは、上記の https://unix.stackexchange.com/a/85834/4319 で説明されているように、オーディオトラックを選択/選択解除し、ファイルを保存するだけです。すべてがコピーされます。新しいAVIへ)。

私のアクションではどのような種類のプロジェクトがSpiderMonkeyまたはTinyPyプロジェクトとして保存されているかを調べましたが、SpiderMonkey(JavaScript)プロジェクトには必要なオーディオトラック選択アクションが欠けていることがわかりましたが、TinyPy(Python)プロジェクトにはありましたそれら。

私は関係のないものをすべて削除しました(不要な数十行)。これがsome_series.py

#PY  <- Needed to identify #
#--automatically built--

adm = Avidemux()

adm.audioClearTracks()
adm.audioAddTrack(1)

トラック1を離れますが、トラック0をドロップします。

次に、次のようなコマンドを使用して、多くのファイルのバッチ変換を実行しました。

for f in *.avi; do avidemux3_cli --nogui --load "$f" --run ../some_series.py --save ../some_series/"${f%%.rus.eng.avi}".eng.avi --quit; done

すべてをコピーしますが、必要なオーディオトラック以外はすべてドロップします。

コマンドラインからavidemuxを実行する方法は https://www.avidemux.org/admWiki/doku.php?id=tutorial:batch_processing から学んだが、=については触れられていないPythonスクリプト、JSスクリプトのみ(これは私には機能しませんでした)。