Remix.run Logo
googie 7 hours ago

You encouraged me to try again and somehow, blackmagically ;) it works this time. It may be that recent DaVinci version has made some improvement. I'm so happy!

Installation still requires workarounds and codecs support is limited, but having that aknowledged and accepted, the application is finally usable!

PS. I don't know where the h264 (and other codes?) limitation come from, since ffmpeg has full support of it. Or is it just business model? Weird.

dtf 5 hours ago | parent | next [-]

Great to hear!

I would guess the codec limitation might come from licensing requirements, as BMD would need to pay for h264/h265 licenses for Linux, and that can't really be sustainable for a free product. MacOS and Windows already come with licensed system codecs.

My project had ProRes source media, so there was no codec issue and everything worked very smoothly. I exported ProRes and used ffmpeg to transcode to whatever I needed.

I don't think I would have bothered trying to run Resolve on Linux were it not for finding that davincibox script. It was incredibly straightforward to install, and now I just start it by clicking on an icon like a regular application.

Have fun!

googie 6 hours ago | parent | prev [-]

For those seeking quick solution for missing codecs, here are bash scripts that use ffmpeg to convert any input clips (including these problematic h.265/h.264) to format acceptable for DaVinci

  #!/usr/bin/env bash
  
  set -euo pipefail
  
  INPUT_DIR="${1:-}"
  TARGET_FPS="${2:-30}"
  
  if [[ -z "$INPUT_DIR" ]]; then
      echo "Usage: $0 <directory with clips> [target fps (defaults to 30)]"
      exit 1
  fi
  
  if [[ ! -d "$INPUT_DIR" ]]; then
      echo "Error: directory does not exist: $INPUT_DIR"
      exit 1
  fi
  
  OUTPUT_DIR="$INPUT_DIR/conv"
  mkdir -p "$OUTPUT_DIR"
    
  EXTENSIONS=(
      mp4 avi wmv mpg mpeg mov
      mkv m4v flv webm ts mts m2ts 3gp
  )
  
  shopt -s nullglob nocaseglob
  
  for ext in "${EXTENSIONS[@]}"; do
      for file in "$INPUT_DIR"/*."$ext"; do
          filename="$(basename "$file")"
          name="${filename%.*}"
  
          output="$OUTPUT_DIR/${name}.mov"
  
          echo "Konwersja: $file -> $output"
  
          ffmpeg -y -i "$file" \
              -map 0:v:0 -map "0:a?" \
              -vf "fps=${TARGET_FPS}" \
              -vsync cfr \
              -c:v prores_ks -profile:v 1 \
              -pix_fmt yuv422p \
              -c:a pcm_s16le -ar 48000 \
              "$output"
      done
  done
  
  echo "Results in: $OUTPUT_DIR"
and then converting final exported video to h.265:

  #!/usr/bin/env bash
  set -euo pipefail
  
  INPUT="${1:-}"
  CRF="${2:-21}"
  PRESET="${3:-slow}"
  
  if [[ -z "$INPUT" ]]; then
      echo "Usage: $0 <input file> [crf=21] [preset=slow]"
      exit 1
  fi
  
  if [[ ! -f "$INPUT" ]]; then
      echo "Error: file does not exist: $INPUT"
      exit 1
  fi
  
  DIR="$(dirname "$INPUT")"
  FILE="$(basename "$INPUT")"
  NAME="${FILE%.*}"
  
  OUTPUT="$DIR/${NAME}_h265.mp4"
  
  ffmpeg -y -i "$INPUT" \
    -map 0:v:0 -map '0:a?' \
    -c:v libx265 \
    -preset "$PRESET" \
    -crf "$CRF" \
    -pix_fmt yuv420p \
    -tag:v hvc1 \
    -c:a aac \
    -b:a 192k \
    -movflags +faststart \
    "$OUTPUT"
  
  echo "Ready: $OUTPUT"