Мы пытаемся настроить процесс, позволяющий пользователю объединять сегменты из нескольких видео. Наш процесс настроен на использование ffmpeg для создания отдельных файлов mp4 для каждого сегмента, а затем для их присоединения с использованием процесса демультиплексора ffmpeg concat. При создании файлов сегмента mp4 мы пытаемся сделать их одинаковыми с точки зрения кодекса, измерений и т. Д., Чтобы сцепление было успешным. Вот пример вызова для создания одного из сегментов mp4s.
ffmpeg -ss 0.5 -t 299.5 -i /tmp/vid1.mp4 -c:v libx264 -c:a aac -framerate 29.97 -b:v 540k -maxrate 540k -minrate 540k -bufsize 540k -vf scale=640:480,fade=t=out:st=294.5:d=5 /tmp/vid1_new.mp4
Этот процесс работает в некоторых случаях, но в других присоединенный файл будет правильно воспроизводить первый сегмент, но на более поздних сегментах видео будет иногда зависать, или аудио будет ускорено. У кого-нибудь есть предложения, как сделать вышеупомянутую команду ffmpeg более «пуленепробиваемой», чтобы все файлы были совместимы?
Команда, которую мы используем для объединения файлов:
/var/ffmpg/bin/ffmpeg -f concat -safe 0 -i /tmp/files.txt -c copy /tmp/combined.mp4
Вывод ffprobe
для одного файла:
{
"format": {
"filename": "vid2.mp4",
"nb_streams": 2,
"nb_programs": 0,
"format_name": "mov,mp4,m4a,3gp,3g2,mj2",
"format_long_name": "QuickTime / MOV",
"start_time": "0.000000",
"duration": "1004.944000",
"size": "109489681",
"bit_rate": "871608",
"probe_score": 100,
"tags": {
"major_brand": "isom",
"minor_version": "512",
"compatible_brands": "isomiso2avc1mp41",
"encoder": "Lavf54.63.103"
}
}
}
Вывод ffprobe
второго файла:
{
"format": {
"filename": "vid1.mp4",
"nb_streams": 2,
"nb_programs": 0,
"format_name": "mov,mp4,m4a,3gp,3g2,mj2",
"format_long_name": "QuickTime / MOV",
"start_time": "0.000000",
"duration": "1159.164000",
"size": "63903454",
"bit_rate": "441031",
"probe_score": 100,
"tags": {
"major_brand": "isom",
"minor_version": "512",
"compatible_brands": "isomiso2avc1mp41",
"encoder": "Lavf56.40.100"
}
}
}