FFMPEG Hardware Transkodierung

Status
Für weitere Antworten geschlossen.

ef0rce

Benutzer
Mitglied seit
16. Feb 2016
Beiträge
1
Punkte für Reaktionen
0
Punkte
0
Hallo liebe Leute,

ich hoffe ihr könnt mir bei meinem Problem helfen. Ich habe aktuell eine DS216+ (DSM 6) und einige Videos im h265 Format, die ich in h264 umwandeln möchte. Die Umwandlung soll mit FFMPEG über meinen NAS laufen. Soweit mir bekannt ist, kann man zum Umwandeln bei einigen NAS Modellen das Hardware Transcoding verwenden.

Ich habe aber keine Ahnung wie ich FFMPEG mitteile, dass das Hardware Transcoding verwendet werden soll. Die Umwandlung läuft jedes Mal über die CPU und das dauert leider viel zu lange (bei 4 FPS)

FFMPEG Befehl:
Rich (BBCode):
 ffmpeg -i video.mkv -c:a copy -c:v libx264 -gp 0 output.mkv


Meine ffmpeg Version:

Rich (BBCode):
ffmpeg version 2.7.1 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.9.3 (crosstool-NG 1.20.0) 20150311 (prerelease)
  configuration: --prefix=/usr/pkg --incdir='${prefix}/include/ffmpeg' --arch=i686 --target-os=linux --cross-prefix=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu- --enable-cross-compile --enable-optimizations --enable-pic --enable-gpl --enable-version3 --enable-nonfree --enable-libfaac --enable-encoders --enable-pthreads --disable-muxer=image2 --disable-muxer=image2pipe --disable-swscale-alpha --disable-ffplay --disable-doc --disable-devices --disable-bzlib --disable-altivec --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libmp3lame --disable-decoder=amrnb --disable-encoder=zmbv --cc=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-ccache-gcc --enable-shared --disable-static --enable-yasm --enable-libx264 --enable-encoder=libx264
  libavutil      54. 27.100 / 54. 27.100
  libavcodec     56. 41.100 / 56. 41.100
  libavformat    56. 36.100 / 56. 36.100
  libavdevice    56.  4.100 / 56.  4.100
  libavfilter     5. 16.101 /  5. 16.101
  libswscale      3.  1.101 /  3.  1.101
  libswresample   1.  2.100 /  1.  2.100
  libpostproc    53.  3.100 / 53.  3.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...


ich hab irgendwo gelesen, dass man als Videocodec "h264_smd" verwenden soll. Das geht mir aber leider nicht, da meine FFMPEG Version nicht mit dem Videocodec konfiguriert ist.

Ich hoffe mir kann einer helfen.
Danke
LG
 

4bob

Benutzer
Mitglied seit
04. Mai 2016
Beiträge
604
Punkte für Reaktionen
2
Punkte
38
Hi,

willkommen im Forum. :)

ffmpeg 2.7.1 ist im DSM integriert, du könntest das Paket aus der Community mal installieren.

Der Aufruf erfolgt dann aus dem Volume deiner Anwendungen, bei mir:
volume3/@appstore/ffmpeg/bin/ffmpeg –version
ffmpeg version 3.1.2 Copyright (c) 2000-2016 the FFmpeg developers

Hast du die Installiert kannst du "h264_smd" so aufrufen:

-c:v h264 -prefer_smd -preset veryfast

Quelle:https://trac.ffmpeg.org/wiki/Encode/H.264

btw. mit ffmpeg -h encoder=h264_nvenc kannst du dir anzeigen lassen ob ein Hardware Transcoding erkannt wurde.


Bob
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.545
Punkte für Reaktionen
1.377
Punkte
234
Funktioniert auf meiner DS716+ nicht …
Rich (BBCode):
/volume1/@appstore/ffmpeg/bin/ffmpeg -h encoder=h264_nvenc
/volume1/@appstore/ffmpeg/bin/ffmpeg: /lib/libstdc++.so.6: no version information available (required by /usr/local/ffmpeg/lib/libx265.so.87)
/volume1/@appstore/ffmpeg/bin/ffmpeg: /lib/libstdc++.so.6: no version information available (required by /usr/local/ffmpeg/lib/libx265.so.87)
ffmpeg version 3.1.2 Copyright (c) 2000-2016 the FFmpeg developers
  built with gcc 4.7.3 (crosstool-NG 1.18.0) 20130102 (prerelease)
  configuration: --target-os=linux --cross-prefix=/home/spksrc/syno/toolchains/syno-x64-5.2/work/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu- --prefix=/usr/local/ffmpeg --extra-cflags=-I/home/spksrc/syno/spk/ffmpeg/work-x64-5.2/install/usr/local/ffmpeg/include --extra-ldflags=-L/home/spksrc/syno/spk/ffmpeg/work-x64-5.2/install/usr/local/ffmpeg/lib --extra-libs='-lxml2 -ldl' --pkg-config=/usr/bin/pkg-config --ranlib=/home/spksrc/syno/toolchains/syno-x64-5.2/work/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-ranlib --enable-cross-compile --enable-rpath --enable-pic --enable-shared --enable-optimizations --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-fontconfig --enable-libass --enable-libbluray --enable-libfdk-aac --enable-libfreetype --enable-libfribidi --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libx264 --enable-libx265 --enable-openssl --disable-debug --disable-doc --disable-htmlpages --disable-manpages --disable-podpages --disable-static --disable-txtpages --arch=x86_64 --enable-thumb
  libavutil      55. 28.100 / 55. 28.100
  libavcodec     57. 48.101 / 57. 48.101
  libavformat    57. 41.100 / 57. 41.100
  libavdevice    57.  0.101 / 57.  0.101
  libavfilter     6. 47.100 /  6. 47.100
  libswscale      4.  1.100 /  4.  1.100
  libswresample   2.  1.100 /  2.  1.100
  libpostproc    54.  0.100 / 54.  0.100
