Войти

Показать полную графическую версию : [решено] Как склеить 1000 файлов через ffmpeg?


90azat
19-06-2017, 10:42
Добрый день
Знатоки подскажите пожалуйста как склеить 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
(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
Бьет ошибку :


[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
Попробовал еще так тоже не помогло:

(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
Создался файл Result.mov который открывается и проигрывается, но вместо видео черный экран (VLC, MPC player) »
Тут я Вам не подскажу. На моих *.mov-файлах — открывается и воспроизводится. Обратитесь в профильный раздел: Видео и аудио: обработка и кодирование (http://forum.oszone.net/forum-45.html) или попросите модератора перенести туда всю тему.

x0r
19-06-2017, 13:36
Так у тя ничего не получится. По каким-то упоротым причинам , кодеры 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
Так у тя ничего не получится. »
x0r, у мя всё уже получилось — если Вы не поняли. Список исходных файлов формируется и передаётся по конвейеру на вход утилиты (http://forum.oszone.net/post-2745770.html#post2745770). С этим проблем нет.

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

90azat
19-06-2017, 14:29
Проблему решил:

(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
Iska, Цитата Iska:
-codec copy »
а почему вы пишете копировать кодек? вдруг они разные в файлах? Пусть перекодирует таки в один. Ну и опять же, огрызки могут быть от обрезки не по ключевому фрейму - от этого при склейке копии видео замирает или ломается, замечал.
мож потому у человека и не получалось, что он набирал огрызки из разных видео, сливал их в некую "подборку", лепил свои ватермарки или чего там, и лил на тюбик?


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

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




© OSzone.net 2001-2012