Информация об изменениях

Сообщение Re[8]: Конкатенировать два mp4 от 29.08.2023 15:14

Изменено 29.08.2023 15:18 Conductor

Re[8]: Конкатенировать два mp4
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте.


S>Тут встала необходимость конкатенировать два mp4 файла, смотрю на concat и сюда. Пока не получилось -- создается файл размера 2х от обоих (2 файла по 10 секунд, размер x байт каждый), но проигрывается

S>только 10 секунд 1-го файла:

S>

S>gst-launch-1.0 concat name=c ! filesink location=result.mp4 filesrc location=1.mp4 ! c. filesrc location=2.mp4 ! c.


S>Второй вариант рабочий, пока возьму его, но почему concat не до конца работает?


S>Заранее благодарю.


S>Упд:


S>Нашел работающее решение, но пока не очень понимаю, почему оно работает:


S>

S>gst-launch-1.0 concat name=c ! queue ! m.video_0 qtmux name=m ! filesink location=result.mp4 filesrc location=1.mp4 ! qtdemux ! h264parse ! c. filesrc location=2.mp4 ! qtdemux ! h264parse ! c.


S>Правда, автор решения пишет, что работает не всегда -- https://stackoverflow.com/q/68024094/241446

S>Тут еще есть обсуждение.
S>По итогу, все переходят на splitmuxsrc, хотя мне concat нравится больше.

В первом случае ("gst-launch-1.0 concat name=c ! filesink location=result.mp4 filesrc location=1.mp4 ! c. filesrc location=2.mp4 ! c.") он тебе сделал ровно то, что ты просил — объединил два файла как файлы, а не их содержимое (не потоки), и ему было абсолютно пофигу, что у них внутри. С тем же успехом можно было (вообще без gstreamer'а) выделить элементарный буфер размером в сумму размеров исходных файлов, и скопировать как есть в первую часть данные первого файла, а во вторую — второго. Эффект был бы тот же самый — воспроизведение доходит до конца данных первого файла и завершает работу.

А во втором случае объединяется уже содержимое — ты же видишь: demux + parse + mux.
Re[8]: Конкатенировать два mp4
Здравствуйте, Sharov, Вы писали:

S>Здравствуйте.


S>Тут встала необходимость конкатенировать два mp4 файла, смотрю на concat и сюда. Пока не получилось -- создается файл размера 2х от обоих (2 файла по 10 секунд, размер x байт каждый), но проигрывается

S>только 10 секунд 1-го файла:

S>

S>gst-launch-1.0 concat name=c ! filesink location=result.mp4 filesrc location=1.mp4 ! c. filesrc location=2.mp4 ! c.


S>Второй вариант рабочий, пока возьму его, но почему concat не до конца работает?


S>Заранее благодарю.


S>Упд:


S>Нашел работающее решение, но пока не очень понимаю, почему оно работает:


S>

S>gst-launch-1.0 concat name=c ! queue ! m.video_0 qtmux name=m ! filesink location=result.mp4 filesrc location=1.mp4 ! qtdemux ! h264parse ! c. filesrc location=2.mp4 ! qtdemux ! h264parse ! c.


S>Правда, автор решения пишет, что работает не всегда -- https://stackoverflow.com/q/68024094/241446

S>Тут еще есть обсуждение.
S>По итогу, все переходят на splitmuxsrc, хотя мне concat нравится больше.

В первом случае ("gst-launch-1.0 concat name=c ! filesink location=result.mp4 filesrc location=1.mp4 ! c. filesrc location=2.mp4 ! c.") он тебе сделал ровно то, что ты просил — объединил два файла как файлы, а не их содержимое (не потоки), и ему было абсолютно пофигу, что у них внутри. С тем же успехом можно было (вообще без gstreamer'а) выделить элементарный буфер размером в сумму размеров исходных файлов, и скопировать как есть в первую часть данные первого файла, а во вторую — второго. Эффект был бы тот же самый — воспроизведение доходит до конца данных первого файла и завершает работу.

Ведь в твоей же ссылке https://coaxion.net/blog/2014/08/concatenate-multiple-streams-gaplessly-with-gstreamer явно написано:

# Basically: $ cat file1 file2 > both
gst-launch-1.0 concat name=c ! filesink location=both filesrc location=file1 ! c. filesrc location=file2 ! c.


А во втором случае объединяется уже содержимое — ты же видишь: demux + parse + mux.