
Я работал с нижеперечисленной средой.
==>Убунту 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