Bagaimana cara saya menambah dan / atau menyimpan subtitle saat mengonversi video?

16

Saya punya video mkv yang ingin saya konversikan ke mp4, tetapi dengan cara apa pun saya mencoba dan mengonversinya (Handbrake, WinFF, ffmpeg, mencoder, ... Saya kehilangan subtitle video. Bagaimana saya bisa mengkonversi video, menjaga subtitle, atau tambahkan subtitles.srt?

Saya juga ingin 2 pass encoding dengan bitrate video 4054 dan audio bitrate 160.

Terima kasih.

Saya diminta untuk ffmpeg -i:

joe@joe-Leopard-Extreme:/media/Elements/Home Folder/Videos$ ffmpeg -i iron.mkv
ffmpeg version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav     developers
built on Jun 12 2012 16:52:09 with gcc 4.6.3
*** THIS PROGRAM IS DEPRECATED ***
This program is only provided for compatibility and will be removed in a future release. Please use avconv instead.
[matroska,webm @ 0x1a319a0] Estimating duration from bitrate, this may be inaccurate
Input #0, matroska,webm, from 'iron.mkv':
Metadata:
title           : Iron 
Duration: 02:06:01.67, start: 0.000000, bitrate: 1280 kb/s
Chapter #0.0: start 0.000000, end 546.170622
Metadata:
  title           : Chapter 00
Chapter #0.1: start 546.170622, end 1080.579489
Metadata:
  title           : Chapter 01
Chapter #0.2: start 1080.579489, end 1609.941667
Metadata:
  title           : Chapter 02
Chapter #0.3: start 1609.941667, end 2101.849733
Metadata:
  title           : Chapter 03
Chapter #0.4: start 2101.849733, end 2595.259333
Metadata:
  title           : Chapter 04
Chapter #0.5: start 2595.259333, end 3158.488667
Metadata:
  title           : Chapter 05
Chapter #0.6: start 3158.488667, end 3564.644400
Metadata:
  title           : Chapter 06
Chapter #0.7: start 3564.644400, end 4052.423356
Metadata:
  title           : Chapter 07
Chapter #0.8: start 4052.423356, end 4304.300000
Metadata:
  title           : Chapter 08
Chapter #0.9: start 4304.300000, end 4711.206489
Metadata:
  title           : Chapter 09
Chapter #0.10: start 4711.206489, end 5080.575489
Metadata:
  title           : Chapter 10
Chapter #0.11: start 5080.575489, end 5700.111067
Metadata:
  title           : Chapter 11
Chapter #0.12: start 5700.111067, end 6269.346400
Metadata:
  title           : Chapter 12
Chapter #0.13: start 6269.346400, end 6811.471333
Metadata:
  title           : Chapter 13
Chapter #0.14: start 6811.471333, end 7561.679000
Metadata:
  title           : Chapter 14
Stream #0.0(eng): Video: h264 (High), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc
Stream #0.1(eng): Audio: ac3, 48000 Hz, 5.1, s16, 640 kb/s (default)
Metadata:
  title           : 3/2+1
Stream #0.2(ita): Audio: ac3, 48000 Hz, 5.1, s16, 640 kb/s
Metadata:
  title           : 3/2+1
Stream #0.3(eng): Subtitle: pgssub (default)
Stream #0.4(eng): Subtitle: pgssub
Stream #0.5(eng): Subtitle: pgssub
Stream #0.6(eng): Subtitle: pgssub
At least one output file must be specified
joe@joe-Leopard-Extreme:/media/Elements/Home Folder/Videos
JoeSteiger
sumber

Jawaban:

19

Softsubs

MP4 mendukung subtitle format teks streaming, tetapi dukungan pemutaran untuk ini di antara pemain dan perangkat tidak universal.

Contoh dasar menggunakan perilaku pemilihan streaming default saat streaming menyalin audio:

ffmpeg -i input.mkv -c copy -c:s mov_text output.mp4

Contoh untuk melakukan streaming menyalin semua aliran video dan audio, mengonversi semua aliran input subtitle berbasis teks (SRT, ASS, VTT, dll.) Ke format teks streaming, dan mengatur bahasa untuk dua aliran subtitle pertama.

ffmpeg -i input.mkv -map 0 -c copy -c:s mov_text -metadata:s:s:0 language=eng -metadata:s:s:1 language=ipk output.mp4

Sama seperti di atas tetapi menyandikan ulang video dan audio ke format yang kompatibel dengan wadah MP4 (video H.264:

ffmpeg -i input.mkv -map 0 -c:v libx264 -c:a aac -c:s mov_text -metadata:s:s:0 language=eng -metadata:s:s:1 language=ipk output.mp4

Sama seperti di atas tetapi gunakan -mapopsi untuk memilih streaming video pertama, streaming audio kedua, dan streaming subtitle ketiga:

ffmpeg -i input.mkv -map 0:v:0 -map 0:a:1 -map 0:s:2 -c:v libx264 -c:a aac -c:s mov_text -metadata:s:s:0 language=eng output.mp4

Hardsubs

Input format subtitle berbasis teks

Gunakan filter subtitle untuk "membakar" format subtitle berbasis teks (SRT, ASS, VTT, dll). Perhatikan bahwa ini membutuhkan pengodean ulang, sehingga akan jauh lebih lambat daripada menggunakan softsub.

Contoh dasar menggunakan perilaku pemilihan streaming default saat streaming menyalin audio:

ffmpeg -i input.mkv -filter_complex "subtitles=input.mkv" -c:a copy output.mp4

Contoh untuk menggunakan streaming video ketiga, streaming subtitle kelima, dan streaming audio pertama:

ffmpeg -i input.mkv -filter_complex "[0:v:2]subtitles=input.mkv:si=4[v]" -map "[v]" -map 0:a:0 -c:a copy output.mp4

Contoh untuk file input subtitle yang terpisah ( your-subtitles-file.srt):

ffmpeg -i input.mp4 -filter_complex "subtitles=your-subtitles-file.srt" -c:a copy output.mp4

Input format subtitle berbasis gambar

Gunakan filter hamparan . Contoh ini akan menampilkan streaming subtitle keempat di atas streaming video kedua, dan streaming menyalin streaming audio yang ketujuh:

ffmpeg -i input.mkv -filter_complex "[0:v:2][0:s:3]overlay[v]" -map "[v]" -map 0:a:6 -c:a copy output.mp4

Lihat juga

llogan
sumber
Ini membuat saya sedikit bingung. Bisakah Anda memberikan perintah lengkap? Ya, saya menargetkan ukuran file keluaran tertentu.
JoeSteiger
@ JoSteiger Anda harus memperbarui pertanyaan Anda dengan memberikan output konsol ffmpeg -i input.mkvterlebih dahulu.
Logan
Apakah di atas yang Anda maksudkan?
JoeSteiger
@ JoSteiger Ya, itu sangat membantu.
Logan
K, beri tahu saya apa yang harus saya lakukan selanjutnya.
JoeSteiger
13

Anda dapat menggunakan -map 0 untuk memastikan bahwa semua stream disalin. Jika tidak memungkinkan dengan format, maka ffmpeg kemudian harus keluar.

-map 0 memberitahu ffmpeg / libav untuk memasukkan semua stream, bukan hanya stream yang Anda tetapkan aturan konvecsion.

Biasanya -map digunakan untuk mendefinisikan pemetaan aliran - yaitu aliran 1 di input harus menjadi aliran 0 di output. Dengan hanya -map 0 Anda memberi tahu ffmpeg / libav untuk mengambil semua stream tanpa pengocokan.

Arne Babenhauserheide
sumber
Bisakah Anda jelaskan lebih banyak?
Kaz Wolfe
Saya mengedit jawaban saya
Arne Babenhauserheide
1

Jika Anda hanya ingin melakukan konversi sederhana ke mp4 Anda dapat menggunakan VLC. VLC akan menerima file subtitle dan merendernya ke output.

Untuk konversi yang lebih rumit, termasuk menata subtitle, Anda dapat menggunakan OpenShot.

pengguna191688
sumber
-1

Yah saya menemukan cara untuk membuatnya bekerja, tidak ideal, tetapi berhasil. Saya dapat menambahkan srt ke video dengan mkvmerge. Hanya kejatuhannya yang membuat video mkv, bukan mp4.

JoeSteiger
sumber