Codec 'h264_nvenc' is not recognized by FFmpeg.
 

4bob

Benutzer
Mitglied seit
04. Mai 2016
Beiträge
604
Punkte für Reaktionen
2
Punkte
38
Funktioniert auf meiner DS716+ nicht …

Das kann es auch nicht; Nvenc ist eine API für nvidia gpu‘s :)
Ich hab nicht aufgepasst in welcher Konsole ich unterwegs war ..:eek:
Das ist nicht bereitgestellt daher bekommst du diesen Hinweis. Hier geht’s zur Übersicht: https://trac.ffmpeg.org/wiki/HWAccelIntro

Es fehlt der Intel Evansport SMD [Streaming Media Driver] fürs HW Transcoding.
In diesem Fall h264 [enable-libh264_smd] und smd [enable-smd]

Auf meiner DS415+ gibt’s kein hardwarebeschleunigtes Transkodierungsmodul,
evtl. mal über die VideoStation ffmpeg aufrufen: /var/packages/VideoStation/target/bin/ffmpeg -version
die sollte das ja können.

Bob
 
Mitglied seit
10. Aug 2011
Beiträge
14
Punkte für Reaktionen
1
Punkte
9
Moin,
ich möchte diesen Thread mal wieder raus kramen da er im Prinzip das beschreibt was ich machen möchte.

Ich überlege in eine DS916+ zu investieren und die RS815 abzulösen.
Mein Ziel ist es via ffmpeg Live TV (von einem VDR) für unterwegs zu transcodieren.

Die ffmpeg Binary der Videostation unterstützt ja das HW Transcoding richtig?
Ich hatte das hier irgendwo im Forum gesehen das die gar nichts extra aufrufen wenn ffmpeg läuft ...

Alternativ ffmpeg mit folgenden Parametern benutzen : -vaapi_device /dev/dri/renderD128 -c:v h264_vaapi

Kann mir das jemand bestätigen das das klappt?
Vielen Dank
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.545
Punkte für Reaktionen
1.377
Punkte
234
Wenn ich mich nicht täusche, wird auf DSen mit Evansport-CPU per ffmpeg in Hardware transcodiert. Auf den Intel 64bit DSen (wie z.B. DS916+) wird per GStreamer auf den Hardwaretranscoder zurückgegriffen. Für deinen Befehl müsste ja ffmpeg mit vaapi kompiliert worden sein (was das mitgelieferte nicht ist). Meines Wissens nach, müsstest du ffmpeg mit dem Codec h264_qsv (=Intel QuickSyncVideo / libmfx) kompilieren. Das habe ich für mein synOTR-Projekt schon versucht, bin dann aber abgestorben … Das war mir persönlich zu komplex, erst mal die Buildumgebung von Intel in einer eigenen VM für den qsv-Codec. Ich habe da einfach kein funktionierendes ffmpeg-Staticbuild herausbekommen.

Ich fände es auch sehr wünschenswert, wenn da mal jemand weiter käme :)

Vielleicht kannst du ja auch den GStreamer dazu überreden. Mit dessen Parametern bin ich aber nicht vertraut.
 
Mitglied seit
10. Aug 2011
Beiträge
14
Punkte für Reaktionen
1
Punkte
9
Mir ist heute Abend eingefallen das ich im Büro zugriff auf eine DS716+II habe die da zum testen rum steht *plong* ... die ist was transcoding angeht ja gleich zu setzen mit der 916+....
Ich werde am Montag direkt mal gucken was die ffmpeg Binary der VideoStation so sagt ...

Ich berichte
 

geimist

