Jawaban:
Pertama jalankan ffmpeg -i file.mp4
untuk melihat aliran mana yang ada di file Anda. Anda harus melihat sesuatu seperti ini:
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
Kemudian jalankan ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
untuk menyalin streaming video dan streaming audio ke-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.
: untuk memperbaikinya cukup ubah urutan argumen dengan demikian:ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4
-c copy
untuk memiliki aliran identik untuk audio, video tetapi juga sub judul: ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4
.
Masalah terkait — menghapus semua trek audio dari file mp4 dapat dilakukan sebagai berikut:
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.
Tapi saya menambahkan bendera itu dan masih sama ...?
Identifikasi nomor aliran:
$ ffmpeg -i in.mp4
...
Stream #0:0: Video: ...
Stream #0:1: Audio: ...
Stream #0:2: Audio: ...
Gunakan -map _file_:_stream_
untuk memilih aliran mana untuk diproses dan di-output
$ ffmpeg -i in.mp4 -map 0:0 -map 0:2 -vcodec copy -acodec copy out.mp4
Anda dapat mencoba avidemux
yang menangani hanya satu file audio secara internal (dan karenanya memaksa Anda untuk memilih satu trek tertentu). Saya belum pernah mencobanya dengan .mp4 tetapi berfungsi dengan format lain.
Saya menggunakan Avidemux (GUI) beberapa kali, dan ffmpeg (konsol).
Di Avidemux, Anda memilih "Audio" -> "Pilih trek" di menu utama; lalu simpan video Anda sebagai file baru.
Yang cukup menarik, dalam beberapa kasus Avidemux menghasilkan output "lebih baik" daripada ffmpeg.
untuk jaga-jaga, Avidemux dan ffmpeg berada dalam repositori standar Fedora Linux. (Saya yakin itu juga standar untuk citarasa Linux lainnya.)
-vn
atau -an
akan menghapus semua trek video atau audio. Memasok -vn -acodec copy
akan menghapus video; -an -vcodec copy
akan menghapus semua audio.
-vcodec copy
menetapkan bahwa ffmpeg harus melakukan salin langsung trek video yang ada (dan tidak melakukan pemrosesan / penyandian apa pun). Jika Anda tidak menentukannya, maka ia masih akan bekerja tetapi ffmpeg dapat menyandikan ulang trek video yang ada dan operasi akan menggunakan lebih banyak CPU dan mungkin membutuhkan waktu lebih lama.
Menggunakan avidemux di command-line.
(Dalam GUI Avidemux, sebagaimana dijelaskan dalam https://unix.stackexchange.com/a/85834/4319 di atas, Anda cukup memilih / membatalkan pilihan trek audio, dan menyimpan file. (Semuanya disalin ke AVI baru.))
Saya telah melihat proyek seperti apa yang disimpan sebagai projek SpiderMonkey atau TinyPy untuk tindakan saya, dan ternyata proyek SpiderMonkey (JavaScript) tidak memiliki tindakan pemilihan trek audio yang saya butuhkan, tetapi proyek TinyPy (Python) memang memiliki mereka.
Saya menghapus semua yang tidak berhubungan (selusin baris yang tidak dibutuhkan), dan inilah yang saya dapatkan di some_series.py
:
#PY <- Needed to identify #
#--automatically built--
adm = Avidemux()
adm.audioClearTracks()
adm.audioAddTrack(1)
Ia meninggalkan track 1, tetapi menjatuhkan track 0.
Lalu saya menjalankan konversi batch banyak file dengan perintah seperti ini:
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
Ini menyalin segalanya, tetapi menghapus semua kecuali track audio yang dibutuhkan.
Cara menjalankan avidemux dari command-line dipelajari oleh saya dari https://www.avidemux.org/admWiki/doku.php?id=tutorial:batch_processing , meskipun mereka tidak menyebutkan skrip Python, hanya skrip JS (hanya yang JS) ( yang tidak berhasil untuk saya).
The ffmpeg
program telah digantikan oleh avconv
. avconv
memiliki penggunaan yang sangat mirip ffmpeg
, sehingga semua perintah dalam posting ini dapat berupa:
avconv <old ffpmeg command line options>
Ikuti tautan ini untuk menginstal avconv
jika Anda menggunakan Ubuntu.
FFMPEG mungkin merupakan solusi yang bermanfaat untuk Anda.
$ man ffmpeg