substituir lote da trilha de vídeo com x264 (ou ffmpeg ou avconv)

0

Eu tenho um monte de arquivos .mkv com conteúdo diversificado, então eu não sei sobre seus conteúdos de áudio, legendas, capítulos e anexos. Denominador comum: todos eles têm uma trilha de vídeo.

Eu quero substituir a trilha de vídeo somente por uma versão reencodificada, mantendo o resto do arquivo com áudio, subs, capítulos e anexos intactos. Qual é a maneira mais fácil de fazer isso? Questões anteriores sempre faziam suposições sobre o outro conteúdo do arquivo, então não é realmente aplicável - também, o modo de lote desejado.

x264, ffmpeg ou avconv podem ser usados se um deles for melhor para o trabalho do que o outro.

    
por emk2203 11.11.2014 / 21:13

1 resposta

1

Exemplo único

Usando ffmpeg para recodificar o (s) fluxo (s) de vídeo e copiar o fluxo todo o resto:

ffmpeg -i original.mkv -map 0 -c copy -c:v libx264 output.mkv
  • Veja um dos vários guias de codificação para informações sobre qualquer formato que você queira.

  • Todos os fluxos da primeira entrada, rotulados 0 e a única entrada nesse caso, são mapeados com -map 0 . Caso contrário, a seleção de fluxo padrão só mapeará um fluxo por tipo. Por exemplo, se sua entrada tiver vários fluxos de áudio, usar -map 0 mapeará todos eles em vez de apenas um.

BASH " loop "

Para fazer o mesmo acima para todos os arquivos MKV no diretório atual e enviá-los para um diretório chamado outputdir :

mkdir outputdir
for i in *.mkv; do ffmpeg -i "$i" -map 0 -c copy -c:v libx264 outputdir/"${i%.mkv}.mkv"; done
  • O estranho "${i%.mkv}.mkv" está usando expansão de parâmetro . No seu caso, você poderia simplesmente usar "$i" , mas é útil se os formatos do contêiner de entrada forem diferentes dos formatos do contêiner de saída. Por exemplo, sem a expansão de parâmetro, e se suas entradas são MKV e as saídas são MP4, a saída acabaria sendo nomeada algo como output.mkv.mp4 .
por 12.11.2014 / 20:41