FFmpeg не может преобразовать файлы webm при принудительном использовании h264_nvenc

FFmpeg не может преобразовать файлы webm при принудительном использовании h264_nvenc

Я работал с нижеперечисленной средой.

==>Убунту 16.04.3

==>FFmpeg :3.4.2

-- конфигурация: --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

==> Видеокарта: GeForce GTX 1080ti

Моя цель — ускорить модификацию видео с помощью источника GPU, поскольку на моем медиасервере большой трафик.

Вот основные этапы моего процесса:

1. Разделение видео и звука звонящего.

время ffmpeg -y -i 230087_caller.webm -vn -ab 256 230087_caller.wav

2. Разделение видео и звука вызываемого абонента

время ffmpeg -y -i 230087_callee.webm -vn -ab 256 230087_callee.wav

3.Мультиплексирование исходного видео звонящего с аудиозаписью вызываемого абонента для сохранения разговора.

время ffmpeg -y -i 230087_caller.webm -i 230087_callee.wav -filter_complex '[0:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=стерео,громкость=0.5[a1]; [1:a]aformat=sample_fmts=fltp:sample_rates=44100:channel_layouts=стерео,громкость=0.5[a2]; [a1][a2]amerge,pan=стерео|c0

4.Добавление файла шрифта времени в файл caller_temp приводит к ошибке, указанной ниже.

время 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: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] Для WebM поддерживаются только видео VP8 или VP9, ​​аудио Vorbis или Opus и субтитры WebVTT. av_interleaved_write_frame(): недопустимый аргумент Ошибка записи трейлера output_temwp.webm: недопустимый аргумент

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

Вот подробности моего webm-файла:

Поток № 0:0 (eng): Видео: vp8, yuv420p, 640x480, SAR 1:1 DAR 4:3, 27,58 tbr, 1k tbn, 1k tbc (по умолчанию) Метаданные: название: Видеопоток № 0:1 (eng): Аудио: opus, 48000 Гц, стерео, fltp (по умолчанию)

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

Я взглянул на матрицу поддержки кодирования/декодирования видео NVIDIA, похоже, мой графический процессор должен поддерживать это преобразование.

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

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

Однако, когда я изменил формат выходного файла на mp4/avi/mpeg, GPU можно было использовать без каких-либо проблем. Тем не менее, webm важен для нас, поскольку другой размер файла-контейнера становится рискованным с точки зрения хранения.

Я буду признателен, если вы поделитесь своими комментариями и отзывами для продолжения работы над этим вопросом.

Спасибо заранее. С уважением

решение1

СогласноМатрица поддержкиNVENC поддерживает только AVCHD (H.264) и HEVC (H.265).

Для декодирования VP8/9 можно использовать NVDEC при наличии совместимого графического процессора.

Для аппаратной поддержки кодирования VP8/VP9, пожалуйста, проверьтеПоддержка кодировщика VAAPI в FFMPEG.

Чтобы использовать декодер по умолчанию для некоторых входных данных, загрузите кадры в VAAPI и закодируйте с помощью VP9 и настроек по умолчанию:

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

Связанный контент