2015-09-18 2 views
3

J'utilise ffmpeg 2.8 sur OSX.ffmpeg, le tableau de bord ne peut pas être créé en raison d'un format de pixel non spécifié

J'essaie de convertir une courte vidéo mp4 à WebM pour le streaming adaptatif comme suggéré ici http://wiki.webmproject.org/adaptive-streaming/instructions-to-playback-adaptive-webm-using-dash comme ceci:

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 

Cependant, cela me donne un avertissement format pixel non spécifié:

[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) 

Néanmoins, le fichier manifeste est créé. J'ai essayé de spécifier le format de pixel:

-pix_fmt yuv420p 

Cependant cela n'a rien changé. L'avertissement reste le même.

Des idées pour lesquelles l'avertissement apparaît et comment résoudre ce problème?

+0

'ffmpeg forces -f webm_dash_manifest -i video_160x90_250k.webm' ffmpeg pour interpréter le fichier d'entrée suivant en tant que webm_dash_manifest, êtes-vous sûr que c'est ce que vous voulez? – SirDarius

+0

@SirDarius Non, c'est comme ça que c'est utilisé: https://www.ffmpeg.org/ffmpeg-formats.html#Example-2. Ceci est probablement lié à cette réponse http://stackoverflow.com/questions/29004197/webm-dash-encoding-what-are-the-correct-ffmpeg-parameters – aergistal

+0

Ah, mon mauvais, si je comprends bien, en utilisant webm_dash_manifest comme un démultiplexeur ne démultiplexe que les métadonnées de la vidéo, il est donc valide tant que le webm est créé avec -dash. Ne fonctionne pas comme la plupart des démultiplexeurs auxquels je suis habitué. – SirDarius

Répondre

5

Le problème semble être que ffmpeg ne parvient pas à décoder quelques images pour obtenir le format de pixel lors de l'utilisation webm_dash_manifest avec le codec VP9. Cela fonctionne sans problèmes pour VP8.

Cela se produit dans la fonction avformat_find_stream_info:

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

     if (ret < 0) { 
      /* EOF or error*/ 
      break; 
     } 
ordures

read_frame_internal() de retour et empêche le code pour atteindre la partie try_decode_frame().

Lorsque vous utilisez VP8 il récupère les paramètres directement à partir du contexte du codec:

 // Try to just open decoders, in case this is enough to get parameters. 
     if (!has_codec_parameters(st, NULL) && st->request_probe <= 0) { 
      if (codec && !st->codec->codec) 
       if (avcodec_open2(st->codec, codec, options ? &options[i] : &thread_opt) < 0) 
        av_log(ic, AV_LOG_WARNING, 
          "Failed to open codec in av_find_stream_info\n"); 
     } 

st->codec-pix_fmt est 0 pour VP8 et -1 (non trouvé) pour VP9. S'il est supposé obtenir les paramètres directement à partir du contexte, il se peut qu'il y ait un problème avec libvpx-vp9.

Il fonctionne lorsque vous utilisez ffprobe directement avec le fichier 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) 

La question ne semble pas affecter la création manifeste donc je suppose que vous pouvez ignorer les avertissements.

Je ne suis pas encore assez familier avec ffmpeg de proposer un patch, donc il peut être préférable de le signaler comme un bug sur le ffmpeg Tracker: http://ffmpeg.org/pipermail/ffmpeg-user/2015-September/028610.html

+0

Merci pour votre réponse. Avec ffprobe, j'obtiens le même résultat. –

+0

J'ai mis à jour la réponse avec les conclusions VP8 et signalé le problème sur ffmpeg-utilisateur. – aergistal

+0

Appréciez votre aide. Avez-vous un lien vers le rapport? –