Target specific GPU

I have a laptop with both an AMD iGPU as well as an AMD dedicated GPU. Doing some test transcodes using ffmpeg indicates that the iGPU takes about twice as much time as the dedicated. Based on these times, it seems shotcut is using the iGPU.

ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD129 -hwaccel_output_format vaapi -i 20240107_092522.mp4 -c:v hevc_vaapi output.mp4

Transcode time: ~8min

ffmpeg -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 -hwaccel_output_format vaapi -i 20240107_092522.mp4 -c:v hevc_vaapi output.mp4

Transcode time: ~17min

Shotcut doing an HEVC Main export without any effects or changes to the video takes ~19min.

I suspect shotcut is using /dev/dri/renderD128 but I’d like to set it to use /dev/dri/renderD129. I did find: Config export video using second gpu but that doesn’t seem overly helpful in this case. Is there a way to specify the device for shotcut to use for exports?

After some digging, it’s possible I may need an MLT framework parameter for this. I do see that MLT has some references to hwaccel_device with regards to probing hardware but I can’t seem to find one for passing that parameter to ffmpeg. I tried adding hwaccel_device=/dev/dri/renderD129 to the “Other” encoding parameters. It didn’t fail but it also didn’t seem to improve the encode time.

Try using vaapi_device

I specified vaapi_device=/dev/dri/renderD129 and confirmed via the xml of the job that this seemed to be specified. However encode times remain at the 19-20min. Looking at CPU activity, I notice all 16 cores running at around 45-100%.

What’s odd is when I alter the ffmpeg transcode to replace -hwaccel_device with the -vaapi_device, it seems to work (evidenced by all 16 cpu cores hovering between 0-12%).

I’m pretty sure it’s taking the parameter because it’s in the XML:

