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