Я недавно не пробовал этот метод, но не понимаю, почему он все еще не работает. Я считаю, что вы можете просто объединить файлы cat
.mp4
, если вы не хотите делать ничего, кроме их объединения.
$ cat file1.mp4 file2.mp4 > file3.mp4
$ ffmpeg -i file3.mp4 -qscale:v 2 output.avi
, я все еще использую ffmpeg
все время, он тоже может объединять файлы.
Составьте список файлов для объединения
$ cat inputs.txt
файл sample_mpeg4.mp4
файл sample_mpeg4.mp4
объединение
$ ffmpeg -f concat -i inputs.txt -c copy out.mp4
$ ll | grep -E "sample | out"
- rw-rw-r-- . 1 saml saml 491860 19 февраля 23:36 out.mp4
- rw-r - r--. 1 saml saml 245779 19 февраля 23:32 sample_mpeg4.mp4
Другие методы описаны в вики-странице FFmpeg: Как объединить (объединить, объединить) файлы мультимедиа .
ПРИМЕЧАНИЕ: Ubuntu не поддерживает формат concat
. Вы должны использовать протокол concat. Кроме того, он имеет параметры кодека для каждого потока. Таким образом, использование протокола concat приводит к следующему:
$ ffmpeg -i input1.mp4 -vcodec copy -acodec copy \
-vbsf h264_mp4toannexb -f mpegts intermediate1.ts
{{1} } $ ffmpeg -i input2.mp4 -vcodec copy -acodec copy \
-vbsf h264_mp4toannexb -f mpegts intermediate2.ts
$ ffmpeg -i "concat: intermediate1.ts | Intermediate2.ts "\
-vcodec copy -acodec copy -absf aac_adtstoasc output.mp4
Параметры Ubuntu ffmpeg описаны здесь .
Основываясь на некоторых произвольных файлах в Интернете(1 и 2 ), я придумал оператор sed, который заменяет пробелы после текста, который выглядит как команда (буквы и символы подчеркивания )с одной вкладкой:
sed 's/^\([a-z_][a-z_]*\) */\1\t/' input > output
Экранированная скобка захватывает команду (одну или несколько букв и знаков подчеркивания, начиная с начала строки (^
)), затем требует одного или нескольких пробелов после этой команды; эти шаблоны заменяются соответствующей командой(\1
)и вкладкой. Это соответствие шаблону пропускает закомментированные строки (, потому что #
не является буквой или подчеркиванием ).