Planung LPD-BS und Video-Tools zur Vortragserstellung

entry>LPD-BS;-

Video encodieren (kleinrechnen)

entry>Video/ffmpeg;-

Für ffmpeg muss die GPU richtig gesetzt werden. Im Script ggf. ändern wenn keine Nvidia-Grafikkarte vorhanden.

Es verschiedene Ansätze für Hardwarebeschleunigung je nach Hersteller der Grafikkarte.

„NVENC“ steht immer für Nvidia Grafikkarten. Wenn man keine hat, kann man den Treiber nicht benutzen.

„CUDA“ oder „CUVID“ sind auch Hinweise auf Nvidia.

(Script unten)

WICHTIG:

ffmpeg -hwaccels

Damit bekommt man raus, welche Optionen für Eurer FFMPEG bei der HWUnterstützung verfügbar sind

ffmpeg -decoders

Hier welche Dekodierhilfen vorhanden sind, dazu der Tip: „ffmpeg -decoders | grep 264“ schränkt das Ergebnis aus das gesuchte ein. Welche davon für Euch die beste ist, hängt von der Grafikkarte ab. Unten gibts Beispiele.

ffmpeg -encoders

Das gleiche Spiel für Codierer.

Die allgemeine Syntax:

ffmpeg { HWDECODING } { EINGABE } { Streammapping } { ENCODEOPTIONS } { AUSGABE }

HWDECODING

hwaccel cuvid -threads 8 -c:v h264_cuvid

Der Block macht gleich zwei Sachen :

Er legt fest, daß wenn die CPU genutzt werden soll, alle 8 Kerne der CPU benutzt werden sollen ( setzt voraus, daß man 8 hat, ist also an Eure CPU anzupassen ) . Das ist sinnvoll, wenn man neben dem Codieren noch was machen will und z.b. nur 50% der Kerne benutzen möchte, weil man Rechenleistung für die anderen Sachen übrig haben will, da wäre dann bei 8 Kernen die Zahl 4 anzugeben.

Die Hardware Decodierung aktivieren:

Nvidia: -hwaccel cuvid -c:v h264_cuvid

Intel: -hwaccel qsv -c:v h264_qsv

Andere: -hwaccel vaapi -c:v h264_vaapi

Andere: -hwaccel vdpau -c:v h264_vdpau

Oder: -hwaccel auto

Wenn man keine HWDekodierung hat, dann braucht man die Optionen natürlich nicht angeben.

ACHTUNG: Die Codecs heißen unterschiedlich beim Decodieren und Encodieren, auch wenn es die gleiche Grafikkarte ist. Im Zweifel einfach alle ausprobieren, bis einer paßt oder $suchmaschine fragen.

EINGABE:

i Filmfile-REIN.mp4

Streammapping:

map 0:1 -map 0:0

Geht davon aus, daß es einen Videostream und einen Audiostream gibt. Die Zahlen sind gleich wichtig, wenn wir angeben, wie was kodiert werden soll, also genau hinschauen!

ENCODEOPTIONS:

c:v:0 h264_nvenc -b:v:0 2000k -c:a:0 copy

-Codec:Video:STREAMNUMMER CODEC also hier Videostream 0 soll als Encoder den Nvidia h264_nvenc mit HW unterstützung benutzen

-Bitrate:Video:0 hier also Videostream 0 soll 2000k = 2 Mb/s haben.

-Codec:Audio:STREAMNUMMER CODEC hier Audiostream 0 soll „copy“ ⇒ Nichts verändern. D.b. er nimmt das was im Eingabefile ist und benutzt es unverändert in der Zieldatei. Spart Zeit und Ziel des Scripts ist es nur die Videorate runter zu bekommen.

Wenn man jetzt kein Nvidia haben will, dann sucht mach sich seinen HWCodec aus der Liste raus:

CPU:

V..... libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
V..... libx264rgb libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 RGB (codec h264)
V..... h264_v4l2m2m V4L2 mem2mem H.264 encoder wrapper (codec h264)

Intel:

V..... h264_qsv H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (Intel Quick Sync Video acceleration) (codec h264)

Rest:

V..... h264_vaapi H.264/AVC (VAAPI) (codec h264)

Nvidia:

V..... nvenc NVIDIA NVENC H.264 encoder (codec h264)
V..... nvenc_h264 NVIDIA NVENC H.264 encoder (codec h264)
V..... h264_nvenc NVIDIA NVENC H.264 encoder (codec h264)

AUSGABE:

f mp4 „$NAME-neu.mp4“

-f FORMAT hier also MP4 und dann schon der neue Dateiname.

Tools:

#!/bin/bash NAME=$(basename "$1" .mp4) if [ -z ${NAME} ] ; then echo -e "\nusage:" echo -e "\tDateinamen.MP4 des kleinzurechneden Videos angeben." exit fi ffmpeg -hwaccel cuvid -threads 8 -c:v h264_cuvid -i "$1" -map 0:1 -map 0:0 -c:v:0 h264_nvenc -b:v:0 2000k -c:a:0 copy $2 -f mp4 "$NAME-klein.mp4"