Wie kann ich beim Konvertieren von Videos Untertitel hinzufügen und / oder beibehalten?

16

Ich habe ein mkv-Video, das ich in mp4 konvertieren möchte, aber auf jede Weise versuche ich es zu konvertieren (Handbremse, WinFF, ffmpeg, Mencoder, ... Ich verliere die Untertitel des Videos. Wie kann ich das Video konvertieren und die Untertitel beibehalten? oder eine subtitles.srt hinzufügen?

Ich möchte auch 2-Pass-Codierung mit einer Video-Bitrate von 4054 und Audio-Bitrate von 160.

Vielen Dank.

Ich wurde nach dem ffmpeg -i gefragt:

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
quelle

Antworten:

19

Softsubs

MP4 unterstützt das Streamen von Untertiteln im Textformat, jedoch ist die Wiedergabeunterstützung für Player und Geräte nicht universell.

Grundlegendes Beispiel für die Verwendung des Standard- Streamauswahlverhaltens beim Stream-Kopieren des Audios:

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

Beispiel zum Kopieren aller Video- und Audiostreams per Streaming, Konvertieren aller textbasierten Untertitel-Eingabestreams (SRT, ASS, VTT usw.) in das Streaming-Textformat und Festlegen der Sprache für die ersten beiden Untertitel-Streams.

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

Wie oben, aber Video und Audio in Formate umcodieren, die mit dem MP4-Container kompatibel sind (H.264-Video:

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

Wie oben, jedoch mit der -mapOption, den ersten Video-Stream, den zweiten Audio-Stream und den dritten Untertitel-Stream auszuwählen:

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

Textbasierte Untertitelformateingaben

Verwenden Sie den Untertitelfilter , um textbasierte Untertitelformate (SRT, ASS, VTT usw.) einzubrennen. Beachten Sie, dass dies eine Neucodierung erfordert und daher viel langsamer ist als die Verwendung von Softsubs.

Grundlegendes Beispiel für die Verwendung des Standard- Streamauswahlverhaltens beim Stream-Kopieren des Audios:

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

Beispiel für die Verwendung des dritten Video-, fünften Untertitel- und ersten Audio-Streams:

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

Beispiel für eine separate Untertitel-Eingabedatei ( your-subtitles-file.srt):

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

Bildbasierte Untertitelformateingaben

Verwenden Sie den Überlagerungsfilter . In diesem Beispiel wird der vierte Untertitel-Stream über den zweiten Video-Stream gelegt und der siebte Audio-Stream kopiert:

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

Siehe auch

Logan
quelle
Das hat mich ein bisschen verwirrt. Können Sie den vollständigen Befehl bereitstellen? Ja, ich beziehe mich auf eine bestimmte Ausgabedateigröße.
JoeSteiger
@JoeSteiger Sie sollten Ihre Frage aktualisieren, indem Sie zuerst die Konsolenausgabe von bereitstellen ffmpeg -i input.mkv.
Logan
Ist das Obige das, was du meintest?
JoeSteiger
@JoeSteiger Ja, das ist hilfreich.
Logan
K, lass mich wissen, was als nächstes zu tun ist.
JoeSteiger
13

Sie können -map 0 verwenden, um sicherzustellen, dass alle Streams kopiert werden. Wenn es mit dem Format nicht möglich ist, sollte ffmpeg einen Fehler ausgeben.

-map 0 weist ffmpeg / libav an, alle Streams einzuschließen, nicht nur die, für die Sie Konvektionsregeln definiert haben.

Normalerweise wird -map verwendet, um das Stream-Mapping zu definieren, dh Stream 1 in der Eingabe sollte Stream 0 in der Ausgabe werden. Mit nur -map 0 weisen Sie ffmpeg / libav an, alle Streams zu nehmen, ohne sie zu mischen.

Arne Babenhauserheide
quelle
Kannst du etwas mehr erklären?
Kaz Wolfe
Ich habe meine Antwort geändert
Arne Babenhauserheide
1

Wenn Sie nur eine einfache Konvertierung in mp4 durchführen möchten, können Sie VLC verwenden. VLC akzeptiert eine Untertiteldatei und rendert sie in der Ausgabe.

Für kompliziertere Konvertierungen, einschließlich des Stils der Untertitel, können Sie OpenShot verwenden.

user191688
quelle
-1

Nun, ich habe einen Weg gefunden, es zum Laufen zu bringen, nicht ideal, aber es funktioniert. Ich kann mit mkvmerge eine srt zu einem Video hinzufügen. Einziger Wermutstropfen ist, dass es das Video mkv macht, nicht mp4.

JoeSteiger
quelle