Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Видео и аудио: обработка и кодирование (http://forum.oszone.net/forumdisplay.php?f=45)
-   -   [решено] Как склеить 1000 файлов через ffmpeg? (http://forum.oszone.net/showthread.php?t=327706)

90azat 19-06-2017 10:42 2745760

Как склеить 1000 файлов через ffmpeg?
 
Добрый день
Знатоки подскажите пожалуйста как склеить 1000 видео формата mov через ffmpeg на windows(выходной файл хоть mov хоть avi без разницы, главное склеить).
Даны видеофайлы с названием:
1) 34523456735675467_random..mov
2) 54635638356735673_random.mov
.
.
999) 54632542556234634_random.mov

Пробывал такие команды не помогло:


Код:


    1) ffmpeg -f concat -i <(for f in C:/timelaps/fine/*.mov; do echo "file '$f'"; done) -qscale:v 0 all.avi
    Не найден файл
    2) ffmpeg -f concat -i <(for f in C:\timelaps\fine\*.mov; do echo "file '$f'"; done) -qscale:v 0 all.avi
    Не найден файл
    3) ffmpeg -f concat -i <(for f in /timelaps/fine/*.mov; do echo "file '$f'"; done) -qscale:v 0 all.avi
    Не найден файл
    4) ffmpeg -f concat -i <(for f in \timelaps\fine\*.mov; do echo "file '$f'"; done) -qscale:v 0 all.avi
    Не найден файл
    5) ffmpeg -i concat:"\timelaps\fine\*.mov" -c copy video22.mov
    *.mov неизвестная команда
    .
    .
    .
    .
    99



Если ffmpeg не умеет клеить mov файлы, подскажите как пакетно 1000 файлов с разными именами поставить на перекодировку, к примеру в mpg|ts, спасибо

Iska 19-06-2017 11:20 2745770

Код:

(for /f "usebackq delims=" %i in (`dir /b /a:-d "*.mov"`) do @echo file '%~i') | "%ProgramFiles%\FFmpeg\bin\ffmpeg.exe" -safe 0 -f concat -i - -codec copy "Out\Result.mov"
Не забудьте предварительно создать результирующий каталог Out, либо укажите иное существующее местоположение, отличное от исходного каталога.

90azat 19-06-2017 12:24 2745781

Бьет ошибку :

Код:

[file @ 0000000001f941e0] Protocol 'file' not on whitelist 'crypto'!
[concat @ 00000000009d68a0] Impossible to open '1.mov'
pipe:: Invalid argument

Исправил так:
Код:

(for /f "usebackq delims=" %i in (`dir /b /a:-d "*.mov"`) do @echo file '%~i') | "\timelaps\fine\ffmpeg.exe" -safe 0 -protocol_whitelist "file,http,https,tcp,tls,pipe" -f concat -i - -codec copy "\timelaps\fine\Result.mov"
В результате:
Код:

[mov,mp4,m4a,3gp,3g2,mj2 @ 0000000001f73dc0] Auto-inserting h264_mp4toannexb bitstream filter
Input #0, concat, from 'pipe:':
  Duration: N/A, start: 0.000000, bitrate: 8019 kb/s
    Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 8019 kb/s, 30 fps, 30 tbr, 10k tbn, 20k tbc
    Metadata:
      handler_name    : DataHandler
Output #0, mov, to '\timelaps\fine\Result.mov':
  Metadata:
    encoder        : Lavf57.73.100
    Stream #0:0(eng): Video: h264 (Main) (avc1 / 0x31637661), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 8019 kb/s, 30 fps, 30 tbr, 10k tbn, 10k tbc
    Metadata:
      handler_name    : DataHandler
Stream mapping:
  Stream #0:0 -> #0:0 (copy)
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000000001f74ec0] Auto-inserting h264_mp4toannexb bitstream filterx
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000000001f74ec0] Auto-inserting h264_mp4toannexb bitstream filterx
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000000001f74ec0] Auto-inserting h264_mp4toannexb bitstream filterx
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000000001f74ec0] Auto-inserting h264_mp4toannexb bitstream filterx
[mov,mp4,m4a,3gp,3g2,mj2 @ 0000000001f74ec0] Auto-inserting h264_mp4toannexb bitstream filterx
frame=120588 fps=1385 q=-1.0 Lsize= 3935471kB time=01:06:59.51 bitrate=8020.7kbits/s speed=46.2x
video:3934229kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.031568%

Создался файл Result.mov который открывается и проигрывается, но вместо видео черный экран (VLC, MPC player)

90azat 19-06-2017 12:51 2745786

Попробовал еще так тоже не помогло:
Код:

(for /f "usebackq delims=" %i in (`dir /b /a:-d "*.mov"`) do @echo file '%~i') | "\timelaps\fine\ffmpeg.exe" -safe 0 -protocol_whitelist "file,http,https,tcp,tls,pipe" -f concat -i - -vcodec copy "\timelaps\fine\Result2.mp4"

Код:

(for /f "usebackq delims=" %i in (`dir /b /a:-d "*.mov"`) do @echo file '%~i') | "\timelaps\fine\ffmpeg.exe" -safe 0 -protocol_whitelist "file,http,https,tcp,tls,pipe" -f concat -i - -vcodec copy -movflags faststart "\timelaps\fine\fine\Result3.mov"
Код:

(for /f "usebackq delims=" %i in (`dir /b /a:-d "*.mov"`) do @echo file '%~i') | "\timelaps\fine\ffmpeg.exe" -safe 0 -protocol_whitelist "file,http,https,tcp,tls,pipe" -f concat -i - -vcodec copy "\timelaps\fine\fine\Result3.mov"

Iska 19-06-2017 12:59 2745787

Цитата:

Цитата 90azat
Создался файл Result.mov который открывается и проигрывается, но вместо видео черный экран (VLC, MPC player) »

Тут я Вам не подскажу. На моих *.mov-файлах — открывается и воспроизводится. Обратитесь в профильный раздел: Видео и аудио: обработка и кодирование или попросите модератора перенести туда всю тему.

x0r 19-06-2017 13:36 2745794

Так у тя ничего не получится. По каким-то упоротым причинам , кодеры ffmpeg упорно требуют файл-список для этого , в своём формате. Я тоже однажды чуть моск не сломал, пока допёр чего ему не нравиццо. Список такой:
1. имена желательно цифры (счетчик с нуля или другое что, с разделителями, но цифры надёжно канают и чтоб не много было. у тебя много)
2. список для склейки такой (имя любое, нопр. list.lst):
Код:

file '3_2_01.m4a'
file '3_2_02.m4a'
file '3_2_03.m4a'
file '3_2_04.m4a'
file '3_2_05.m4a'
file '3_2_06.m4a'
file '3_2_07.m4a'
file '3_2_08.m4a'
file '3_2_09.m4a'
file '3_2_10.m4a'
file '3_2_11.m4a'
file '3_2_12.m4a'
file '3_2_13.m4a'
file '3_2_14.m4a'
file '3_2_15.m4a'
file '3_2_16.m4a'
file '3_2_17.m4a'
... ну и т.д.

и потом склеиваешь его коммандой:
Код:

ffmpeg -f concat -i list.lst -vn -acodec aac -b:a 68k all-files-in-one.m4a
И еще. когда пробовал, заметил что это его -codec copy - не сафсем "copy", ибо что-то оно всё равно делает с потоком. Потому и ошибки , скрипы, "пустые экраны" заместо видео.
Так что лучше всё-таки не copy , а что-нибудь рядом(по формату) с перекодировкой. тогда работает.
Этот его копи, например работает хуже чем во wget -O- >> %filename%.mp4 - при скачивании .m3u8 листов видео с сайтов. При wget -O- >> %filename%.mp4 - все норм, файл работает всегда почти(99,5%).
А вот если скачать все части отдельно в папку, а потом пытаться объединять через ffmpeg -codec copy(части жеж одного файла, там все одинаково 100%) - мусор получается очень часто. Так что это не совсем copy.

Iska 19-06-2017 13:43 2745796

Цитата:

Цитата x0r
Так у тя ничего не получится. »

x0r, у мя всё уже получилось — если Вы не поняли. Список исходных файлов формируется и передаётся по конвейеру на вход утилиты. С этим проблем нет.

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

90azat 19-06-2017 14:29 2745811

Проблему решил:
Код:

(for /f "usebackq delims=" %i in (dir /b /a:-d "*.mov") do @echo file '%~i') | "\timelaps\fine\ffmpeg.exe" -safe 0 -protocol_whitelist "file,http,https,tcp,tls,pipe" -f concat -i - -c:v libx264 -an "\timelaps\fine\fine\Result7.avi"
Добавляем timelaps и наслаждаемся:
Код:

(for /f "usebackq delims=" %i in (`dir /b /a:-d "*.mov"`) do @echo file '%~i') | "\timelaps\fine\ffmpeg.exe" -safe 0 -protocol_whitelist "file,http,https,tcp,tls,pipe" -f concat -i - -c:v libx264 -an -filter:v "setpts=0.01*PTS" "\timelaps\fine\fine\Result8.avi"
Осталось ватермарк запилить и в продакшн

bredych 24-06-2017 19:32 2747056

Iska, Цитата Iska:
Цитата:

-codec copy »
а почему вы пишете копировать кодек? вдруг они разные в файлах? Пусть перекодирует таки в один. Ну и опять же, огрызки могут быть от обрезки не по ключевому фрейму - от этого при склейке копии видео замирает или ломается, замечал.
мож потому у человека и не получалось, что он набирал огрызки из разных видео, сливал их в некую "подборку", лепил свои ватермарки или чего там, и лил на тюбик?


а, блин, уже написали )) я слишком поздно глянул ))

nsw88 21-02-2019 16:41 2859225

Не понял как этим пользоваться. Поясните, пожалуйста, если софтина лежит в C:\temp\VEXP\pr\ffmpeg.exe, куча mov в C:\temp\VEXP\Video\ а результат нужен сюда C:\temp\VEXP\out


Время: 07:24.

Время: 07:24.
© OSzone.net 2001-