Mike Slinn

Converting Sony ZV-E1 Video for DaVinci Resolve Free

Published 2025-08-19.
Time to read: 1 minutes.

This page is part of the av_studio collection.

Some videos made with the Sony ZV-E1 do not display on Windows 10. They either show a black screen or cause VLC to shut down and restart several times a second. Nothing is broken; this problem is codec-related. The Sony camera with the settings I used creates videos encoded as 10-bit 4:2:2 H.265.

FFMpeg/FFProbe information

FFMpeg showed me an error when processing in the problem videos. FFProbe was also able to show the same information about the embedded streams in the video.

FFMpeg output
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x585b07ab13c0] st: 0 edit list: 1 Missing key frame
  while searching for timestamp: 1001
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x585b07ab13c0] st: 0 edit list 1 Cannot find an
  index entry before timestamp: 1001.
[mov,mp4,m4a,3gp,3g2,mj2 @ 0x585b07ab13c0] infe version < 2 is not implemented.
  Update your FFmpeg version to the newest one from Git. If the problem still
  occurs, it means that your file has a feature which has not been implemented.
[aist#0:1/pcm_s16be @ 0x585b07bce240] Guessed Channel Layout: stereo
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'GardenWalkJarryPark_18_2025-08-16.mp4':
  Metadata:
    major_brand     : XAVC
    minor_version   : 17506303
    compatible_brands: XAVCmp42iso6
    creation_time   : 2025-08-16T23:13:42.000000Z
  Duration: 00:00:04.00, start: 0.000000, bitrate: 268717 kb/s
  Stream #0:0[0x1](und): Video: h264 (High 4:2:2) (avc1 / 0x31637661),
    yuv422p10le(tv, bt709, progressive), 3840x2160 [SAR 1:1 DAR 16:9],
    141517 kb/s, 29.97 fps, 29.97 tbr, 30k tbn (default)
      Metadata:
        creation_time   : 2025-08-16T23:13:42.000000Z
        handler_name    : Video Media Handler
        vendor_id       : [0][0][0][0]
        encoder         : AVC Coding
  Stream #0:1[0x2](und): Audio: pcm_s16be (twos / 0x736F7774), 48000 Hz, stereo,
    s16, 1536 kb/s (default)
      Metadata:
        creation_time   : 2025-08-16T23:13:42.000000Z
        handler_name    : Sound Media Handler
        vendor_id       : [0][0][0][0]
  Stream #0:2[0x3](und): Data: none (rtmd / 0x646D7472), 4664 kb/s (default)
      Metadata:
        creation_time   : 2025-08-16T23:13:42.000000Z
        handler_name    : Timed Metadata Media Handler
        timecode        : 05:55:47:09
Stream mapping:
  Stream #0:0 -> #0:0 (h264 (native) -> h264 (libx264))
  Stream #0:1 -> #0:1 (pcm_s16be (native) -> aac (native))

Below is an edited and augmented versions what ChatGPT told me about the above:

  • Codec: (10-bit 4:2:2 chroma subsampling). This is the most significant factor. Many media players (like Windows Media Player, QuickTime, and the free version of DaVinci Resolve) cannot decode 10-bit 4:2:2 H.264. When 10-bit output is set, the ZV-E1 records in XAVC S-I 4:2:2 10-bit, which is even more demanding. FFmpeg 7 supports 10-bit 4:2:2. Ubuntu 25.04 “Plucky” includes FFmpeg 7 in its official universe repository.
  • Bitrate: ~140 Mbps at 4K/30p. This is very high — some older software builds (and ffprobe 3.0, which is from 2016) just choke on it.
  • Audio: pcm_s16be (big-endian PCM). That’s unusual because most consumer MP4s use AAC. Some apps may not like raw PCM inside MP4.
  • The extra stream labeled Data: none (rtmd) includes data from the gyro, stabilization, etc. Older tools sometimes break when they encounter this stream.

h265compat Script

This script converts videos for two levels of compatibility.

h265compat
#!/bin/bash

# Convert to:
#  - Universal H.264 (8-bit, widest compatibility, including DaVinci Resolve Free)
#  - High-Quality H.265 (10-bit, smaller files, requires paid version of DaVinci Resolve)

# Usage:
#   ./$(basename $0) [-4] [-5] file.mp4 ...
#   ./$(basename $0) [-4] [-5] *.mp4
#   ./$(basename $0) [-4] [-5] /path/to/dir
#
# Options:
#   -4   Generate only H.264 8-bit output
#   -5   Generate only H.265 10-bit output
#   If no options are given, both are produced.

# Defaults: both enabled
h264=true
h265=true

# Parse options
while getopts ":45" opt; do
  case $opt in
    4) h265=false ;;   # only H.264
    5) h264=false ;;   # only H.265
    \?) echo "Invalid option: -$OPTARG" >&2; exit 1 ;;
  esac
done

shift $((OPTIND -1))

# Collect inputs
inputs=()

if [ -d "$1" ]; then
  inputs=( "$1"/*.mp4 )
else
  inputs=( "$@" )
fi

# Process each file
for infile in "${inputs[@]}"; do
  [ -e "$infile" ] || continue
  base_name=$(basename "$infile" .mp4)

  echo "Processing: $infile"

  if [ "$h264" = true ]; then
    outfile1="H.264_8-bit_${base_name}.mp4"
    echo " → $outfile1"
    ffmpeg -i "$infile" \
      -map 0:v -map 0:a \
      -c:v libx264 -pix_fmt yuv420p -crf 18 -preset slow \
      -c:a aac -b:a 256k \
      "$outfile1"
  fi

  if [ "$h265" = true ]; then
    outfile2="H.265_10-bit_${base_name}.mp4"
    echo " → $outfile2"
    ffmpeg -i "$infile" \
      -map 0:v -map 0:a \
      -c:v libx265 -pix_fmt yuv420p10le -crf 20 -preset slow \
      -c:a aac -b:a 256k \
      "$outfile2"
  fi

  echo "Done: $infile"
done
* indicates a required field.

Please select the following to receive Mike Slinn’s newsletter:

You can unsubscribe at any time by clicking the link in the footer of emails.

Mike Slinn uses Mailchimp as his marketing platform. By clicking below to subscribe, you acknowledge that your information will be transferred to Mailchimp for processing. Learn more about Mailchimp’s privacy practices.