У меня есть один файл main.mp4
который я разделил на два файла mp4; first_half.mp4
и second_half.mp4
. Используя ffmpeg, я затем объединяю три файла: один спереди: один в середине first_half.mp4
и second_half.mp4
, а второй - после second_half.mp4
Для объединения файлов я сначала конвертирую их в формат .ts
, затем соединяю их, используя протокол concat. Проблема в том, что качество становится ужасным и неровным. Изучив фрагменты, я обнаружил, что с их качеством все в порядке и качество ухудшается только после преобразования в .ts
.
Как я могу сохранить качество файлов TS так же, как исходные файлы?
Я также пробовал concat demuxer, но он сохраняет качество, но работает только для первого файла, так как в конечном итоге искажает последующие файлы.
Вот мои команды:
// cut first half
$cmd ="ffmpeg -i main.mp4 -vcodec copy -acodec copy -ss 00:00:00 -t 00:15:00 first_half.mp4 -y";
shell_exec($cmd);
//convert to ts
$cmd = "ffmpeg -i first_half.mp4 -vcodec copy -acodec copy -bsf:v h264_mp4toannexb -f mpegts in first_half.ts -y -b:v 1000000";
shell_exec($cmd);
//cut second half
$cmd ="ffmpeg -i main.mp4 -vcodec copy -acodec copy -ss 00:15:00 -t $length second_half.mp4 -y";
shell_exec($cmd);
//convert to ts
$cmd = "ffmpeg -i second_half.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts in second_half.ts -y -b:v 1000000";
shell_exec($cmd);
//transcode the "slices"
$cmd = "ffmpeg -i front.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts in front.ts -y -b:v 1000000";
shell_exec($cmd);
$cmd = "ffmpeg -i middle.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts in middle.ts -y -b:v 1000000";
shell_exec($cmd);
$cmd = "ffmpeg -i end.mp4 -c copy -bsf:v h264_mp4toannexb -f mpegts in end.ts -y -b:v 1000000";
shell_exec($cmd);
//concatenate them
$cmd = 'ffmpeg -i "concat:front.ts|first_half.ts|middle.ts|second_half.ts|end.ts" -c copy output.mp4 -y -b 10000000';
shell_exec($cmd);