Come faccio ad aggiungere e / o mantenere i sottotitoli durante la conversione di video?


16

Ho un video mkv che voglio convertire in mp4, ma in ogni modo cerco di convertirlo (freno a mano, WinFF, ffmpeg, mencoder, ... Perdo i sottotitoli del video. Come posso convertire il video, mantenendo i sottotitoli, o aggiungi un sottotitoli.srt?

Vorrei anche la codifica a 2 passaggi con un bitrate video di 4054 e un bitrate audio di 160.

Grazie.

Mi è stato chiesto il 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

Risposte:


19

softsub

MP4 supporta lo streaming di sottotitoli in formato testo, ma il supporto di riproduzione per questo tra lettori e dispositivi non è universale.

Esempio di base che utilizza il comportamento di selezione del flusso predefinito durante la copia del flusso dell'audio:

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

Esempio di streaming per copiare tutti i flussi video e audio, convertire tutti i flussi di input di sottotitoli basati su testo (SRT, ASS, VTT, ecc.) Nel formato di testo in streaming e impostare la lingua per i primi due flussi di sottotitoli.

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

Come sopra ma ricodifica il video e l'audio in formati compatibili con il contenitore 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

Come sopra ma usa l' -mapopzione per scegliere il primo flusso video, il secondo flusso audio e il terzo flusso sottotitoli:

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 in formato sottotitoli basati su testo

Utilizzare il filtro dei sottotitoli per "masterizzare" formati di sottotitoli basati su testo (SRT, ASS, VTT, ecc.). Si noti che ciò richiede una ricodifica, quindi sarà molto più lento rispetto all'utilizzo di softsub.

Esempio di base che utilizza il comportamento di selezione del flusso predefinito durante la copia del flusso dell'audio:

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

Esempio per utilizzare il terzo flusso video, il quinto flusso di sottotitoli e il primo flusso audio:

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

Esempio per un file di input di sottotitoli separato ( your-subtitles-file.srt):

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

Ingressi formato sottotitoli basati su immagini

Usa il filtro overlay . Questo esempio si sovrapporrà al quarto flusso di sottotitoli sul secondo flusso video e lo streaming copierà il settimo flusso audio:

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

Vedi anche


Questo mi ha confuso un po '. Potete fornire il comando completo? Sì, sto prendendo di mira una specifica dimensione del file di output.
JoeSteiger

@JoeSteiger Dovresti aggiornare la tua domanda fornendo prima l'output della console ffmpeg -i input.mkv.
Llogan,

Quanto sopra è quello che volevi dire?
JoeSteiger,

@JoeSteiger Sì, è utile.
Llogan,

K, fammi sapere cosa fare dopo.
JoeSteiger,

13

puoi usare -map 0 per assicurarti che tutti gli stream vengano copiati. Se non è possibile con il formato, allora ffmpeg dovrebbe fuoriuscire.

-map 0 dice a ffmpeg / libav di includere tutti i flussi, non solo quelli per i quali sono state definite le regole di convezione.

Normalmente -map è usato per definire la mappatura dello stream - cioè lo stream 1 nell'input dovrebbe diventare lo stream 0 nell'output. Con solo -map 0 dici a ffmpeg / libav di prendere tutti i flussi senza mescolare.


Puoi spiegarci un po 'di più?
Kaz Wolfe,

Ho modificato la mia risposta
Arne Babenhauserheide,

1

Se vuoi semplicemente fare una semplice conversione in mp4 puoi usare VLC. VLC accetterà un file di sottotitoli e lo renderà nell'output.

Per conversioni più complicate, incluso lo stile dei sottotitoli, puoi usare OpenShot.


-1

Beh, ho trovato un modo per farlo funzionare, non l'ideale, ma funziona. Posso aggiungere uno srt a un video con mkvmerge. L'unico inconveniente è che rende il video mkv, non mp4.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.