codec video

codec video - Logiciels - Linux et OS Alternatifs

Marsh Posté le 01-08-2006 à 11:04:56    

Bonjour,
 
J'aimerais savoir s'il existait une commande (sans interface graphique pour connaitre les codec d'un fichier video)
 
Pour l'instant j'utilise ffmpeg pour encoder :
 
il me sort quelque chose comme ca :
 
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '031005_NHtoPluto.mov':
  Duration: 00:05:00.3, start: 0.000000, bitrate: 357 kb/s
  Stream #0.0(eng): Audio: adpcm_ima_qt, 22050 Hz, mono
  Stream #0.1(eng): Video: svq1, yuv410p, 320x240, 14.98 fps(r)
 
 
C'est exactement ce que je veux, mais j'ai pas trouvé de commande pour lui demander d'afficher ces informations sans rien encoder.
le but c'est de lancer cette commande depuis php pour récupérer les codec de la video afin de lancer ffmpeg pour réencoder la video automatiquement selon des paramètres dependant du format d'entrée ( se baser sur l'extension du fichier n'est pas assez précis et peu etre falsifié).
 
merci pour vos réponse
merci !
 

Reply

Marsh Posté le 01-08-2006 à 11:04:56   

Reply

Marsh Posté le 01-08-2006 à 11:56:28    

Essaie avec la commande "file".

Reply

Marsh Posté le 01-08-2006 à 12:43:17    

Tu lance un transcodage "bidon" d'une seconde de durée. Tu aura tes informations, au prix d'un temps de calcul minime (et comme ça si le transcodage se passe mal, tu se saura aussi).
Mplayer/mencoder idem.
 
Tient nous au courant !

Reply

Marsh Posté le 01-08-2006 à 12:59:21    

ok merci pour vos deux réponses  
 actuelement je me débrouille avec un :
 
ffmpeg -i source
il me sort toutes les info avec un erreur a la fin :
 
Must supply at least one output file
 
le probleme c'est que quand je lance la comande depuis php je n'arrive pas a récupérée la sortie donc l'idée du transcodage bidon ca peut etre la solution meme si c'est un peu sale
 
avec file c'est bien mais pas assez précis car il faut que je distingue par example le wmv1, wmv2 ou le wmv3 qui ce dernier n'est pas supporté par ffmpeg

Reply

Marsh Posté le 01-08-2006 à 14:36:20    

mplayer -vo dummy -ao dummy mon_fichier  ?


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 01-08-2006 à 14:50:53    

Pour récuperer la sortie (il y a plus simple) un truc du genre codé a la louche:

Code :
  1. [...]
  2. if (file_exist("fichierdesresultats.txt" ))
  3. {
  4. deletefile("fichierdesresultats.txt" );
  5. }
  6. exec("executable -options > fichierdesresultats.txt" );
  7. $variable=file(fichierdesresultats.txt);
  8. [...]


le ">" détourne la sortie console vers un fichier texte
le ">>" détourne la sortie console vers la fin d'un fichier texte (append)

Reply

Marsh Posté le 01-08-2006 à 15:38:20    

Si tu as 5 minutes et que tu sais compiler un programme C/C++, ça m'a l'air assez facile avec la bibliothèque libavformat (utilisée par ffmpeg).
 

Code :
  1. #include <headers_qui_vont_bien>
  2. int main(int argv, char* argv[])
  3. {
  4. AVFormatContext *pFormatCtx;
  5. const char      *filename="myvideo.mpg";
  6. // Open video file
  7. if(av_open_input_file(&pFormatCtx, filename, NULL, 0, NULL)!=0)
  8.     handle_error(); // Couldn't open file
  9. // Retrieve stream information
  10. if(av_find_stream_info(pFormatCtx)<0)
  11.     handle_error(); // Couldn't find stream information
  12. dump_format(pFormatCtx, 0, filename, false);
  13. return 0;
  14. }

Reply

Marsh Posté le 01-08-2006 à 17:10:23    

Finalement j'ai retenu l'idée du transcodage bidon d'1 frame mais le petit programme en C ca me plait assez je vais expérimenter ca.
 
Pour l'heure je fais ceci :
 

Code :
  1. function getRealType($src){
  2.  $com="ffmpeg -y -i $src -vcodec flv -an -vframes 1 dummy.flv";
  3.  $descriptorspec = array(
  4.  0 => array("pipe", "r" ),  // stdin  
  5.  1 => array("pipe", "w" ),  // stdout  
  6.  2 => array("pipe", "w" ) // stderr  
  7.  );
  8.  $cwd = getcwd();
  9.  $process = proc_open($com, $descriptorspec, $pipes,$cwd);
  10.  if (is_resource($process)){
  11.   $errorStream=stream_get_contents($pipes[2]);
  12.   fclose($pipes[0]);
  13.   fclose($pipes[1]);
  14.   fclose($pipes[2]);
  15.     $return_value = proc_close($process);
  16.   return $errorStream;
  17.  }
  18. }

Reply

Marsh Posté le 01-08-2006 à 20:00:51    

Et tu obtient ?

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed