Bagaimana cara menghapus trek audio dari file video mp4?

97

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

tepang
sumber
terkait: stackoverflow.com/questions/38161697/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

111

Pertama jalankan ffmpeg -i file.mp4untuk 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.mp4untuk menyalin streaming video dan streaming audio ke-2 new_file.mp4.

gelraen
sumber
3
Pada Windows, perintah ini memberikan kesalahan 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
MrLore
Kesalahan yang sama seperti @MrLore pada OS X.
Oskar Persson
1
Sama di Ubuntu!
Tommaso
Berfungsi untuk format MKV juga
user3405291
1
Anda dapat menggunakan opsi yang lebih umum -c copyuntuk memiliki aliran identik untuk audio, video tetapi juga sub judul: ffmpeg -i input.mp4 -map 0:0 -map 0:2 -c copy output.mp4.
Futal
97

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

ffmpeg -i input_file.mp4 -vcodec copy -an output_file.mp4
Greg Marks
sumber
1
Ini memberi saya kesalahan 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 ...?
poshaughnessy
Lihat juga: superuser.com/questions/268985/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
Komentar ulang poshaughnessy: sepertinya ada beberapa informasi di sini: stackoverflow.com/questions/32931685/... Diskusi menyarankan versi terbaru dari ffmpeg tidak mengalami masalah "aac eksperimental". Sebagai aturan umum, ini membantu untuk mendiagnosis masalah Anda jika Anda menyatakan versi perangkat lunak yang Anda gunakan dan sintaks yang tepat dari perintah (setelah Anda menambahkan tanda) yang memberikan kesalahan (lih. Lok jawaban freeseek. Cit. ). Dalam kasus khusus ini, informasi video dari file input juga dapat membantu.
Greg Marks
8

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

jgr
sumber
4

Anda dapat mencoba avidemuxyang 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.

mengibaskan
sumber
Tidak bekerja dengan baik. Mungkin itu adalah bug, tetapi audio kembali rusak, meskipun ia melakukan pekerjaannya (menghapus sisa trek audio).
tshepang
3

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

Pepatah
sumber
1

-vnatau -anakan menghapus semua trek video atau audio. Memasok -vn -acodec copyakan menghapus video; -an -vcodec copyakan menghapus semua audio.

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

banyak keripik
sumber
0

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

imz - Ivan Zakharyaschev
sumber
-1

Jika Anda tidak keberatan programnya adalah GUI, dengan editor video Blender Anda dapat melakukan itu dan banyak lagi.

YoMismo
sumber
-2

The ffmpegprogram telah digantikan oleh avconv. avconvmemiliki penggunaan yang sangat mirip ffmpeg, sehingga semua perintah dalam posting ini dapat berupa:

avconv <old ffpmeg command line options>

Ikuti tautan ini untuk menginstal avconvjika Anda menggunakan Ubuntu.

Catur kecil
sumber
-3

FFMPEG mungkin merupakan solusi yang bermanfaat untuk Anda.

$ man ffmpeg
koolhead17
sumber
Saya melihat sekilas, dan itu cukup padat. Saya mencari "audio" dan "track audio" dan tidak ada yang tampak jelas.
tshepang
@Tepang, "track" adalah ambigu, yang mungkin mengapa FFmpeg lebih suka terminologi yang lebih tepat. FFmpeg menganggap audio datang dalam "aliran", masing-masing terdiri dari satu atau lebih "saluran". AFAICT, masing-masing saluran adalah mono, dengan aliran yang menggambarkan keluaran mana yang harus dikirim (panned) secara default. Misalnya aliran stereo terdiri dari dua saluran, satu dikirim ke output kiri kartu suara secara default, dan yang lain dikirim ke output kanan kartu suara secara default.
sampablokuper