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"