Subtitle burn-in dengan avconv?

4

Saya memiliki file mkv dan ingin mengonversinya menjadi file mpg yang kompatibel dengan DVD avconv. Bagaimana saya bisa membakar satu aliran subtitle dari file mkv yang sama?

avconv -i input.mkv -map 0:0 -map 0:1 -target pal-dvd -aspect 16:9 -q:v 1 -acodec mp2 -ac 2 -ab 128k output.mpg

user4811
sumber

Jawaban:

5

Subtitle berbasis teks

ffmpeg memiliki subtitles filter yang dapat membakar file SRT ke aliran video. Anda perlu dikompilasi dengan ffmpeg --enable-libass meskipun. Saya tidak berpikir Libav memiliki sesuatu yang serupa, setidaknya melihat ke atas filter yang tersedia .

Pertama-tama Anda perlu mengekstraksi subtitle. -map 0:s:0 memilih aliran subtitle pertama untuk output, dan -c:s:0 memilih codec untuk itu - hanya untuk memastikan itu benar-benar SRT.

ffmpeg -i input.mkv -an -vn -map 0:s:0 -c:s:0 srt subtitles.srt

Kemudian, bakar mereka.

ffmpeg -i input.mkv -map 0:0 -map 0:1 -target pal-dvd -aspect 16:9 -q:v 1 \
-c:a mp2 -ac 2 -b:a 128k -filter:v subtitles=subtitles.srt output.mpg

catatan:

  • Perintah di atas menganggap bahwa stream 0:0 dan 0:1 di input Anda masing-masing adalah aliran video dan audio. Jika Anda hanya ingin mencegah subtitle agar tidak dimasukkan dalam file output, maka Anda juga dapat menambahkan -sn untuk menonaktifkannya sama sekali.

  • Anda harus berubah -ab untuk -b:a, karena yang pertama adalah opsi yang tidak ada untuk ffmpeg.


Subtitle berbasis gambar

Jika input Anda memiliki subtitle berbasis gambar seperti HDMV PG (sepertinya MakeMKV membuatnya, dan alat lain tidak dapat mengekstraknya), Anda dapat mencoba menggunakan filter overlay untuk membakarnya:

ffmpeg -i input.mkv -filter_complex "[0:v][0:s]overlay[v]" -map [v] -map 0:a \
-target pal-dvd -aspect 16:9 -q:v 1 -c:a mp2 -ac 2 -b:a 128k output.mpg

Ini juga dijelaskan pada FFmpeg Wiki .

Jika subtitle Anda memiliki dimensi yang berbeda dari film aslinya (mis. Karena streaming video diperkecil tetapi subtitle tidak), Anda dapat mencoba itu -canvas_size pilihan untuk mengatur ukuran.

slhck
sumber
Terima kasih atas bantuan Anda tetapi ekstraksi tidak berfungsi. Saya mendapatkan pesan kesalahan berikut "Kesalahan saat membuka encoder untuk aliran keluaran # 0: 0 - mungkin parameter yang salah seperti bit_rate, laju, lebar atau tinggi" Aliran subtitle diumumkan sebagai "Subtitle: hdmv_pgs_subtitle". Apakah Anda tahu apa masalahnya?
user4811
Terima kasih! Saya juga sudah mencoba ini tetapi subtitle tidak muncul dan saya mendapatkan pesan "sub2video: rectangle overflowing". Saya telah menemukan bahwa masalahnya adalah bahwa sumbernya dikonversi dari 1080p ke 720p tetapi subtitle masih 1080p. Apakah mungkin untuk menskala aliran subtitle ke 720p sebelum overlay?
user4811
Ya, itu seharusnya mungkin. "[0:s]scale=-1:720[subs];[0:v][subs]overlay[v]" atau sesuatu. Saya tidak bisa mengujinya sekarang, tetapi sesuatu seperti itu seharusnya berhasil.
slhck
Sial, masih mendapatkan "sub2video: rectangle overflowing" dan tidak ada subtitle dalam output. Ini benar, atau? ffmpeg -i input.mkv -filter_complex "[0: s] skala = -1: 720 [subs]; [0: v] [subs] overlay [v]" -map [v] -map 0: a: 0 - target pal-dvd -aspect 16: 9 -q: v 1 -c: a mp2 -ac 2 -b: a 128k output.mpg
user4811
Solusinya adalah parameter "-canvas_size" untuk menentukan kanvas untuk subtitle. Itu harus menjadi parameter pertama!
user4811