Повторное кодирование MP4, чтобы гарантировать сцепление без перекодирования
У меня есть 2 mp4 видео, которые не могут объединиться при использовании:
MP4Box -адд 1.mp4 -cat 2.mp4 out.mp4
Есть ли способ перекодировать 2.mp4, чтобы вызов concat создавал верный вывод? Возможно с ffmpeg? Я могу перекодировать только один файл, и я хочу, чтобы конкатенация не делала никакой кодировки.
Ошибка, которую я в настоящее время получаю с этими 2 файлами:
[iso file] Поле "minf" имеет 56 дополнительных байтов. Ошибка добавления 2.mp4: файл IsoMedia урезан
1 ответ
Вы можете попробовать сделать это с помощью ffmpeg:
mkfifo temp0 temp1
ffmpeg -i input0.mp4 -c copy -bsf h264_mp4toannexb -f mpegts -y temp0 2> /dev/null & \
ffmpeg -i input1.mp4 -c copy -bsf h264_mp4toannexb -f mpegts -y temp1 2> /dev/null & \
ffmpeg -f mpegts -i "concat:temp0|temp1" -c copy -absf aac_adtstoasc output.mp4
Это ничего не перекодирует, оно помещает их в новый контейнер транспортного потока, что упрощает их конкатенацию, а затем объединяет их обратно в MP4. Если output.mp4 уже существует, команда не будет выполнена. В вышеприведенной версии используются именованные каналы, если вы находитесь в системе, которая не поддерживает те, которые вам нужны для использования промежуточных файлов:
ffmpeg -i input0.mp4 -c copy -bsf h264_mp4toannexb temp0.ts
ffmpeg -i input1.mp4 -c copy -bsf h264_mp4toannexb temp1.ts
ffmpeg -i "concat:temp0.ts|temp1.ts" -c copy -absf aac_adtstoasc output.mp4