ffmpeg bekerja pada terminal bukan dengan PHP exec


2

Jika saya menjalankan perintah ffmpeg dari terminal, saya mendapatkan hasil yang diinginkan:

ffmpeg  -i src.mp4 -ar 22050 -ab 32 -f flv -s 320x240 video.flv

Output terminal

... video: 3404kB audio: 1038kB tajuk global: 0kB muxing overhead 2,966904%

Dan video.flv dibuat dengan benar .

Kemudian, jika dipanggil melalui PHP exec:

exec("ffmpeg  -i src.mp4 -ar 22050 -ab 32 -f flv -s 320x240 video.flv", $o, $v);
var_dump($o);
var_dump($v);

outputnya adalah:

array (0) {} int (1)

Dan tidak ada file yang dibuat .

Adakah pemikiran tentang cara mendekati ini?

Saya bisa exec('whoami')tanpa masalah.

Saya telah menggunakan path lengkap ffmpeg juga: /usr/local/bin/ffmpeg


Mungkin exec () hanya menangkap stdout output, bukan stderr.
— Der Hochstapler

FFmpeg menghasilkan output yang sangat aneh - Anda harus mengarahkan ulang stdout dan stderr untuk mendapatkan semuanya AFAIK.
— slhck

Saya tidak mendapatkan file flv yang diinginkan dibuat, jadi ada sesuatu yang def. tidak bekerja Jelas hal yang paling mendesak pada saat ini;)
— goliatone

Jawaban:


1

tambahkan "2> & 1" di akhir perintah dan itu akan bekerja:

exec("ffmpeg  -i src.mp4 -ar 22050 -ab 32 -f flv -s 320x240 video.flv 2>&1", $o, $v);

0

benar, masalahnya adalah bahwa Anda menggunakan exec bukan shell_exec intinya adalah bahwa lingkungan exec tidak tahu tentang ffmpeg yang dapat dieksekusi, tetapi shell_exec tidak, karena ia menggunakan env. dari bash / shell

Solusi ini menggunakan path lengkap ke ffmpeg yang dapat dieksekusi, mis. / usr / bin / ffmpeg


Tidak, pengguna mengatakan mereka mencoba /usr/local/bin/ffmpegjuga.
— slhck

1
kami memiliki masalah yang sama setengah tahun yang lalu, solusi, yang dijelaskan di atas, menyelesaikan masalah, bagaimana dengan "/ usr / local / bin / ffmpeg", mungkin - folder bin tidak benar!? ..
— Rodislav Moldovan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.