如何在扩展名为.flv的目录中循环播放视频文件,并使用exec将每一个(一次一个)转换为mpg,使用ffmpeg -i original.avi final.mpg
当前文件正在转换时,数组中的下一个文件名应该等到exec进程完成后再继续并转换数组中的其他文件名。
我知道我可以使用scandir($dir)
创建所有文件名的数组,然后可以使用split来仅定位.flv
个文件。这是最好的方法吗?如果我使用while循环运行每个文件名并对其执行exec,我如何确保exec文件完全转换后再转到数组中的下一个文件。
答案 0 :(得分:6)
$dir='/path/to/dir';
$bash_commands = 'cd "'. $dir .'"
for i in *.flv; do
OUTFILE=$(basename "$i" .flv).mpg
ffmpeg -i "$i" -f mpg "$OUTFILE"
done';
exec($bash_commands);
BASH代码说明:
cd
更改当前工作目录
请参阅:Moving around the filesystem @ tldp.org $i
变量包含当前工作目录中具有以下模式的文件的名称:*.flv
。每次迭代都会将$i
的值更改为当前工作目录中的下一个文件名
请参阅:The for loop @ tldp.org和Loops @ tldp.org。$(basename "$i" .flv).mpg
指定给名为OUTFILE
的变量。$i
中的文件转换为名为$i
的文件,但将其后缀更改为“mpg”而不是“flv”。 (“后缀更改”在第三行完成)以下应该是PHP等价物:
chdir('/path/to/current/working/dir');
foreach (glob("*.flv") as $filename) {
$OUTFILE = substr($filename, 0, -3) . 'mpg';
exec('ffmpeg -i "'.$filename.'" -f mpg "'.$OUTFILE.'"');
}