Jak dodać i / lub zachować napisy podczas konwersji wideo?

16

Mam wideo mkv, które chcę przekonwertować na mp4, ale za każdym razem próbuję je przekonwertować (Handbrake, WinFF, ffmpeg, mencoder, ... Tracę napisy. Jak mogę przekonwertować wideo, zachowując napisy, lub dodać napisy.srt?

Chciałbym również kodować dwuprzebiegowo z bitrate wideo 4054 i bitrate audio 160.

Dzięki.

Poproszono mnie o 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
źródło

Odpowiedzi:

19

Softsubs

MP4 obsługuje napisy w formacie strumieniowym, ale obsługa odtwarzania w odtwarzaczach i urządzeniach nie jest uniwersalna.

Podstawowy przykład z wykorzystaniem domyślnego zachowania wyboru strumienia podczas kopiowania strumienia audio:

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

Przykład kopiowania strumieniowego wszystkich strumieni wideo i audio, konwertowania wszystkich wejściowych strumieni tekstowych napisów (SRT, ASS, VTT itp.) Na format tekstu strumieniowego i ustawienia języka dla dwóch pierwszych strumieni napisów.

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

To samo co powyżej, ale ponownie koduj wideo i audio do formatów zgodnych z kontenerem MP4 (wideo 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

Tak jak powyżej, ale użyj -mapopcji, aby wybrać pierwszy strumień wideo, drugi strumień audio i trzeci strumień napisów:

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

Tekstowe formaty napisów

Użyj filtra napisów, aby „wypalić” tekstowe formaty napisów (SRT, ASS, VTT itp.). Zauważ, że wymaga to ponownego kodowania, więc będzie znacznie wolniejsze niż przy użyciu Softsub.

Podstawowy przykład z wykorzystaniem domyślnego zachowania wyboru strumienia podczas kopiowania strumienia audio:

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

Przykład użycia trzeciego strumienia wideo, piątego strumienia napisów i pierwszego strumienia 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

Przykład osobnego pliku wejściowego z napisami ( your-subtitles-file.srt):

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

Wejścia w formacie napisów opartych na obrazie

Użyj filtra nakładki . Ten przykład nakłada czwarty strumień napisów na drugi strumień wideo i kopiuje siódmy strumień 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

Zobacz także

Llogan
źródło
To mnie trochę zdezorientowało. Czy możesz podać pełne polecenie? Tak, celuję w określony rozmiar pliku wyjściowego.
JoeSteiger,
@JoeSteiger Powinieneś zaktualizować swoje pytanie, podając jako ffmpeg -i input.mkvpierwsze dane wyjściowe konsoli .
llogan
Czy powyższe miałeś na myśli?
JoeSteiger,
@JoeSteiger Tak, to jest pomocne.
llogan
K, daj mi znać, co dalej.
JoeSteiger,
13

możesz użyć -map 0, aby upewnić się, że wszystkie strumienie zostaną skopiowane. Jeśli nie jest to możliwe z tym formatem, ffmpeg powinien wtedy wystąpić błąd.

-map 0 mówi ffmpeg / libav, aby uwzględnił wszystkie strumienie, nie tylko te, dla których zdefiniowałeś reguły konwekcji.

Zwykle -mapa jest używana do zdefiniowania odwzorowania strumienia - tzn. Strumień 1 na wejściu powinien stać się strumieniem 0 na wyjściu. Wystarczy -map 0, aby powiedzieć ffmpeg / libav, aby pobierał wszystkie strumienie bez przetasowania.

Arne Babenhauserheide
źródło
Czy możesz wyjaśnić coś więcej?
Kaz Wolfe
Zredagowałem swoją odpowiedź
Arne Babenhauserheide,
1

Jeśli chcesz po prostu wykonać prostą konwersję do MP4, możesz użyć VLC. VLC zaakceptuje plik z napisami i wyrenderuje go na wyjściu.

Do bardziej skomplikowanych konwersji, w tym do stylizacji napisów, możesz użyć OpenShot.

użytkownik191688
źródło
-1

Cóż, znalazłem sposób, aby działał, a nie idealny, ale działa. Mogę dodać srt do wideo za pomocą mkvmerge. Jedynym minusem jest to, że sprawia, że ​​wideo mkv, a nie mp4.

JoeSteiger
źródło