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

goliatone
sumber
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);
Roey
sumber
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

Rodislav Moldovan
sumber
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