Como eu simplesmente edito as legendas de um arquivo MKV enquanto preservo os streams de vídeo, áudio e anexo?

0

Então, quando eu olho para o vídeo original:

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

Eu vejo algo assim:

[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]

Meu processo envolve a extração do arquivo ass por:

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

Eu edito o arquivo de legenda em vim . Então eu tento adicionar o arquivo de legenda de volta ao arquivo mkv com algo como:

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

Mas quando eu sondar o output.mkv, vejo apenas

[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]

Como você pode ver, perco o fluxo de anexos e as legendas não são mais reproduzidas por padrão. Então me deparei com outros comandos:

Tornar o padrão das legendas:

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

Dump Font do original:

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

Anexar a fonte ao vídeo editado:

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

Mas, de alguma forma, ao longo desses processos, o áudio muda de aac para vorbis e o vídeo muda de h264 (native) para h264 (libx264) . Como eu preservo os streams enquanto faço alterações simples de erros nas legendas?

    
por Flair 16.09.2018 / 20:31

1 resposta

0

# 1 Extrair legendas

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

# 2 Mux editou subs

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
    
por 16.09.2018 / 20:40