无法导入使用 FFmpeg for Unity 渲染的 Unity 视频剪辑

无法导入使用 FFmpeg for Unity 渲染的 Unity 视频剪辑

我正在使用 FFmpeg 在 Unity 中渲染视频。对于 FFmpegCaptureCommand.OutputOptions,我使用此命令:

-g 24 -c:v h264 -preset medium -crf 32 -pix_fmt yuv420p -color_primaries bt709 -color_trc bt709 -colorspace bt709 -color_range pc -f mov -movflags frag_keyframe+empty_moov -vf setpts=2*PTS

视频输出在 Windows Media Player 或 VLC 上播放正常,但当我尝试将剪辑导入 Unity 时出现以下错误:

WindowsVideoMedia error 0xc00d36e6 while reading C:/.../d.mov

Context: Getting duration.
Error details: The requested attribute was not found.
Track types:
   Video Track [1024 x 1024], type: H264

我可以使用以下命令创建视频的工作副本:

ffmpeg -i input.mov output.mov

我假设 ffmpeg 在复制视频时会为其创建一个新的容器,但我不明白为什么不这样做。

使用 ffprobe

ffprobe -show_streams -select_streams v C:\...\d.mov   

我在原始视频上获得了以下信息:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\...\d.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 512
    compatible_brands: qt
    encoder         : Lavf59.4.101
  Duration: 00:00:02.97, start: 0.066667, bitrate: 2471 kb/s
  Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1024x1024, 2465 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : FFMP
      encoder         : Lavc59.4.100 libx264
[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=High
codec_type=video
codec_tag_string=avc1
codec_tag=0x31637661
width=1024
height=1024
coded_width=1024
coded_height=1024
closed_captions=0
has_b_frames=2
sample_aspect_ratio=N/A
display_aspect_ratio=N/A
pix_fmt=yuvj420p
level=32
color_range=pc
color_space=bt709
color_transfer=bt709
color_primaries=bt709
chroma_location=left
field_order=unknown
refs=1
is_avc=true
nal_length_size=4
id=N/A
r_frame_rate=30/1
avg_frame_rate=30/1
time_base=1/15360
start_pts=1024
start_time=0.066667
duration_ts=45568
duration=2.966667
bit_rate=2465649
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=N/A
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=1
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
DISPOSITION:captions=0
DISPOSITION:descriptions=0
DISPOSITION:metadata=0
DISPOSITION:dependent=0
DISPOSITION:still_image=0
TAG:handler_name=VideoHandler
TAG:vendor_id=FFMP
TAG:encoder=Lavc59.4.100 libx264
[/STREAM]

复制的视频如下:

Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'C:\...\d1.mov':
  Metadata:
    major_brand     : qt
    minor_version   : 512
    compatible_brands: qt
    encoder         : Lavf59.4.101
  Duration: 00:00:02.97, start: 0.000000, bitrate: 2869 kb/s
  Stream #0:0: Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc, bt709), 1024x1024, 2865 kb/s, 30 fps, 30 tbr, 15360 tbn (default)
    Metadata:
      handler_name    : VideoHandler
      vendor_id       : FFMP
      encoder         : Lavc59.4.100 libx264
[STREAM]
index=0
codec_name=h264
codec_long_name=H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10
profile=High
codec_type=video
codec_tag_string=avc1
codec_tag=0x31637661
width=1024
height=1024
coded_width=1024
coded_height=1024
closed_captions=0
has_b_frames=2
sample_aspect_ratio=N/A
display_aspect_ratio=N/A
pix_fmt=yuvj420p
level=32
color_range=pc
color_space=bt709
color_transfer=bt709
color_primaries=bt709
chroma_location=left
field_order=unknown
refs=1
is_avc=true
nal_length_size=4
id=N/A
r_frame_rate=30/1
avg_frame_rate=30/1
time_base=1/15360
start_pts=0
start_time=0.000000
duration_ts=45568
duration=2.966667
bit_rate=2865152
max_bit_rate=N/A
bits_per_raw_sample=8
nb_frames=89
nb_read_frames=N/A
nb_read_packets=N/A
DISPOSITION:default=1
DISPOSITION:dub=0
DISPOSITION:original=0
DISPOSITION:comment=0
DISPOSITION:lyrics=0
DISPOSITION:karaoke=0
DISPOSITION:forced=0
DISPOSITION:hearing_impaired=0
DISPOSITION:visual_impaired=0
DISPOSITION:clean_effects=0
DISPOSITION:attached_pic=0
DISPOSITION:timed_thumbnails=0
DISPOSITION:captions=0
DISPOSITION:descriptions=0
DISPOSITION:metadata=0
DISPOSITION:dependent=0
DISPOSITION:still_image=0
TAG:handler_name=VideoHandler
TAG:vendor_id=FFMP
TAG:encoder=Lavc59.4.100 libx264
[/STREAM]

我注意到start_time复制的视频上是 0.000000,但原始视频是 0.066667,我想知道这是否与它有关。

如果我查看视频属性/详细信息,原始视频中缺少“长度”属性,但副本中却有。Unity 是否需要该信息?

我这里遗漏了什么?我怎样才能使我的原始命令输出一个包含 Unity 导入所需的正确数据的视频?

提前致谢。

答案1

按照@Rotem 的建议删除后empty_moov问题就解决了。

相关内容