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.
Avez-vous essayé d'exécuter votre commande directement? Peut-être que l'appel de avconv attend une interaction de l'utilisateur –
@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