У меня есть куча сегментов ts, описанных одним файлом index.m3u8:
index.m3u8
segment1_0_av.ts
segment2_0_av.ts
segment3_0_av.ts
segment4_0_av.ts
segment5_0_av.ts
Я знаю, что все они закодированы одинаково. ffprobe дает мне следующее:
Input #0, mpegts, from 'segment1_0_av.ts':
Duration: 00:00:10.00, start: 0.100511, bitrate: 1251 kb/s
Program 1
Stream #0:0[0x100]: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 960x540 [SAR 1:1 DAR 16:9], 12.50 fps, 25 tbr, 90k tbn, 25 tbc
Stream #0:1[0x101]: Audio: aac ([15][0][0][0] / 0x000F), 44100 Hz, stereo, fltp, 105 kb/s
Stream #0:2[0x102]: Unknown: none ([21][0][0][0] / 0x0015)
Я хотел бы объединить их в один контейнер mp4. Но когда я пытаюсь команды как:
ffmpeg -f concat -i filelist.txt -c copy output.mp4
при создании файла filelist.txt из файла index.m3u8 он жалуется на невозможность чтения различных файлов. Но преобразование файлов TS само по себе, кажется, работает нормально. Я думаю, что я не использую ffmpeg должным образом.
Как использовать ffmpeg для объединения файлов ts, описанных index.m3u8, в один контейнер mp4 с использованием кодека копирования?
источник
-bsf:a aac_adtstoasc
.ffmpeg copy ...
, онаcopy ...
(под Windows)Использование copy или cat для объединения файлов, как в случае с текущим верхним ответом szatmary, может привести к тому, что у вас будет файл, который проигрывает далеко за пределом и не может искать вместе с проблемами воспроизведения.
Вместо этого, чтобы правильно объединить эти файлы, используйте ffmpeg, как указано в https://trac.ffmpeg.org/wiki/Concatenate . (Установите ffmpeg здесь, если у вас его еще нет https://github.com/adaptlearning/adapt_authoring/wiki/Install-FFmpeg .)
Если вам лень читать мою первую ссылку, вам, в основном, нужно создать файл .txt, в котором перечислены все файлы, которые вы хотите объединить, как это делается (что моя первая ссылка дает инструкции о том, как это легко сделать) в папке, где вы ' повторное объединение:
Вот копия вставки из моей первой ссылки об одном способе создания текстового файла, если у вас, например, в командной строке Windows, но, очевидно, вы можете создать файл вручную или по своему усмотрению:
Дважды проверьте, что ваш .txt файл выглядит хорошо и правильно отформатирован!
После этого в командной строке выполните:
где «mylist.txt» - это только что созданный файл .txt.
Проверьте, правильно ли воспроизводится результирующий файл. Отсюда вы можете преобразовать в mp4 как обычно, если хотите:
источник
for %i in (*.ts) do
не сортирует правильно для i> = 10. Кроме того, все работает, спасибо. Действительно, были проблемы с конкатенированным файлом, не говоря уже о том, что файл, созданный с использованием вашего метода, оказался на 16% меньше (у меня было 1400 частей на 400 КБ).for i in {1..10}; do echo file \'$i.ts\' >> list.txt ; done
Ответ 2017
Когда я выполняю
ffmpeg -i some.ts -c copy some.mp4
на определенном видео, я получаю это сообщение об ошибке:Не удивительно, что выполнение
ffmpeg -i some.ts -c copy -bsf:a aac_adtstoasc some.mp4
исправляет это.источник
ffmpeg
и теперь он будет делать это автоматически.Собираем все вместе
Используя ответ Хуана Акино (и исправляя первую команду, чтобы она была совместима с Bash, и используя естественное упорядочение файлов), плюс ответ 7vujy0f0hy, простой рабочий сценарий для оболочки Linux Bash:
источник
Правильный способ объединения нескольких видеофайлов из списка воспроизведения m3u8:
ffmpeg -i "index.m3u8" -codec copy output.mp4
-codec copy
чтобы избежать кодирования*.mp4
хорошо, но кажется немного медленным, когда плейлист выбирается из сети*.mkv
или*.ts
работал лучше для меняисточник
Вы можете сделать объединение просто так (с помощью bash):
Заменить
<number>
на наибольшее число (очевидно). Варианты с ffmpeg не работали должным образом. Выходной видеофайл будет странно заикаться.Я использую цикл for, чтобы обеспечить правильный порядок файлов. Может быть, вам это не нужно. Может быть, даже возможно передать вывод в ffmpeg и преобразовать его в mp4 на лету.
источник
Вы можете использовать конвейерную передачу этих файлов ts в ffmpeg и выводить файл mp4.
cat *.ts | ffmpeg -i pipe: -c:a copy -c:v copy output.mp4
или если у вас нет имени файла,
grep .*.ts index.m3u8 | xargs cat | ffmpeg -i pipe: -c:a copy -c:v copy output.mp4
источник
Все популярные ответы на этот вопрос, которые вводят читателей в заблуждение относительно объединения файлов TS перед запуском ffmpeg, неверны. Чтобы гарантировать, что аудио и видео не будут не синхронизированы во время сборки потока mp4, следует использовать плохо документированную, но важную функцию -f concat в ffmpeg.
Две подготовительные строки кода просто создают файл, содержащий список файлов TS в этом формате строки:
источник