回答:
最初に実行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
ます。
Option map (set input stream mapping) cannot be applied to input file file.mp4 new_file.mp4 -- you are trying to apply an input option to an output file or vice versa. Move this option before the file it belongs to.
。修正するには、引数の順序を次のように変更するだけですffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
-c copy
を使用して、オーディオ、ビデオだけでなく字幕のストリームも同じにすることができますffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4
。
関連する問題-mp4ファイルからすべてのオーディオトラックを削除するには、次のようにします。
ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4
The encoder 'aac' is experimental but experimental codecs are not enabled, add '-strict -2' if you want to use it.
それらのフラグを追加しましたが、それはまだ同じです...?
ストリーム番号を特定します。
$ 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
-vn
または-an
、すべてのビデオまたはオーディオトラックを削除します。提供-vn -acodec copy
するとビデオが削除されます。-an -vcodec copy
すべてのオーディオが削除されます。
-vcodec copy
ffmpegが既存のビデオトラックをそのままコピーすることを指定します(処理もエンコードも行いません)。指定しない場合でも機能しますが、ffmpegは既存のビデオトラックを再エンコードする可能性があり、操作により多くのCPUが使用され、かなり時間がかかる可能性があります。
コマンドラインでのavidemuxの使用。
(上記のhttps://unix.stackexchange.com/a/85834/4319で説明されているAvidemux GUIでは、オーディオトラックを選択/選択解除してファイルを保存するだけです(すべてが新しい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スクリプトのみに言及しています(私にはうまくいきませんでした)。
ffmpeg
プログラムが置き換えられていますavconv
。avconv
に非常によく似た使い方があるためffmpeg
、この投稿のコマンドはすべて次のようになります。
avconv <old ffpmeg command line options>
Ubuntuを使用している場合は、このリンクに従ってインストールしavconv
てください。
FFMPEGはあなたに役立つソリューションかもしれません。
$ man ffmpeg