
Ich habe mit der folgenden Umgebung gearbeitet.
==>Ubuntu 16.04.3
==>FFmpeg: 3.4.2
-- Konfiguration: --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
==> Grafikkarte: GeForce GTX 1080ti
Mein Ziel besteht darin, Videoänderungen über eine GPU-Quelle zu beschleunigen, da auf meinem Medienserver viel Datenverkehr herrscht.
Hier sind die wichtigsten Schritte meines Prozesses:
1.Video und Audio des Anrufers aufteilen.
Zeit ffmpeg -y -i 230087_caller.webm -vn -ab 256 230087_caller.wav
2.Video und Audio des Angerufenen aufteilen
Zeit ffmpeg -y -i 230087_callee.webm -vn -ab 256 230087_callee.wav
3.Multiplizieren Sie das Originalvideo des Anrufers mit dem Audio des Angerufenen, um das Gespräch zu speichern.
Zeit 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=stereo|c0
4.Fügen Sie der Caller_Temp-Datei eine Zeitfontdatei hinzu, was mit dem folgenden Fehler fehlschlägt.
Zeit 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] Für WebM werden nur VP8- oder VP9-Video und Vorbis- oder Opus-Audio sowie WebVTT-Untertitel unterstützt. av_interleaved_write_frame(): Ungültiges Argument. Fehler beim Schreiben des Trailers von output_temwp.webm: Ungültiges Argument.
==================================
Hier sind die Details meiner WebM-Datei:
Stream Nr. 0:0 (eng): Video: vp8, yuv420p, 640 x 480, SAR 1:1 DAR 4:3, 27,58 tbr, 1k tbn, 1k tbc (Standard) Metadaten: Titel: Video Stream Nr. 0:1 (eng): Audio: opus, 48000 Hz, Stereo, fltp (Standard)
==================================
Ich habe mir die Support-Matrix für die Videokodierung/Dekodierung von Nvidia angesehen. Meine GPU sollte diese Konvertierung unterstützen.
https://developer.nvidia.com/video-encode-decode-gpu-support-matrix
=================================
Wenn ich jedoch das Ausgabedateiformat in MP4/AVI/MPEG geändert habe, kann GPU ohne Probleme verwendet werden. Dennoch ist WebM für uns wichtig, da die andere Containerdateigröße aus Speichersicht riskant wird.
Ich würde mich freuen, wenn Sie mir Ihre Kommentare und Rückmeldungen mitteilen, um dieses Problem weiter zu lösen.
Vielen Dank im Voraus. Grüße
Antwort1
Entsprechend derSupport-MatrixNVENC unterstützt nur AVCHD (H.264) und HEVC (H.265).
Sie können NVDEC zum Dekodieren von VP8/9 verwenden, sofern Sie eine kompatible GPU haben.
Für die hardwareunterstützte Kodierung von VP8/VP9 prüfen Sie bitteVAAPI-Encoder-Unterstützung in FFMPEG.
Um den Standarddecoder für einige Eingaben zu verwenden, laden Sie die Frames auf VAAPI hoch und codieren Sie sie mit VP9 und den Standardeinstellungen:
ffmpeg -vaapi_device /dev/dri/renderD128 -i input.mp4 -vf 'format=nv12,hwupload' -c:v vp9_vaapi output.webm