Skip to content
Vincent Fortier edited this page Mar 16, 2023 · 28 revisions

SynoCommunity package FFmpeg specific FAQ

FFmpeg provides a set of command line tools to process audio and video media files.

Commands are located in /usr/local/ffmpeg/bin and libraries are required by other packages. In DSM 7.0, they are located in /volume1/@appstore/ffmpeg/bin.

Download Fmpeg: https://www.ffmpeg.org/ffmpeg-master-latest-win64-gpl.zip

FFMPEG ultimate guide: https://img.ly/blog/ultimate-guide-to-ffmpeg/

How to check supported formats and encoders

Ref: https://dev.to/drsensor/list-of-helpful-ffmpeg-command-for-checking-capabilities-1110

How to list all filter options:

$ ffmpeg -hide_banner -filters
Filters:
  T.. = Timeline support
  .S. = Slice threading
  ..C = Command support
  A = Audio input/output
  V = Video input/output
  N = Dynamic number and/or type of input/output
  | = Source or sink filter
 T.. adelay           A->A       Delay one or more audio channels.
 ... aecho            A->A       Add echoing to the audio.
...

How to list hardware acceleration:

$ ffmpeg -hide_banner -hwaccels
Hardware acceleration methods:
vaapi
qsv
drm

On Intel type processor, validate hardware acceleration:

  • Access to the video device file is granted on a per application basis. This allows an application such as tvheadend to be granted access use hardware acceleration when calling ffmpeg.
  • As a default user you must interact with ffmpeg acting as a user who's access was already granted (see example below) or add your user account to the videodriver group.
$ sudo su -s /bin/bash sc-ffmpeg -c '/var/packages/ffmpeg/target/bin/vainfo'
Trying display: drm
libva info: VA-API version 1.16.0
libva info: Trying to open /var/packages/ffmpeg/target/lib/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_16
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.16 (libva 2.16.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 22.5.4 (25c8ffa0)
vainfo: Supported profile and entrypoints
      VAProfileNone                   :	VAEntrypointVideoProc
      VAProfileNone                   :	VAEntrypointStats
      VAProfileMPEG2Simple            :	VAEntrypointVLD
      VAProfileMPEG2Main              :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointVLD
      VAProfileH264Main               :	VAEntrypointEncSlice
      VAProfileH264Main               :	VAEntrypointFEI
      VAProfileH264Main               :	VAEntrypointEncSliceLP
      VAProfileH264High               :	VAEntrypointVLD
      VAProfileH264High               :	VAEntrypointEncSlice
      VAProfileH264High               :	VAEntrypointFEI
      VAProfileH264High               :	VAEntrypointEncSliceLP
      VAProfileVC1Simple              :	VAEntrypointVLD
      VAProfileVC1Main                :	VAEntrypointVLD
      VAProfileVC1Advanced            :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointVLD
      VAProfileJPEGBaseline           :	VAEntrypointEncPicture
      VAProfileH264ConstrainedBaseline:	VAEntrypointVLD
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSlice
      VAProfileH264ConstrainedBaseline:	VAEntrypointFEI
      VAProfileH264ConstrainedBaseline:	VAEntrypointEncSliceLP
      VAProfileVP8Version0_3          :	VAEntrypointVLD
      VAProfileVP8Version0_3          :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointVLD
      VAProfileHEVCMain               :	VAEntrypointEncSlice
      VAProfileHEVCMain               :	VAEntrypointFEI
      VAProfileHEVCMain10             :	VAEntrypointVLD
      VAProfileVP9Profile0            :	VAEntrypointVLD

If access restricted or non-existant such as on virtual DSM:

$ vainfo 
Trying display: drm
error: failed to initialize display

How to list encoders|decoders|codecs

$ ffmpeg -hide_banner -encoders
$ ffmpeg -hide_banner -decoders
$ ffmpeg -hide_banner -codecs

How to list details of a specific encoder|decoder|codec

$ ffmpeg -hide_banner -h encoder=<encoder>
$ ffmpeg -hide_banner -h decoder=<decoder>

Example for HEVC:

$ ffmpeg -hide_banner -h decoder=hevc
Decoder hevc [HEVC (High Efficiency Video Coding)]:
    General capabilities: dr1 delay threads 
    Threading capabilities: frame and slice
    Supported hardware devices: vaapi 
HEVC decoder AVOptions:
  -apply_defdispwin  <boolean>    .D.V....... Apply default display window from VUI (default false)
  -strict-displaywin <boolean>    .D.V....... stricly apply default display window size (default false)

x265 specific

For a specific feature like 10bits support in HEVC:

$ /usr/local/ffmpeg/bin/x265 -V -D10

Please search for your requirements online, you should find command to run to get your specific answer.

How to use SynoCommunity FFmpeg in Video Station

Warning: untested and can course damage if you don't know what these commands do.

https://gist.github.com/BenjaminPoncet/bbef9edc1d0800528813e75c1669e57e

sudo mv /var/packages/VideoStation/target/bin/ffmpeg /var/packages/VideoStation/target/bin/ffmpeg.old
sudo ln -sf /var/packages/ffmpeg/target/bin/ffmpeg /var/packages/VideoStation/target/bin/ffmpeg
sudo cp -p /var/packages/VideoStation/target/lib/libsynovte.so /var/packages/VideoStation/target/lib/libsynovte.so.old
sudo sed -i 's/eac3/ZXXZ/' /var/packages/VideoStation/target/lib/libsynovte.so
sudo sed -i 's/dts/ZXZ/' /var/packages/VideoStation/target/lib/libsynovte.so
sudo sed -i 's/truehd/ZXZZXZ/' /var/packages/VideoStation/target/lib/libsynovte.so

Reverse the above changes:

sudo mv -f /var/packages/VideoStation/target/bin/ffmpeg.old /var/packages/VideoStation/target/bin/ffmpeg
sudo mv -f /var/packages/VideoStation/target/lib/libsynovte.so.old /var/packages/VideoStation/target/lib/libsynovte.so

(Thanks @GermanChap)

Recent VideoStation version no longer loads SynoCommunity ffmpeg libraries. I should not recommend that but there is a process to downgrade it: https://github.com/SynoCommunity/spksrc/issues/2952#issuecomment-337214013

Clone this wiki locally