FFmpeg no puede convertir archivos webm cuando se fuerza h264_nvenc

FFmpeg no puede convertir archivos webm cuando se fuerza h264_nvenc

He estado trabajando con el siguiente entorno.

==>Ubuntu 16.04.3

==>FFmpeg:3.4.2

-- configuración: --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

Mi propósito es acelerar las modificaciones de video a través de la fuente GPU, ya que hay un tráfico alto en mi servidor de medios.

Aquí están los pasos principales de mi proceso:

1.Dividir vídeo y audio de la persona que llama.

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

2.Dividir vídeo y audio de la persona que llama.

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

3.Mux video original de la persona que llama con audio de la persona que llama para almacenar la conversación.

tiempo 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.Agregue el archivo de fuente de tiempo al archivo caller_temp que falla con el siguiente error.

tiempo ffmpeg -y -i caller_temp.webm -vf drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf:x=8:y=8:fontsize=16:fontcolor=amarillo@1: expansion=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] Sólo el vídeo VP8 o VP9 y el audio Vorbis u Opus y los subtítulos WebVTT son compatibles con WebM. av_interleaved_write_frame(): Argumento no válido Error al escribir el avance de output_temwp.webm: Argumento no válido

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

Aquí están los detalles de mi archivo webm:

Transmisión #0:0(eng): Video: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 27.58 tbr, 1k tbn, 1k tbc (predeterminado) Metadatos: título: Video Stream #0:1(eng) : Audio: opus, 48000 Hz, estéreo, fltp (predeterminado)

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

He echado un vistazo a la matriz de soporte de codificación/decodificación de video de nvidia, parece que mi gpu debería admitir esta conversión.

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

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

Sin embargo, cuando cambié el formato del archivo de salida a mp4/avi/mpeg, la GPU se puede usar sin ningún problema. Sin embargo, webm es importante para nosotros ya que el otro tamaño del archivo contenedor se vuelve riesgoso desde la perspectiva del almacenamiento.

Le agradeceré que comparta sus comentarios y opiniones para continuar con este problema.

Gracias de antemano. Saludos

Respuesta1

De acuerdo con laMatriz de soporteNVENC solo admite AVCHD (H.264) y HEVC (H.265).

Puede utilizar NVDEC para decodificar VP8/9 si tiene una GPU compatible.

Para la codificación compatible con hardware de VP8/VP9, consulteSoporte del codificador VAAPI en FFMPEG.

Para usar el decodificador predeterminado para alguna entrada, cargue fotogramas en VAAPI y codifique con VP9 y la configuración predeterminada:

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

información relacionada