Adicione um fluxo usando o ffmpeg sem criar um novo arquivo

2

Eu tenho alguns vídeos (.mp4) que foram marcados com metadados (descrições, ilustrações, atores, etc.) e agora tenho arquivos de legenda para eles que quero adicionar como um fluxo.

Eu posso usar ffmpeg e definir o vídeo e o arquivo .srt como entradas e obter um novo arquivo de saída, mas a saída sempre parece perder todos os metadados do nível do contêiner e às vezes fica irritante sempre voltar e excluindo os arquivos originais.

Existe uma maneira de adicionar o arquivo de legenda como um novo fluxo ao arquivo de vídeo sem criar um novo arquivo? Apenas modificando o arquivo de vídeo original?

Programas como Subler parecem fazer isso, mas, por interesse, isso pode ser feito a partir da linha de comando?

    
por Sam 30.07.2013 / 14:10

1 resposta

4

Você não pode editar um arquivo no local com ffmpeg - ele sempre precisa criar um novo arquivo de saída. Eu acho que é o padrão para quase todos os programas, e em muitos casos o arquivo de saída precisa ser procurado e editável pelo programa durante a escrita. *

Se a questão real é a perda de metadados, tente:

ffmpeg -i input.mp4 -i subtitles.srt \
-c copy -c:s mov_text \
-map 0 -map 1 -map_metadata 0 output.mp4

Você precisa ter ffmpeg converter SRT (SubRip) para legendas compatíveis com MP4 com -c:s mov_text caso contrário, ffmpeg se recusa a copiar o fluxo. **

A opção -map_metadata deve copiar todos os metadados globais do arquivo MP4 de entrada para a saída, ou seja, qualquer coisa definida no nível do contêiner. Os metadados do nível de fluxo de dados devem ser copiados automaticamente sem mais opções.

* É claro que programas como o sponge do moreutils podem "absorver" a entrada e sobrescrever um arquivo no local, mas isso só funciona com muxers que suportam saída não-pesquisável e, portanto, não com MP4.
** Há problemas com legendas codificadas mov_text eo player do QuickTime, consulte Bilhete FFmpeg # 1845 e também # 2488 .

    
por 30.07.2013 / 14:31