Як додати та / або зберегти субтитри під час перетворення відео?


16

У мене є mkv відео, яке я хочу перетворити на mp4, але будь-яким способом намагаюся перетворити його (Handbrake, WinFF, ffmpeg, mencoder, ... Я втрачаю субтитри відео. Як конвертувати відео, зберігаючи субтитри, або додати субтитри.srt?

Я також хотів би кодувати 2 проходження з бітрейтом відео 4054 та бітрейтом аудіо 160.

Спасибі.

Мене попросили про 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

Відповіді:


19

Softsubs

MP4 підтримує трансляцію субтитрів у текстовому форматі, але підтримка відтворення для цього у програвачі та пристрої не є універсальною.

Основний приклад використання поведінки вибору потоку за замовчуванням під час потокового копіювання звуку:

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

Приклад для потокового копіювання всіх потоків відео та аудіо, перетворення всіх текстових потоків введення субтитрів (SRT, ASS, VTT тощо) у формат потокового тексту та встановлення мови для перших двох потоків субтитрів.

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

Те саме, що вище, але перекодуйте відео та аудіо у формати, сумісні з контейнером MP4 (відео 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

Те саме, що вище, але скористайтеся -mapопцією, щоб вибрати перший відеопотік, другий аудіопотік і третій потік субтитрів:

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

Текстові вводи формату підзаголовків

Використовуйте фільтр субтитрів, щоб "записати" текстові формати субтитрів (SRT, ASS, VTT тощо). Зауважте, що для цього потрібне повторне кодування, тому це буде набагато повільніше, ніж використання softsubs.

Основний приклад використання поведінки вибору потоку за замовчуванням під час потокового копіювання звуку:

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

Приклад використання третього відеопотоку, п'ятого потоку субтитрів та першого аудіопотоку:

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

Приклад окремого вхідного файлу субтитрів ( your-subtitles-file.srt):

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

Входи формату субтитрів на основі зображень

Використовуйте накладений фільтр . Цей приклад буде накладати четвертий потік субтитрів над другим відеопотоком, а потік копіювати сьомий аудіопотік:

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

Також див


Це мене трохи заплутало. Чи можете ви надати повну команду? Так, я націлений на певний розмір вихідного файлу.
JoeSteiger

@JoeSteiger Ви повинні оновити своє запитання, надавши консольний вихід ffmpeg -i input.mkvпершого.
логіан

Це вище, що ви мали на увазі?
JoeSteiger

@JoeSteiger Так, це корисно.
llogan

К, дайте мені знати, що робити далі.
JoeSteiger

13

ви можете використовувати -map 0 для забезпечення копіювання всіх потоків. Якщо неможливо з форматом, ffmpeg повинен помилитися.

-map 0 вказує ffmpeg / libav включати всі потоки, а не лише ті, для яких ви визначили правила convecsion.

Зазвичай -map використовується для визначення відображення потоку - тобто потік 1 на вході повинен стати потоком 0 у виході. За допомогою -map 0 ви скажете ffmpeg / libav взяти всі потоки, не перетасовуючи.


Чи можете ви пояснити трохи більше?
Каз Вулф

Я відредагував свою відповідь
Arne Babenhauserheide

1

Якщо ви просто хочете просту конверсію в mp4, ви можете використовувати VLC. VLC прийме файл субтитрів і виведе його на вихід.

Для більш складних перетворень, включаючи стилювання субтитрів, ви можете використовувати OpenShot.


-1

Ну, я знайшов спосіб змусити його працювати, не ідеально, але він працює. Я можу додати srt до відео з mkvmerge. Тільки падіння це робить відео mkv, а не mp4.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.