Bagaimana cara mengganti streaming audio dalam file video dengan beberapa stream audio?

19

Saya ingin mengganti aliran audio kedua (0: 2) dalam file video yang memiliki dua aliran audio dan memberikan label jika memungkinkan. Bagaimana saya melakukannya? Semua perintah ffmpeg yang saya temukan tidak akan membiarkan saya menjaga aliran audio kedua.

Anonim
sumber

Jawaban:

22

Gunakan -mapopsi untuk memilih aliran Anda. Pilihan aliran default hanya akan memilih satu dari setiap jenis aliran, oleh karena itu -mapharus digunakan.

Ganti aliran audio kedua

masukkan deskripsi gambar di sini

ffmpeg -i video.mkv -i audio.mp3 -map 0:v -map 0:a:0 -map 1:a \
-metadata:s:a:0 language=eng -metadata:s:a:1 language=sme -codec copy \
-shortest output.mkv
  • 0:v- 0Mengacu pada input pertama yaitu video.mkv. The vberarti "pilih streaming video jenis".

  • 0:a:0- 0Mengacu pada input pertama yaitu video.mkv. The aberarti "memilih jenis stream audio". Yang terakhir 0mengacu pada aliran audio pertama dari input ini. Jika hanya 0:adigunakan, maka semua streaming video akan dipetakan.

  • 1:a- 1Mengacu pada input kedua yaitu audio.mp3. The aberarti "memilih jenis stream audio".

  • -codec copyakan melakukan streaming salinan (re-mux) alih-alih menyandikan. Jika Anda memerlukan codec audio tertentu, Anda harus menentukan -c:v copy(untuk menyimpan video) dan kemudian, misalnya, -c:a libmp3lameuntuk menyandikan ulang aliran audio ke MP3.

  • -shortest akan mengakhiri output ketika input terpendek berakhir.

Gabungkan dua aliran audio menjadi satu

masukkan deskripsi gambar di sini

ffmpeg -i vid.mkv -i aud.mp3 -filter_complex "[0:a][1:a]amerge=inputs=2[a]" \
-map 0:v -map "[a]" -c:v copy -c:a aac -strict experimental -b:a 192k -ac 2 \
-shortest out.mp4
  • Penyaringan membutuhkan pengodean ulang, dan amergepenyaringan digunakan di sini, sehingga audio tidak dapat disalin dalam contoh ini.
llogan
sumber
sama sekali tidak bekerja untuk saya.
Rudolf Olah
@ rumah "tidak bekerja" sulit untuk memberikan bantuan. Anda harus menggunakan tautan pastebin untuk menunjukkan perintah Anda dan output konsol lengkap.
llogan
Masalah saya adalah -codec copy, tapi saya memperbaikinya (versi ffmpeg berbeda), masalah lain yang saya miliki adalah dengan -map, ia mengeluhkan jumlah aliran yang salah.
Rudolf Olah
1
Saya baru saja digunakan -map 0:v -map 1:a. Saya berasumsi ini berarti mengambil video dari file pertama (video.mkv) dan kemudian mengambil audio dari file kedua (audio.mp4) untuk membuat output.mkv ... Tidak yakin untuk apa -map 0:a:0itu. Saya mengecualikannya dan saya mendapatkan hasil yang saya inginkan.
Sun
2
@ aaronk6 Pertanyaan awal meminta cara untuk memetakan beberapa aliran audio ke output. Contoh mengambil aliran audio pertama dari input pertama, dan aliran audio dari input kedua dan memetakannya ke output. Tampaknya beberapa orang berasumsi bahwa contoh membuat output dengan aliran audio tunggal dan kemudian bingung.
Logan