Benutzer
Sehr erfahren
Maintainer
Mitglied seit
04. Jan 2012
Beiträge
5.545
Punkte für Reaktionen
1.377
Punkte
234
ffmpeg aus der VideoStation sagt folgendes:
/volume1/@appstore/VideoStation/bin/ffmpeg
ffmpeg version 2.7.1 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.9.3 (crosstool-NG 1.20.0) 20150311 (prerelease)
configuration: --prefix=/usr/pkg --incdir='${prefix}/include/ffmpeg' --arch=i686 --target-os=linux --cross-prefix=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu- --enable-cross-compile --enable-optimizations --enable-pic --enable-gpl --enable-version3 --enable-nonfree --enable-libfaac --enable-encoders --enable-pthreads --disable-muxer=image2 --disable-muxer=image2pipe --disable-swscale-alpha --disable-ffplay --disable-ffserver --disable-doc --disable-devices --disable-bzlib --disable-altivec --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libmp3lame --disable-decoder=amrnb --disable-encoder=zmbv --cc=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-ccache-gcc --enable-shared --disable-static --enable-yasm --enable-libx264 --enable-encoder=libx264
libavutil 54. 27.100 / 54. 27.100
libavcodec 56. 41.100 / 56. 41.100
libavformat 56. 36.100 / 56. 36.100
libavdevice 56. 4.100 / 56. 4.100
libavfilter 5. 16.101 / 5. 16.101
libswscale 3. 1.101 / 3. 1.101
libswresample 1. 2.100 / 1. 2.100
libpostproc 53. 3.100 / 53. 3.100

Allerdings habe ich jetzt noch ein Staticbuild von ffmpeg in der VideoStation gefunden, dass es meines Wissens nach früher noch nicht gab: ffmpeg-vaapi. Damit kämest du sicherlich weiter.
/volume1/@appstore/VideoStation/bin/ffmpeg-vaapi
ffmpeg version VideoStation-2.3.1-1449-170515-107-g4278f9b Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 4.9.3 (crosstool-NG 1.20.0) 20150311 (prerelease)
configuration: --prefix=/usr/pkg --incdir='${prefix}/include/ffmpeg' --arch=x86_64 --target-os=linux --cross-prefix=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu- --enable-cross-compile --enable-optimizations --enable-pic --enable-gpl --enable-version3 --enable-encoders --enable-pthreads --disable-muxer=image2 --disable-muxer=image2pipe --disable-swscale-alpha --disable-ffplay --disable-ffserver --disable-doc --disable-devices --disable-bzlib --disable-altivec --enable-libmp3lame --disable-decoder=amrnb --disable-encoder=zmbv --cc=/usr/local/x86_64-pc-linux-gnu/bin/x86_64-pc-linux-gnu-ccache-gcc --disable-shared --enable-static --extra-cflags=-I/usr/local/x86_64-pc-linux-gnu/x86_64-pc-linux-gnu/sys-root/usr/pkg/include --extra-ldflags=-L/usr/local/x86_64-pc-linux-gnu/x86_64-pc-linux-gnu/sys-root/usr/pkg/lib --enable-yasm --enable-libx264 --enable-vaapi --enable-encoder=h264_vaapi --enable-encoder=libx264
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
 
Mitglied seit
10. Aug 2011
Beiträge
14
Punkte für Reaktionen
1
Punkte
9
ja genau ... danke :) darüber war ich auch schon gestolpert ... ich werd Montag im Büro direkt mal schauen ...
 
Mitglied seit
10. Aug 2011
Beiträge
14
Punkte für Reaktionen
1
Punkte
9
Soo ein erster schneller Test hat folgendes ergeben.
Auf der 716+II taucht diese ffmpeg_vaapi mit auf ... Ich hab mir mal anschauen wollen wie die Videostation das macht. Die arbeiten da aber tatsächlich noch mit gstreamer und einigen Syno eigenen Scripten. Das kann ich hier aber nicht weiter verfolgen da die Syno komplett vom Internet abgekoppelt ist und das Transcoding versucht die Codecs übers Internet (vermutlich syno server) zu aktivieren etc.
Die scheinen da noch ein wenig mehr zu probieren.

Danach hab ich mir aber mal die ffmpeg_vaapi angeschaut und hab mal ein Testaufruf gebastelt.

Rich (BBCode):
sudo ./ffmpeg-vaapi -vaapi_device /dev/dri/renderD128 -i /volume1/web/test/Test1.mkv -vf 'format=nv12,hwupload' -sn -acodec libmp3lame -b:a 128k -ar 44100 -ac 2 -b:v 2500k -minrate 2500k -maxrate 2500k -vcodec h264_vaapi -threads 0 -flags -global_header -f hls -hls_time 3 -hls_list_size 10 -hls_allow_cache 0 -hls_segment_filename stream%05d.ts -hls_flags delete_segments playlist.m3u8

sudo benötige ich um Zugriff auf das Device zu bekommen.

Er codiert das MKV bei ca 75fps / Speed 3x
Die CPU Last liegt dabei bei 50%

Lass ich das Segmentieren sein und schmeiss die Datei einfach so aus komme ich auf 100fps und ca 4x Speed.

Lasse ich zwei Prozesse gleichzeitig laufen steigt die CPU Last nur leicht auf ca 65% ... Die Frames pro Task liegen bei 60

Ich denke ich werd dann mal in eine neue Syno investieren müssen *lach*

//NACHTRAG : Hab noch mal mit den Einstellungen gespielt :

Rich (BBCode):
sudo ./ffmpeg-vaapi -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i /volume1/web/test/Test1.mkv -vf 'scale_vaapi=w=960:h=540:format=nv12' -c:v h264_vaapi -profile:v 578 -level 41 -bf 0 -b:v 2M -maxrate 2M output.mp4

Läuft bei ca 18% CPU und 70FPS
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat