ffmpeg,由于未指定像素格式,无法创建仪表板清单

ffmpeg,由于未指定像素格式,无法创建仪表板清单,ffmpeg,webm,mpeg-dash,vp9,Ffmpeg,Webm,Mpeg Dash,Vp9,我正在OSX上使用ffmpeg 2.8 我尝试将短mp4视频转换为webm,用于自适应流媒体,如下所示: VP9_DASH_PARAMS="-tile-columns 6 -frame-parallel 1" ffmpeg -i t2.mp4 -c:v libvpx-vp9 -s 160x90 -b:v 250k -keyint_min 150 -g 150 ${VP9_DASH_PARAMS} -an -f webm -dash 1 video_160x90_250k.webm ffmpeg

我正在OSX上使用ffmpeg 2.8

我尝试将短mp4视频转换为webm,用于自适应流媒体,如下所示:

VP9_DASH_PARAMS="-tile-columns 6 -frame-parallel 1"

ffmpeg -i t2.mp4 -c:v libvpx-vp9 -s 160x90 -b:v 250k -keyint_min 150 -g 150 ${VP9_DASH_PARAMS} -an -f webm -dash 1 video_160x90_250k.webm
ffmpeg -i t2.mp4 -c:a libvorbis -b:a 128k -vn -f webm -dash 1 audio_128k.webm

ffmpeg \
 -f webm_dash_manifest -i video_160x90_250k.webm \
 -f webm_dash_manifest -i audio_128k.webm \
 -c copy -map 0 -map 1 \
 -f webm_dash_manifest \
 -adaptation_sets "id=0,streams=0 id=1,streams=1" \
 manifest.mpd
但是,这给了我一个警告未指定的像素格式

[webm_dash_manifest @ 0x7f9414812800] Could not find codec parameters for stream 0 (Video: vp9, none, 160x90): unspecified pixel format
Consider increasing the value for the 'analyzeduration' and 'probesize' options
video_160x90_250k.webm: could not find codec parameters
Input #0, webm_dash_manifest, from 'video_160x90_250k.webm':
  Metadata:
    encoder         : Lavf56.36.100
  Duration: 00:00:09.97, bitrate: 111 kb/s
    Stream #0:0: Video: vp9, none, 160x90, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      webm_dash_manifest_duration: 9969
      webm_dash_manifest_initialization_range: 437
      webm_dash_manifest_file_name: video_160x90_250k.webm
      webm_dash_manifest_track_number: 1
      webm_dash_manifest_cues_start: 139297
      webm_dash_manifest_cues_end: 139399
      webm_dash_manifest_bandwidth: 99164
      webm_dash_manifest_cluster_keyframe: 1
      webm_dash_manifest_cue_timestamps: 0,2085,4171,6256,8342
Input #1, webm_dash_manifest, from 'audio_128k.webm':
  Metadata:
    encoder         : Lavf56.36.100
  Duration: 00:00:10.01, bitrate: 120 kb/s
    Stream #1:0: Audio: vorbis, 48000 Hz, stereo, fltp (default)
    Metadata:
      webm_dash_manifest_duration: 10009
      webm_dash_manifest_initialization_range: 4697
      webm_dash_manifest_file_name: audio_128k.webm
      webm_dash_manifest_track_number: 1
      webm_dash_manifest_cues_start: 151174
      webm_dash_manifest_cues_end: 151240
      webm_dash_manifest_bandwidth: 105517
      webm_dash_manifest_cluster_keyframe: 1
      webm_dash_manifest_cue_timestamps: 0,4999,9998
Output #0, webm_dash_manifest, to 'manifest.mpd':
  Metadata:
    encoder         : Lavf56.36.100
    Stream #0:0: Video: vp9, none, 160x90 [SAR 1:1 DAR 16:9], q=2-31, 23.98 fps, 23.98 tbr, 1k tbn, 1k tbc (default)
    Metadata:
      webm_dash_manifest_duration: 9969
      webm_dash_manifest_initialization_range: 437
      webm_dash_manifest_file_name: video_160x90_250k.webm
      webm_dash_manifest_track_number: 1
      webm_dash_manifest_cues_start: 139297
      webm_dash_manifest_cues_end: 139399
      webm_dash_manifest_bandwidth: 99164
      webm_dash_manifest_cluster_keyframe: 1
      webm_dash_manifest_cue_timestamps: 0,2085,4171,6256,8342
    Stream #0:1: Video: vorbis, none, q=2-31, 1k tbn, 1k tbc (default)
    Metadata:
      webm_dash_manifest_duration: 10009
      webm_dash_manifest_initialization_range: 4697
      webm_dash_manifest_file_name: audio_128k.webm
      webm_dash_manifest_track_number: 1
      webm_dash_manifest_cues_start: 151174
      webm_dash_manifest_cues_end: 151240
      webm_dash_manifest_bandwidth: 105517
      webm_dash_manifest_cluster_keyframe: 1
      webm_dash_manifest_cue_timestamps: 0,4999,9998
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
  Stream #1:0 -> #0:1 (copy)
Press [q] to stop, [?] for help
frame=    0 fps=0.0 q=-1.0 Lsize=       1kB time=00:00:00.00 bitrate=N/A    
video:0kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
Output file is empty, nothing was encoded (check -ss / -t / -frames parameters if used)
尽管如此,还是创建了清单文件。我尝试指定像素格式:

-pix_fmt yuv420p
然而,这并没有改变任何事情。警告依旧


你知道为什么会出现警告以及如何解决吗?

问题似乎是当使用
VP9
编解码器时,
ffmpeg
无法解码一些帧以获得像素格式。对于
VP8
,它可以正常工作

这在函数中发生:

        ret = read_frame_internal(ic, &pkt1);
        if (ret == AVERROR(EAGAIN))
            continue;

        if (ret < 0) {
            /* EOF or error*/
            break;
        }
st->codec-pix_fmt
对于
VP8
0
,对于
VP9
-1
(未找到)。如果应该直接从上下文获取参数,那么
libvpx-vp9
可能存在问题

当直接使用
ffprobe
webm
文件时,它起作用:

ffprobe -i video_160x90_250k.webm

Stream #0:0: Video: vp9 (Profile 0), yuv420p(tv), 160x90, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 1k tbn, 1k tbc (default)
这个问题似乎不会影响清单的创建,所以我想您可以忽略这些警告


我对
ffmpeg
还不太熟悉,无法提出补丁,因此最好在
ffmpeg
跟踪器上将其报告为bug:

ffmpeg-f webm\u dash\u manifest-I video\u 160x90\u 250k。webm
强制ffmpeg将以下输入文件解释为webm\u dash\u manifest,你确定这就是你想要的吗?@SirDarius不,这就是它的用法:。这可能与这个答案有关啊,我的错,如果我理解得好的话,使用webm_dash_manifest作为解复用器只解复用视频的元数据,所以只要webm是用-dash创建的,它确实是有效的。不像我所习惯的大多数解复用器那样工作。@cconcolato webm在自适应流媒体方面非常棒:)@cconcolato容器不太可能出现问题,因为使用webm/VP8时,它可以在没有警告的情况下工作。也许OP不想为AVC支付版税,所以让我们关注这个问题。谢谢你的回答。使用ffprobe,我得到了相同的结果。我用VP8的发现更新了答案,并在ffmpeg-user上报告了问题。感谢您的帮助。你有报告的链接吗?它现在在邮件列表上
ffprobe -i video_160x90_250k.webm

Stream #0:0: Video: vp9 (Profile 0), yuv420p(tv), 160x90, SAR 1:1 DAR 16:9, 23.98 fps, 23.98 tbr, 1k tbn, 1k tbc (default)