Estou usando o FFmpeg 6.0 no Kubuntu 22.04.
Saída de ffmpeg -hide_banner -buildconf
:
configuration:
--extra-libs=-lpthread
--enable-gpl
--enable-gnutls
--enable-libass
--enable-libfdk-aac
--enable-libfreetype
--enable-libmp3lame
--enable-libopus
--enable-libdav1d
--enable-libvorbis
--enable-libvpx
--enable-libx264
--enable-libx265
--enable-libpulse
--enable-nonfree
Aqui está minha tentativa de usar efetivamente -bsf
no ffplay:
ffmpeg -i input.webm -bsf:v name=param -c copy -f webm - | ffplay -
Mas ao procurar, quebra assim:
[matroska,webm @ 0x7faf20000c80] Unknown element A3 at pos. 0x15009 with length 0x165 considered as invalid data. Last known good position 0x1e5, 20 unknown elements in a row
[matroska,webm @ 0x7faf20000c80] Unknown element 82 at pos. 0x1500c with length 0x4480fcd013b5 considered as invalid data. Last known good position 0x1e5, 1 unknown elements in a row
fd:: error while seeking
[matroska,webm @ 0x7faf20000c80] 0x00 at pos 101285 (0x18ba5) invalid as first byte of an EBML number
[matroska,webm @ 0x7faf20000c80] Unknown element A3 at pos. 0x1daa8 with length 0x134 considered as invalid data. Last known good position 0x1e5, 20 unknown elements in a row
[matroska,webm @ 0x7faf20000c80] Unknown element 82 at pos. 0x1daab with length 0x4480fcd1f714 considered as invalid data. Last known good position 0x1e5, 1 unknown elements in a row
fd:: error while seeking
Como fazer isso de uma forma não quebrada?
Editar a partir dos comentários:
OP afirma: O uso de tubos não é obrigatório, a tubulação é minha tentativa de solução. O que preciso é usar -bsf
as opções do ffmpeg e exibir o resultado no ffplay, podendo buscá-lo.
Como foi mencionado em alguns comentários, como você deseja pesquisar ao usar o ffplay, não pode usar pipes, mas terá que deixar o ffmpeg.exe gravar um arquivo temporário que é então passado para o ffplay.
O script precisa executar as três etapas a seguir:
Você pode usar qualquer tipo de linguagem de script. Você não declarou seu sistema operacional, mas estou no Windows, então o mais fácil é escrever um arquivo em lote, como segue.
crie um arquivo chamado
bsfplay.bat
em seu editor de texto favoritocopie e cole o código a seguir e salve o arquivo
Observe que
%1
,%2
,%3
são variáveis no arquivo em lote que receberão argumentos de linha de comando, e o^
sinal é necessário para escapar do=
.agora, no prompt de comando, você pode fazer algo como
bsfplay remove_extra freq k
chamar o-bsf
filtro-bsf:v remove_extra=freq=k
ou, se o seu vídeo for h.264, você pode fazer
bsfplay h264_metadata crop_left 16
o que chamará o filtro bsf para cortar 16 pixels no lado esquerdo do vídeo e salvá-lo no arquivo temporário. Então o ffplay irá ler esse arquivo. Depois de sair do ffplay, o arquivo temporário será excluído.Este script bash resolve o problema:
Obrigado a @1NN por me empurrar na direção certa.
O erro que você está encontrando parece estar relacionado ao uso da opção -bsf (filtro de fluxo de bits) com ffplay. É possível que a combinação de opções que você está usando esteja causando problemas no arquivo webm de entrada. Para usar efetivamente -bsf com ffplay, você pode tentar o seguinte:
ffmpeg -i input.webm -c:v copiar -bsf:v nome=param -c:a copiar -f webm - | ffplay -