
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