質問: php(php-fpm)でexecを使って外部プログラムのffmpegを実行していますが、おかしな現象にハマってしまい解決できずにいます。 execで実行するコマンドは次の通りです。 ``` ffmpeg -i file.mp4 -codec copy -map 0 -vbsf h264_mp4toannexb \ -f segment -segment_format mpegts -segment_time 10 \ -segment_list playlist.m3u8 play_%03d.ts ``` これをターミナルから実行するとplaylist.m3u8の中身が次のようになるのですが、 ``` #EXTM3U #EXT-X-VERSION:3 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-ALLOW-CACHE:YES #EXT-X-TARGETDURATION:15 #EXTINF:10.280000, play_000.ts #EXTINF:14.280000, play_001.ts ``` phpのexecで実行するとなぜか次のように#の行が出力されません。 ``` play_000.ts play_001.ts ``` それ以外はtsファイルも問題なく出力されるのですが、なぜphpからだとこのようになるのでしょうか? ffmpegの仕様による現象なのかもしれませんが、調べきれませんでした。 どなたかご存知の方がいましたらご教示をいただければ助かります。 OS:CentOS7.6 (BlueOnyx) php:ver5.4.16 ffmpeg:ver3.2.4 または ver4.1.3 (二つのバージョンで試しました) よろしくお願いいたします。
回答: 1つ誤情報を掲載していました。 ターミナルからの実施に対してphpのexecでも同じものを実行しているように表現していましたが、実際は-segment_listで指定するファイルの拡張子が違っていました。 それが原因のようでターミナルでのファイル名と同じ名前で-segment_listを指定すると今回の問題は起きませんでした。 つまり-segment_listのファイル拡張子がm3u8でないと今回のような形式に出力される仕様?のようです。 ただ、そのような仕様というのは調べている範囲ではどこにも記載されていませんでしたのでそこに気づきませんでした。 phpのexecでffmpegを実行したときにできるm3u8ファイルは手直しする必要があったので一旦、拡張子を変えたテキストファイルに出力して編集元のソースとして利用するためにそのようにしていました。