FFmpeg falha ao converter arquivos webm quando h264_nvenc forçado

FFmpeg falha ao converter arquivos webm quando h264_nvenc forçado

Tenho trabalhado com o ambiente abaixo.

==> Ubuntu 16.04.3

==>FFmpeg:3.4.2

-- configuração: --prefix=/usr/local/ffmpeg_new/ --enable-cuda --enable-cuvid --enable-nvenc --enable-nonfree --enable-libnpp --extra-cflags=-I/usr /local/cuda/include --extra-ldflags=-L/usr/local/cuda/lib64 --enable-libvpx --enable-libvorbis --enable-libfreetype

==>Cuda 9.1.85

==> GPU: GeForce GTX 1080ti

Meu objetivo é acelerar as modificações de vídeo via fonte GPU, uma vez que há tráfego de alta taxa em meu servidor de mídia.

Aqui estão as principais etapas do meu processo:

1.Divida o vídeo e o áudio do chamador.

tempo ffmpeg -y -i 230087_caller.webm -vn -ab 256 230087_caller.wav

2. Divida o vídeo e o áudio do receptor

tempo ffmpeg -y -i 230087_callee.webm -vn -ab 256 230087_callee.wav

3.Mux vídeo original do chamador com áudio do receptor para armazenar a conversa.

tempo ffmpeg -y -i 230087_caller.webm -i 230087_callee.wav -filter_complex '[0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0.5[a1]; [1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=stereo,volume=0,5[a2]; [a1][a2]amerge,pan=estéreo|c0

4.Adicione o arquivo de fonte de tempo ao arquivo caller_temp que falha com o erro abaixo.

tempo ffmpeg -y -i caller_temp.webm -vf drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:x=8:y=8:fontsize=16:fontcolor=yellow@1: expansão=strftime:basetime=1518172680000000:text='%Y-%m-%d %H-%M-%S' -strict -2 -shortest -c:a libvorbis -c:v h264_nvenc final_font_test.webm

[webm @ 0x29e8540] Apenas vídeo VP8 ou VP9 e áudio Vorbis ou Opus e legendas WebVTT são suportados para WebM. av_interleaved_write_frame(): argumento inválido Erro ao gravar o trailer de output_temwp.webm: argumento inválido

=================================

Aqui estão os detalhes do meu arquivo webm:

Stream #0:0(eng): Vídeo: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 27,58 tbr, 1k tbn, 1k tbc (padrão) Metadados: título: Video Stream #0:1(eng) : Áudio: opus, 48000 Hz, estéreo, fltp (padrão)

=================================

Dei uma olhada na matriz de suporte de codificação/decodificação de vídeo da nvidia, parece que meu gpu deveria suportar essa conversão.

https://developer.nvidia.com/video-encode-decode-gpu-support-matrix

================================

No entanto, quando altero o formato do arquivo de saída para mp4/avi/mpeg, a GPU pode ser usada sem qualquer problema. No entanto, o webm é importante para nós, pois o outro tamanho do arquivo contêiner se torna arriscado com a perspectiva de armazenamento.

Ficarei grato se você compartilhar seus comentários e feedbacks para prosseguir com este problema.

Desde já, obrigado. Cumprimentos

Responder1

De acordo comMatriz de ApoioNVENC suporta apenas AVCHD (H.264) e HEVC (H.265).

Você pode usar NVDEC para decodificar VP8/9 com uma GPU compatível.

Para codificação suportada por hardware de VP8/VP9, verifiqueSuporte ao codificador VAAPI em FFMPEG.

Para usar o decodificador padrão para alguma entrada, carregue os quadros para VAAPI e codifique com VP9 e configurações padrão:

ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf 'format=nv12,hwupload' -c:v vp9_vaapi output.webm

informação relacionada