Bagaimana cara mengekstrak subtitle dari video menggunakan ffmpeg?

34

Saya mencoba mengekstrak subtitle dari video sebagai .srtfile, saya menggunakan perintah berikut:

FFMPEG -i mytestmovie.mkv -vn -an -codec:s:0.1 srt sub.srt

Tapi, saya mendapat kesalahan sebagai opsi Tidak Dikenali codec:s:0:1 Jadi, dapatkah Anda memberi tahu saya perintah yang tepat dan cara mengekstrak subtitle sebagai .srtfile dalam video?

vijay
sumber
umair: tolong beri tahu aku di command prompt
vijay
Saya memiliki masalah yang sama. Apakah Anda mendapatkan ini pada akhirnya berhasil?
Maxime Labelle

Jawaban:

51

Sederhana:

ffmpeg -i Movie.mkv -map 0:s:0 subs.srt
  • -i : Masukkan URL file / path.
  • -map : Tentukan satu atau beberapa aliran input sebagai sumber untuk file output.
  • s: 0 : Pilih aliran subtitle.
jm3
sumber
2
Ini bekerja untuk saya dengan file MP4 dengan subtitle tertanam.
Rubens Mariuzzo
11
Ini akan mengunduh trek subtitle pertama. Jika ada beberapa, gunakan 0:s:1untuk mengunduh yang kedua, 0:s:2untuk mengunduh yang ketiga, dan seterusnya.
Fabien Snauwaert
5
@ jm3 Apakah Anda tahu cara untuk mengekstrak semua subtitle stream dari file secara otomatis, menamai mereka setelah pengidentifikasi bahasa mereka (mis. eng, fre, dut, dll.)?
Fr.
mengapa sangat lambat saat mengekstraksi dari wadah MKV besar (~ 4 gb)?
pengguna25
Untuk mengekstrak lebih banyak subtitle sekaligus Anda harus menduplikasi -mapparameter untuk setiap file. Juga termasuk -c copysehingga hanya ekstrak file tanpa berusaha untuk memprosesnya: ffmpeg -i Movie.mkv -c copy -map 0:s:0 subs.01.srt -c copy -map 0:s:1 subs.02.srt. Lagi pula itu akan memakan waktu lama karena ffmpeg harus membaca seluruh file video untuk menemukan semua bagian dari subtitle stream.
Radek Pech
8

-codec:s:0:1salah. Jika Anda menggunakan -codec:s:0maka ffmpeg akan menggunakan codec yang dinyatakan untuk aliran subtitle pertama yang diteruskan ke output, jika Anda menggunakannya -codec:s:1maka ia akan menggunakannya untuk aliran subtitle kedua, dll.

Anda juga dapat menggunakan -codec:suntuk memilih semua aliran subtitle output, atau -codec:2untuk memilih aliran output ketiga, terlepas dari apa itu.

Anda mungkin bingung karena -mapopsi berperilaku dengan cara yang berbeda - di sana, Anda harus memilih input yang berasal dari aliran yang dipilih. (jadi, -map 0:s:0akan mengambil aliran subtitle pertama dari input pertama, dan memasukkannya ke output). Namun, -mapuntuk memilih aliran mana yang ingin Anda ambil dari input; sedangkan sebagian besar opsi lain yang menggunakan pemetaan aliran adalah untuk digunakan pada aliran setelah mereka dipilih (jadi tidak perlu menentukan file input mana mereka berasal), karena mereka diteruskan ke output.

Evilsoup
sumber
evilsoup: saya akan menggunakan perintah berikut E: \ FFMpeg_Latest> ffmpeg -i E: \ Routine \ routine.mkv -vn -an -map 0: s: 0 srt E: \ Routine \ sub.srt, sepertinya ini adalah kesalahan saya dapatkan Tidak dapat menemukan format output yang cocok untuk 'srt', dapatkah Anda memberi tahu saya perintah untuk mengekstraksi subtitle dalam video ...
vijay
2
Coba: ffmpeg -i E:\Routine\routine.mkv -map 0:s:0 E:\Routine\sub.srt(ffmpeg akan mendeteksi bahwa Anda menginginkan subtitle srt dari nama file keluaran)
evilsoup
Saya menggunakan: ffmpeg -i film.mp4 -vn -an -codec:s srt film.srtyang seharusnya menyalin semua subtitle ke file srt.
Stuart
@Stuart tidak mengekstrak semua terjemahan
user25
1
@evilsoup -codec:ssama dengan -codec:s:0sehingga tidak memilih semua subtitle ... itu akan mengekstrak teks pertama
user25