FFMPEG adiciona quadros-chave sem reencodificar

1

Como posso adicionar quadros-chave para arquivos FLV sem reencoding? Eu tento usar este comando, mas não faço nada:

ffmpeg -i file.flv  -vcodec copy -acodec copy -g 0 -y tmp.flv && yamdi -i tmp.flv -o out.flv

O resultado (fonte e este) não é procurado corretamente com o flash player. Eu tenho muito flv para "reparar".

    
por Zoltán 25.04.2013 / 14:27

2 respostas

9

How can I add keyframes for FLV files without reencoding?

Você não pode.

Um quadro-chave, ou quadro I, é um quadro que se sustenta sozinho - não requer nenhum quadro antes ou depois para ser decodificado. Outros quadros são quadros P (que requerem um ou mais quadros anteriores a serem decodificados, e baseiam seu conteúdo em alterações feitas no quadro anterior, em vez de formar uma imagem completa isoladamente) e quadros B (o mesmo que quadros P, mas quadros de referência antes de e após eles).

Para alterar um quadro P ou B para um quadro I, você precisa decodificar e reescrever o fluxo de vídeo. Então você não pode adicionar quadros-chave sem recodificar.

Dê uma olhada no guia de codificação x264 no wiki do ffmpeg para algumas dicas sobre como obter uma codificação de boa aparência.

    
por 25.04.2013 / 14:50
1

Quando você faz -vcodec copy , você está copiando completamente o codec de vídeo. Então nenhum parâmetro pode afetar o vídeo, assim também o tamanho do GOP não é analisado novamente.

Tente usar apenas o gopsize, sem uma cópia de codec de vídeo:

ffmpeg -i file.flv -acodec copy -g 1 -sameq -y tmp.flv

Observe que o parâmetro -sameq significa o mesmo quantizador, que deve ser usado somente quando você estiver decodificando e codificando usando o mesmo codec (como MPEG-2 para MPEG-2), como no seu caso em que você não deseja altere o codec.

    
por 25.04.2013 / 14:42

Tags