2016-02-26 1 views
1

J'utilise la commande PHP exec afin de convertir des vidéos par avconv bibliothèque linux:Pourquoi exec pour avconv ne renvoie pas l'état de conversion de la vidéo de script?

exec("avconv -i $mp4FilePath -acodec libvorbis -aq 5 -ac 2 -qmax 25 -threads 2 $webmFilePath > /dev/null &" , $output, $return); 
echo PHP_EOL . 'Script output: ' . $return . PHP_EOL; 
die; 

Maintenant, quand je lance le script php la sortie est:

developers 
    built on Mar 16 2015 13:19:10 with gcc 4.8 (Ubuntu 4.8.2-19ubuntu1) 
Input #0, mov,mp4,m4a,3gp,3g2,mj2, from '/var/www/html/domain/videos/avIBS0ZJmjCQBZV7eWqSWSe0u8lBgRCc.mp4': 
    Metadata: 
    major_brand  : mp42 
    minor_version : 0 
    compatible_brands: isommp42 
    creation_time : 2014-09-08 00:58:51 
    Duration: 00:02:50.38, start: 0.000000, bitrate: 414 kb/s 
    Stream #0.0(und): Video: h264 (Constrained Baseline), yuv420p, 640x360 [PAR 1:1 DAR 16:9], 315 kb/s, 24 fps, 24 tbr, 24 tbn, 48 tbc 
    Stream #0.1(und): Audio: aac, 44100 Hz, stereo, fltp, 95 kb/s 
    Metadata: 
     creation_time : 2014-09-08 00:58:51 
[libvpx @ 0x17bb220] v1.3.0 
Output #0, webm, to '/var/www/html/domain/videos/avIBS0ZJmjCQBZV7eWqSWSe0u8lBgRCc.webm': 
    Metadata: 
    major_brand  : mp42 
    minor_version : 0 
    compatible_brands: isommp42 
    creation_time : 2014-09-08 00:58:51 
    encoder   : Lavf54.20.4 
    Stream #0.0(und): Video: libvpx, yuv420p, 640x360 [PAR 1:1 DAR 16:9], q=-1-25, 200 kb/s, 1k tbn, 24 tbc 
    Stream #0.1(und): Audio: libvorbis, 44100 Hz, stereo, fltp 
    Metadata: 
     creation_time : 2014-09-08 00:58:51 
Stream mapping: 
    Stream #0:0 -> #0:0 (h264 -> libvpx) 
    Stream #0:1 -> #0:1 (aac -> libvorbis) 
Press ctrl-c to stop encoding 
frame= 4089 fps= 21 q=0.0 Lsize= 7151kB time=170.38 bitrate= 343.8kbits/s  
video:5288kB audio:1751kB global headers:4kB muxing overhead 1.538016 

lorsque le script a fonctionné et la conversion réussit il attend à la dernière ligne rien ne se passe et echo commande non exécutée, mon script attend un signal pour s'arrêter (je le pense). Quand j'appuierai, je reviendrai au shell.

Pourquoi la sortie de retour n'est pas imprimé? Comment puis-je vérifier si la conversion vidéo a réussi ou non?


EDIT 1:
Quand j'ai enlevé > /dev/null &, je pouvais voir ce script a terminé avec succès et $return est de retour 0 pour la conversion réussie (si je me trompe corrigez-moi). Mais $output est un tableau vide. Alors que je pouvais voir toute la sortie dans le shell que j'ai montré ci-dessus. Je veux enregistrer toutes ces données dans un fichier journal.

+0

Avez-vous essayé d'exécuter votre commande directement? Peut-être que l'appel de avconv attend une interaction de l'utilisateur –

+0

@AlexanderBaltasar Lorsque je l'exécute directement, le script se termine avec succès et shell est de retour pour obtenir la commande. Et quand j'enlève '>/dev/null &' shell est montré aussi et n'attend pas d'entrer, mais la sortie est écrite au terminal au lieu de la variable '$ output'. – ALH

Répondre

0

Tout d'abord j'ai enlevé > /dev/null & afin de pouvoir retourner à la borne après le travail de script est terminé. Et puis pour obtenir la sortie avconv à l'intérieur de $output j'ai ajouté 2>&1 à la fin du script.