连接多个视频php ffmpeg

时间:2017-05-03 01:12:55

标签: php ffmpeg

我有多个已编码的文件(它们具有相同的格式和大小)我想在一个视频上连接(已经存在且必须被覆盖< / em>的)。

关注official FAQ Documentation我应该使用demuxer

  

FFmpeg有一个concat demuxer,当你想避免使用它时可以使用它   重新编码,您的格式不支持文件级别连接。

问题是我应该使用带有使用此命令行的文件列表的.txt文件

ffmpeg -f concat -safe 0 -i mylist.txt -c copy output

mylist.txt应该是:

file '/path/to/file1'
file '/path/to/file2'
file '/path/to/file3'

我该如何处理PHP?

也尝试使用concat协议

我还尝试使用concat protocol使用以下代码行重新编码视频:

$cli = FFMPEG.' -y -i \'concat:';

foreach ($data as $key => $media) {
  $tmpFilename = $media['id'];
  $tmpPath = $storePath.'/tmp/'.$tmpFilename.'.mp4';

  if ($key != ($dataLenght - 1)) {
    $cli .= $tmpPath.'|';
  } else {
    $cli .= $tmpPath.'\'';
  }
}

$cli .= ' -c copy '.$export;
exec($cli);

生成此命令行:

/usr/local/bin/ffmpeg -i 'concat:/USER/storage/app/public/video/sessions/590916f0d122b/tmp/1493768472144.mp4|/USER/storage/app/public/video/sessions/590916f0d122b/tmp/1493767926114.mp4|/USER/storage/app/public/video/sessions/590916f0d122b/tmp/1493771107551.mp4|/USER/storage/app/public/video/sessions/590916f0d122b/tmp/1493771114598.mp4' -c:v libx264 /USER/storage/app/public/video/sessions/590916f0d122b/tmp_video_session.mp4

但是我收到了这个错误:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fc8aa800000] Found duplicated MOOV Atom. Skipped it

1 个答案:

答案 0 :(得分:0)

这里唯一真正的诀窍是制作一个tempnam的临时文件:

//Generate a unique temporary file name, preferably in "/tmp"
$temporaryFileName = tempnam('/tmp/');

$cli = FFMPEG." -f concat -safe 0 -i $temporaryFileName -c copy $export";

$temporaryFile = fopen($temporaryFileName, 'w');

foreach ($data as $key => $media) {
  $tmpFilename = $media['id'];
  $tmpPath = "file $storePath/tmp/$tmpFilename.mp4\n";

  //Write "$tmpPath" to our temporary file
  fwrite($temporaryFile, $tmpPath);
}

//Close our file resource
fclose($temporaryFile);

exec($cli);

//Clean up the temporary text file
unlink($temporaryFileName);

请记住,我没有运行此代码,但这个想法就在这里。