我使用以下命令从大华相机将 H.265 视频文件转换为 dav 格式。生成的两个 mp4 视频文件都无法在 iPhone 默认播放器中播放。但是,生成的视频文件可以在 VLC 播放器中播放。
ffmpeg -y -i hevc.dav -c:v copy -tag:v hvc1 hevc.mp4
ffmpeg -y -i hevc.dav -tag:v hvc1 -c:v copy -f mp4 -movflags frag_keyframe+empty_moov hevc.mp4
仅当我使用以下命令重新编码视频时,生成的视频文件才会播放。
ffmpeg -y -i hevc.dav -c:v libx265 -tag:v hvc1 hevc.mp4
重新编码非常耗时。因此,如果我在上述命令中缺少任何标志,请告诉我。
使用 hexdump -C 命令验证源 dav 文件,发现文件开头的字节不是 DHAV。它给了我一个线索,第一个 HEVC 帧并不完整。
编写了一个小C程序来搜索文件中是否还有DHAV字节,我在大约46KB后找到了DHAV。从文件开头删除这些部分字节,并将剩余字节写入另一个名为 hevc_cropped.dav 的文件,然后运行以下命令。
ffmpeg -y -i hevc_cropped.dav -c:v copy -tag:v hvc1 hevc.mp4
这次生成的视频文件可以正常播放了。