Как мне просто отредактировать субтитры из файла MKV, сохранив потоки видео, аудио и вложения?

358
Flair

Итак, когда я смотрю на оригинальное видео:

ffprobe -v error -show_entries stream=index,codec_name,codec_type example.mkv 

Я вижу что-то вроде этого:

[STREAM] index=0 codec_name=h264 codec_type=video [/STREAM] [STREAM] index=1 codec_name=aac codec_type=audio [/STREAM] [STREAM] index=2 codec_name=ass codec_type=subtitle [/STREAM] [STREAM] index=3 codec_name=ttf codec_type=attachment [/STREAM] 

Мой процесс включает в себя извлечение файла задницы через:

ffmpeg -i input.mkv -map 0:s:0 subs.ass 

Я редактирую файл субтитров в vim. Затем я пытаюсь добавить файл субтитров обратно в файл MKV с чем-то вроде:

ffmpeg -i input.mkv -f ass -i subs.ass \ -map 0:0 -map 0:1 -map 1:0 -c:v copy -c:a copy \ -c:s copy output.mkv 

Но когда я проверяю output.mkv, я вижу только

[STREAM] index=0 codec_name=h264 codec_type=video [/STREAM] [STREAM] index=1 codec_name=aac codec_type=audio [/STREAM] [STREAM] index=2 codec_name=ass codec_type=subtitle [/STREAM] 

Как видите, я теряю поток вложений, и субтитры больше не воспроизводятся по умолчанию. Вот я и наткнулся на другие команды:

Сделать субтитры по умолчанию:

ffmpeg -i output.mkv -f ass -i subs.ass -c copy -disposition:s:0 default out.mkv 

Дамп шрифт из оригинала:

ffmpeg -dump_attachment:t "" -i original.mkv 

Прикрепить шрифт к отредактированному видео:

ffmpeg -i out.mkv -attach OpenSans-Semibold.ttf -metadata:s:3 mimetype=application/x-truetype-font final.mkv 

Но затем каким-то образом вдоль этих процессов звук меняется с aacна vorbis, а видео меняется с h264 (native)на h264 (libx264). Как сохранить потоки при внесении простых изменений ошибок в субтитрах?

0

1 ответ на вопрос

0
Gyan

# 1 Извлечение субтитров

ffmpeg -i input.mkv -c copy -map 0:s:0 subs.ass 

# 2 Mux отредактировал сабвуферы

ffmpeg -i input.mkv -i subs.ass \ -map 0:v -map 0:a -map 1 -map 0:t -c copy -disposition:s:0 default output.mkv 
Спасибо! Мой старый процесс занял много времени, но эти две команды просто заканчиваются за секунды. Flair 6 лет назад 0

Похожие вопросы