учитывая список mp4, создайте fmp4 и объедините

#video #ffmpeg

Вопрос:

мои входные данные представляют собой список mp4 (например, каждый из них равен 10 секундам), каждый mp4 будет иметь правильную метку времени, например, второй mp4 представляет данные за 10-20 секунд.

Чтобы смоделировать мой ввод, я создаю список файлов mp4 таким образом

 ffmpeg -i ../origin-long-video.mp4 -map 0 -c copy -f segment -segment_time 10 -force_key_frames "expr:gte(t,n_forced*2)" -reset_timestamps 0 videos/output_d.mp4
 

Примечание.Я использую метки времени reset_timestamps 0, чтобы сохранить метку времени.

Затем я конвертирую каждый mp4 в фрагмент mp4 с помощью

 ffmpeg -y   -i videos/output_001.mp4   -force_key_frames "expr:gte(t,n_forced*2)"   -sc_threshold 0   -s 1280x720   -c:v libx264 -b:v 1500k   -c:a copy   -hls_time 100   -hls_playlist_type vod   -hls_segment_type fmp4   -hls_segment_filename "hls1/file%d.m4s"  -copyts hls1/index.m3u8
 

Приведенная выше командная строка предназначена для первого файла mp4, я проделал ту же операцию для других файлов mp4 в списке.
Примечание. Я использовал большое hls_time, чтобы каждый mp4 приводил к одному fmp4, а также я использую копии для сохранения метки времени.

Затем я хочу объединить, например, 2-й и 3-й fmp4 для создания одного mp4, который я использовал

 cat init.mp4 > rs.mp4
cat 2nd fmp4 >> rs.mp4
cat 3rd fmp4 >> rs.mp4
 

Однако при попытке воспроизвести сгенерированный rs.mp4, это 20-секундный черный экран, а затем 10-секундное видео (соответствующее 3-му mp4).

Я попробовал другой подход, который просто сгенерировал список fmp4 прямо так:

 ffmpeg -y   -i ../origin-long-video.mp4   -force_key_frames "expr:gte(t,n_forced*2)"   -sc_threshold 0   -s 1280x720   -c:v libx264 -b:v 1500k   -c:a copy   -hls_time 10   -hls_playlist_type vod   -hls_segment_type fmp4   -hls_segment_filename "videos/file%d.m4s"   videos/index.m3u8
 

И затем, если я объединю 2-й и 3-й сгенерированные fmp4, используя тот же способ, что и выше, результат mp4 будет воспроизводиться хорошо.

Интересно, в чем разница между сгенерированным фрагментом mp4 двух подходов, так что они приводят к различному поведению при объединении. Спасибо!