<?xml version='1.0' standalone='no'?>
<mlt LC_NUMERIC="C" producer="main_bin" title="Shotcut version 23.11.29" version="7.22.0">
  <profile colorspace="709" description="automatic" display_aspect_den="9" display_aspect_num="16" frame_rate_den="68530239" frame_rate_num="2055990947" height="1080" progressive="1" sample_aspect_den="1" sample_aspect_num="1" width="1920"/>
  <consumer ab="256k" acodec="aac" ar="48000" bf="3" channels="2" deinterlacer="bwdif" f="mp4" g="150" mlt_service="avformat" movflags="+faststart" preset="medium" real_time="-1" rescale="bilinear" target="/home/szemlicka/Videos/input/output2.mp4" threads="15" top_field_first="2" vaapi_device="/dev/dri/renderD129" vbr="off" vcodec="hevc_vaapi" vglobal_quality="28" vprofile="main" vq="28" vtag="hvc1"/>
  <playlist autoclose="1" id="main_bin">
    <property name="xml_retain">1</property>
  </playlist>
  <producer id="black" in="00:00:00.000" out="01:25:44.732">
    <property name="length">01:25:44.765</property>
    <property name="eof">pause</property>
    <property name="resource">0</property>
    <property name="aspect_ratio">1</property>
    <property name="mlt_service">color</property>
    <property name="mlt_image_format">rgba</property>
    <property name="set.test_audio">0</property>
  </producer>
  <playlist autoclose="1" id="background">
    <entry in="00:00:00.000" out="01:25:44.732" producer="black"/>
  </playlist>
  <chain id="chain0" out="01:25:44.732">
    <property name="length">01:25:44.765</property>
    <property name="eof">pause</property>
    <property name="resource">/home/szemlicka/Videos/input/20240107_092522.mp4</property>
    <property name="mlt_service">avformat-novalidate</property>
    <property name="meta.media.nb_streams">2</property>
    <property name="meta.media.0.stream.type">video</property>
    <property name="meta.media.0.stream.frame_rate">30.0012</property>
    <property name="meta.media.0.stream.sample_aspect_ratio">0</property>
    <property name="meta.media.0.codec.width">1920</property>
    <property name="meta.media.0.codec.height">1080</property>
    <property name="meta.media.0.codec.rotate">180</property>
    <property name="meta.media.0.codec.pix_fmt">yuv420p</property>
    <property name="meta.media.0.codec.sample_aspect_ratio">0</property>
    <property name="meta.media.0.codec.colorspace">709</property>
    <property name="meta.media.0.codec.color_trc">1</property>
    <property name="meta.media.0.codec.name">h264</property>
    <property name="meta.media.0.codec.long_name">H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10</property>
    <property name="meta.media.0.codec.bit_rate">14162785</property>
    <property name="meta.attr.0.stream.creation_time.markup">2024-01-07T16:51:08.000000Z</property>
    <property name="meta.attr.0.stream.language.markup">eng</property>
    <property name="meta.attr.0.stream.handler_name.markup">VideoHandle</property>
    <property name="meta.attr.0.stream.vendor_id.markup">[0][0][0][0]</property>
    <property name="meta.media.1.stream.type">audio</property>
    <property name="meta.media.1.codec.sample_fmt">fltp</property>
    <property name="meta.media.1.codec.sample_rate">48000</property>
    <property name="meta.media.1.codec.channels">2</property>
    <property name="meta.media.1.codec.name">aac</property>
    <property name="meta.media.1.codec.long_name">AAC (Advanced Audio Coding)</property>
    <property name="meta.media.1.codec.bit_rate">256004</property>
    <property name="meta.attr.1.stream.creation_time.markup">2024-01-07T16:51:08.000000Z</property>
    <property name="meta.attr.1.stream.language.markup">eng</property>
    <property name="meta.attr.1.stream.handler_name.markup">SoundHandle</property>
    <property name="meta.attr.1.stream.vendor_id.markup">[0][0][0][0]</property>
    <property name="meta.attr.major_brand.markup">mp42</property>
    <property name="meta.attr.minor_version.markup">0</property>
    <property name="meta.attr.compatible_brands.markup">isommp42</property>
    <property name="meta.attr.creation_time.markup">2024-01-07T16:51:08.000000Z</property>
    <property name="meta.attr.com.android.version.markup">12</property>
    <property name="meta.attr.com.android.capture.fps.markup">30.000000</property>
    <property name="seekable">1</property>
    <property name="meta.media.sample_aspect_num">1</property>
    <property name="meta.media.sample_aspect_den">1</property>
    <property name="format">3</property>
    <property name="audio_index">1</property>
    <property name="video_index">0</property>
    <property name="creation_time">2024-01-07T16:51:08</property>
    <property name="vstream">0</property>
    <property name="meta.media.frame_rate_num">2055990947</property>
    <property name="meta.media.frame_rate_den">68530239</property>
    <property name="meta.media.colorspace">709</property>
    <property name="meta.media.color_trc">1</property>
    <property name="meta.media.has_b_frames">0</property>
    <property name="meta.media.width">1920</property>
    <property name="meta.media.height">1080</property>
    <property name="meta.media.color_range">mpeg</property>
    <property name="astream">0</property>
    <property name="shotcut:hash">cf1462f77b4fd8682dc1c9363d09185b</property>
    <property name="meta.media.variable_frame_rate">1</property>
    <property name="meta.media.top_field_first">0</property>
    <property name="meta.media.progressive">1</property>
  </chain>
  <playlist autoclose="1" id="playlist0">
    <property name="shotcut:video">1</property>
    <property name="shotcut:name">V1</property>
    <entry in="00:00:00.000" out="01:25:44.732" producer="chain0"/>
  </playlist>
  <tractor id="tractor0" in="00:00:00.000" out="01:25:44.732" title="Shotcut version 23.11.29">
    <property name="shotcut">1</property>
    <property name="shotcut:projectAudioChannels">2</property>
    <property name="shotcut:projectFolder">0</property>
    <track producer="background"/>
    <track producer="playlist0"/>
    <transition id="transition0">
      <property name="a_track">0</property>
      <property name="b_track">1</property>
      <property name="mlt_service">mix</property>
      <property name="always_active">1</property>
      <property name="sum">1</property>
    </transition>
    <transition id="transition1">
      <property name="a_track">0</property>
      <property name="b_track">1</property>
      <property name="version">0.1</property>
      <property name="mlt_service">frei0r.cairoblend</property>
      <property name="threads">0</property>
      <property name="disable">1</property>
    </transition>
  </tractor>
</mlt>

I’ve got to be missing something because it would seem like that should work. I wonder if the extra overhead is just the other parameters that shotcut has automatically populated. Perhaps I should match that in ffmpeg for an accurate comparison…theoretically they should be pretty close

You cannot compare ffmpeg end-to-end hwaccel transcode with melt and a video editing project. Please read the FAQ

Fair enough. I can certainly see that the parameter is being passed. Thanks for the help!

This topic was automatically closed after 90 days. New replies are no longer allowed.