Объединить файлы mp4 с помощью инструмента командной строки

Я заблокирован, пытаясь что-то сделать, и я готов сделать пожертвование, если кто-то может мне помочь:

Я пытаюсь объединить http://s.serero.free.fr/rolex.mp4 видео и http://s.serero.free.fr/video.mp4 видео в один выходной файл mp4, и я пытался в течение длительного времени безрезультатно.

Я хочу объединить http://s.serero.free.fr/rolex.mp4 + http://s.serero.free.fr/video.mp4 или http://s.serero.free.fr/video.mp4 + http://s.serero.free.fr/rolex.mp4.

Я пробовал с программным обеспечением командной строки ffmpeg и с программным обеспечением командной строки mp4box, я думаю, что у меня нет хорошего метода.

Я попытался преобразовать http://s.serero.free.fr/video.mp4 в том же формате, что и http://s.serero.free.fr/rolex.mp4 (и наоборот):

Я преобразовал http://s.serero.free.fr/rolex.mp4 с помощью та же частота кадров, что и у http://s.serero.free.fr/video.mp4

Я преобразовал http://s.serero.free.fr/rolex.mp4 с помощью тот же битрейт видео, что и у http://s.serero.free.fr/video.mp4

Я преобразовал http://s.serero.free.fr/rolex.mp4 с помощью такой же битрейт аудио и видео, как у http://s.serero.free.fr/video.mp4< /а>

Кто-нибудь может мне помочь?

Объясните мне, что не так в моей стратегии?


person user1018697    schedule 31.12.2016    source источник


Ответы (2)


Ваши входные параметры различаются, поэтому вы должны сделать их похожими перед конкатенацией.

  • rolex.mp4

    Video: h264 (Main) (avc1 / 0x31637661), yuv420p(tv, bt709), 1280x720 [SAR 1:1 DAR 16:9], 835 kb/s, 25 fps, 25 tbr, 90k tbn, 50 tbc (default)
    Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 125 kb/s (default)
    
  • video.mp4

    Video: h264 (High) (avc1 / 0x31637661), yuvj420p(pc), 1152x720, 1749 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc (default)
    Audio: mp3 (mp4a / 0x6134706D), 44100 Hz, stereo, s16p, 127 kb/s (default)
    

Этот пример сделает video.mp4 более похожим на rolex.mp4, а затем соединит их:

ffmpeg -i rolex.mp4 -i video.mp4 -filter_complex \
"[1:v]pad=1280:720:(ow-iw)/2:0,fps=25,format=yuv420p[v1]; \
 [0:v][0:a][v1][1:a]concat=n=2:v=1:a=1[v][a]" \
-map "[v]" -map "[a]" output.mp4

На самом деле вам не нужно объявлять fps или format, потому что, как указано в документации фильтра concat состояния:

Все соответствующие потоки должны иметь одинаковые параметры во всех сегментах; система фильтрации автоматически выберет общий формат пикселей для видеопотоков и общий формат выборки, частоту дискретизации и расположение каналов для аудиопотоков, но другие настройки, такие как разрешение, должны быть явно преобразованы пользователем.

... но это позволит вам вручную выбрать «общие» настройки вместо того, чтобы полагаться на фильтр, автоматически делающий это и потенциально выбирающий настройку, которая вам не нужна.

person llogan    schedule 01.01.2017
comment
Спасибо за попытку помочь мне, но ffmeg показывает мне эту ошибку: s.serero.free.fr/ ошибка.png - person user1018697; 01.01.2017

Спасибо LordNeckbeard за его отличный ответ, он просто допустил небольшую ошибку в команде, я просто хочу немного пояснить:

Если я хочу соединить video.mp4(1152X720) с rolex.mp4(1280X720), мы должны понимать, что "video.mp4" является основным видео, поэтому видео для объединения должно иметь < strong>точно такой же размер кадра.

Поэтому, прежде чем выполнять эту операцию, вам нужно изменить размер видео rolex.mp4 на тот же размер, что и video.mp4, с помощью ffmpeg:

ffmpeg -i rolex.mp4 -s 1152x720 -c:копия newrolexsized.mp4

No video.mp4 и newrolexsized.mp4 имеют одинаковый размер кадра, и вы можете использовать команду (указав pad=1152:720 => размер основного видео):

ffmpeg -i video.mp4 -i newrolexsized.mp4 -filter_complex "[1:v]pad=1152:720:(ow-iw)/2:0,fps=25,format=yuv420p[v1];[0:v ][0:a][v1][1:a]concat=n=2:v=1:a=1[v][a]" -map "[v]" -map "[a]" out. mp4

person user1018697    schedule 01.01.2017
comment
Его команда верна. Вы изменили порядок ввода с того, что в его команде. В твоем, rolex.mp4 - это 2-й вход. - person Gyan; 01.01.2017