it-swarm-id.com

Bagaimana cara menghapus trek audio dari file video mp4?

Saya memiliki file video mp4 dengan beberapa trek audio. Saya ingin menghapus sisa trek dan hanya menyimpan satu. Bagaimana saya melakukan ini?

107
tshepang

Lari pertama ffmpeg -i file.mp4 untuk melihat aliran mana yang ada dalam 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

Lalu lari ffmpeg -i file.mp4 -map 0:0 -map 0:2 -acodec copy -vcodec copy new_file.mp4 untuk menyalin aliran video dan aliran audio ke-2 ke new_file.mp4.

122
gelraen

Masalah terkait — menghapus semua trek audio dari file mp4 dapat dilakukan sebagai berikut:

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

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

lihat: https://ffmpeg.org/ffmpeg.html#Advanced-options

8
jgr

Anda dapat mencoba avidemux yang hanya menangani 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.

4
wag

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.

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.)

3
Maxim

-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.

1
lots of crisps

Program ffmpeg telah diganti oleh avconv. avconv memiliki penggunaan yang sangat mirip dengan ffmpeg, sehingga semua perintah dalam postingan ini dapat berupa sesuatu seperti:

avconv <old ffpmeg command line options>

Ikuti tautan ini untuk menginstal avconv jika Anda menggunakan Ubuntu.

0
SmallChess

Menggunakan avidemux di command-line.

(Dalam GUI Avidemux, seperti yang 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 segala sesuatu, tetapi menjatuhkan semua kecuali trek 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 = Python, hanya skrip JS (yang tidak berfungsi untuk saya).