Usando o filtro FFmpeg sem conversão de vídeo

7

Alguém tem uma ideia de como posso colocar uma máscara de imagem sobre o vídeo sem alterar o áudio & codec de vídeo?

Estou criando arquivos de mídia diferentes para fins de teste e quero controlar meus codecs de áudio e vídeo usados em um contêiner de A / V; agora, preciso colocar uma máscara de imagem em um arquivo de áudio / vídeo, sem alterar o áudio e codec de vídeo.

Ao usar ffmpeg -i video.avi -i image.png -filter_complex 'overlay' avi.mkv , posso adicionar -acodec copy , mas não -vcodec copy . Isso gera o erro:

Streamcopy requested for output streaam 0:0, which is fed from a complex filtergraph. Filtering and streamcopy cannot be used together.

E quando apenas usando o comando acima, o FFmpeg codifica meus streams para outro formato (MPEG-4 e MP3)

    
por Jan Claes 13.03.2013 / 12:32

2 respostas

7

Você respondeu sua própria pergunta: os filtros são incompatíveis com copy . Você está usando um filtro de vídeo, por isso não pode usar -vcodec copy ou -c:v copy ; Se você estivesse usando um filtro de áudio, não seria possível usar -acodec copy ou -c:a copy .

copy , como o próprio nome sugere, copia o fluxo especificado exatamente, sem alterações. Os filtros alteram o (s) fluxo (s) que eles segmentam. Por definição, copy e filtros são incompatíveis.

Se você simplesmente quiser escolher um codec de vídeo específico, isso é bastante simples: use -c:v [codecname] ; você pode ver uma lista de todos os codecs que o seu ffmpeg suporta com

ffmpeg -codecs
    
por 13.03.2013 / 12:54
0

Caso isso ajude alguém, deve-se notar que provavelmente existe uma maneira um pouco feia de se fazer o que você quer, combinando ffprobe e ffmpeg usando o bash. Se você tem ffmpeg instalado, provavelmente você tem ffprobe também. Como um exemplo simples somente de áudio, o seguinte funcionou para mim, embora, em princípio, algo semelhante deva ser alcançado com múltiplos fluxos de diferentes tipos.

ffmpeg -i neil_young_tell_me_why.wav -af aresample=resampler=soxr:precision=33:cheby=true -ar 96000 -acodec 'ffprobe -v error -show_entries:a:0 stream=codec_name -of default=noprint_wrappers=1:nokey=1 neil_young_tell_me_why.wav | xargs echo -n' neil_young_tell_me_why_96Kup.wav

Explicação: A saída do comando ffprobe nos backticks é expandida in-loco para o fluxo 0 do codec de áudio do arquivo de entrada, com a nova linha removida por xargs . ffprobe foi definido para produzir uma quantidade mínima de texto, e a saída do "gravador" padrão de ffprobe foi configurada para remover todos os outros textos estranhos, como rótulos, etc., ao gravar na tela.

Eu queria testar reamostragem de maior qualidade com o SoX resampler, então alterei o tamanho do arquivo wav de 44.1KHz para 96KHz, mantendo o mesmo codec. Sem fazê-lo dessa maneira, o codec escolhido automaticamente por ffmpeg tinha uma profundidade de bits menor, fazendo com que a resolução diminuísse de 24 para 16 bits. Desta forma não houve perda de precisão.

    
por 22.03.2018 / 23:18