Published 2025-08-19.
Time to read: 1 minutes.
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.
[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.
#!/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