Saya mencoba menambahkan subtitle teks ke wadah .mp4 menggunakan ffmpeg:
ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mp4
Ketika saya mencoba menjalankan baris ini, itu memberi saya kesalahan:
Jumlah peta aliran harus sesuai dengan jumlah aliran keluaran.
Jika saya mencoba mengubah mp4 ke mkv (meskipun mp4 mendukung subtitle teks), seperti ini:
ffmpeg -i input.mp4 -i input.srt -map 0.0 -map 0.1 -map 1.0 output.mkv
Ini memetakan aliran dengan benar, tetapi memberikan kesalahan:
Encoder (codec id 94210) tidak ditemukan untuk aliran keluaran # 0.2
Saat saya meluncurkan
ffmpeg -codecs
Saya dapat melihat bahwa codec srt didukung sebagai decoder dan encoder, namun saya tidak yakin apa yang digunakan untuk encoding mp4 dan mkv subs, dan apakah saya perlu mengaktifkannya atau mengkompilasi secara terpisah.
-c:s copy
bukan dengan-c:s mov_text
.CATATAN: Solusi ini "membakar teks film" ke dalam video, sehingga setiap pemirsa video akan dipaksa untuk melihatnya.
Gunakan
libass
pustaka (pastikan pemasangan ffmpeg Anda memiliki pustaka dalam konfigurasi--enable-libass
).Pertama, ubah subtitle ke
.ass
format:Kemudian tambahkan menggunakan filter video:
sumber
libass
ekstensi jika tidak ada di sistem Debian dengan `apt update && apt install libass-dev".Anda mencoba untuk mengubah subtitle sebagai aliran subtitle. Mudah tetapi sintaks yang berbeda digunakan untuk MP4 (atau M4V) dan MKV. Dalam kedua kasus, Anda harus menentukan codec video dan audio, atau cukup salin streaming jika Anda hanya ingin menambahkan subtitle.
MP4:
MKV:
sumber
Kontainer MKV mendukung codec video dan audio Hampir apa saja dan juga mendukung subtitle dan menu DVD. Jadi Anda cukup menyalin codec dari video input ke video output dengan wadah MKV dengan subtitle. Pertama Anda harus mengonversi SRT ke format subtitle ASS
dan menyematkan subtitel ASS ke video
Juga bekerja dengan file VMW.
lihat halaman wiki Perbandingan format wadah
sumber
ffmpeg mendukung
mov_text
encoder subtitle yang merupakan satu-satunya yang didukung dalam wadah MP4 dan dapat dimainkan oleh iTunes, Quicktime, iOS dll.Baris Anda akan berbunyi:
ffmpeg -i input.mp4 -i input.srt -map 0:0 -map 0:1 -map 1:0 -c:s mov_text output.mp4
sumber
Saya mencoba menggunakan MP4Box untuk tugas ini, tetapi tidak dapat menangani M4V yang saya tangani. Saya berhasil menyematkan SRT sebagai subtitle lembut dengan ffmpeg dengan baris perintah berikut:
ffmpeg -i input.m4v -i input.srt -vcodec copy -acodec copy -scodec copy -map 0:0 -map 0:1 -map 1:0 -y output.mkv
Seperti Anda, saya harus menggunakan file keluaran MKV - saya tidak dapat membuat file M4V.
sumber
Saya akan memberikan jawaban sederhana dan umum yang berfungsi dengan sejumlah subtitle audio dan srt dan menghormati metadata yang mungkin menyertakan penampung mkv . Jadi bahkan akan menambahkan gambar yang mungkin termasuk matroska sebagai lampiran (meskipun bukan jenis AFAIK lain) dan mengubahnya menjadi trek; Anda tidak akan dapat menonton tetapi mereka akan ada di sana (Anda dapat mendemuxnya). Ah, dan jika mkv memiliki bab, mp4 juga.
Seperti yang Anda lihat, ini semua tentang
-map 0
, yang memberi tahu FFmpeg untuk menambahkan semua trek, yang mencakup metadata, bab, lampiran, dll. Jika ada "trek" yang tidak dikenal ( mkv memungkinkan untuk melampirkan semua jenis file), itu akan diakhiri dengan kesalahan.Anda dapat membuat kumpulan sederhana
mkv2mp4.bat
, jika biasanya Anda melakukan ini, untuk membuat mp4 dengan nama yang sama dengan mkv . Akan lebih baik dengan kontrol kesalahan, nama keluaran yang berbeda, dll, tetapi Anda mengerti maksudnya.Sekarang Anda bisa langsung lari
Dan itu akan membuat "Video dengan subtitle etc.mp4" dengan informasi maksimum yang disertakan.
sumber
Contoh Sederhana:
Hanya ganti variabel linux
sumber
Inilah alasan mengapa mkv adalah wadah yang bagus, terutama sekarang setelah matang:
sumber