/ / Concat viac (self-generované) videá pomocou ffmpeg na raspbian linux - linux, bash, ffmpeg, raspbian

Zmierte viac (samo-generovaných) videí pomocou ffmpeg na raspbian linux - linux, bash, ffmpeg, raspbian

Som veľmi talentovaný spánok, tak som sa rozhodolnapísať riešenie, ktoré zaznamená veci, o ktorých hovorím v noci, aby sa vytvorili vtipné videá s titulkami. Projekt je takmer hotový, ale mám veľký problém s vytváraním videí, ktoré som predtým vygeneroval.

Časti videa sa generujú z jednotlivých snímok png pomocou tohto príkazu:

ffmpeg -y -framerate 15 -i "${images_file_path}" -c:v libx264 -r 30 -pix_fmt yuv420p "${video_file_path}"

Potom sa zvuk pridá pomocou tohto príkazu (dostal z # 9049970 a # 11779490):

ffmpeg -y -i "${video_file_path}" -i "${mp3_file_path}" -map 0:v -map 1:a -vcodec copy -acodec copy -shortest "${final_video_file_path}"

To všetko zatiaľ nespôsobuje žiadne problémy, ale jamyslíte si, že môže byť dôležité vedieť, ako sa videá generujú. Môžem to všetko sledovať a získať platné video a zvuk - nájdete úplný zdrojový kód tejto prvej časti tu.

Teraz som pridal funkciu, ktorá je schopná generovať „celé videá“ obsahujúce názov a rôzne množstvo predtým vygenerovaných „častí videa“ pomocou tohto príkazu:

ffmpeg -f concat -i "${video_list_path}" -filter_complex "${filter_string} concat=n=${input_file_counter}:v=1:a=1 [v] [a]" -map "[v]" -map "[a]" "${full_video_path}"

Ale niečo s tým nie je v poriadku a dostanem túto chybu:

Invalid file index 1 in filtergraph description [0:v:0] [1:v:0] [2:v:0] [2:a:0] [3:v:0] [4:v:0] [4:a:0] [5:v:0] [6:v:0] [6:a:0] [7:v:0] concat=n=8:v=1:a=1 [v] [a].

Úplný výstup je:

ffmpeg version N-77213-g7c1c453 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 4.9.2 (Raspbian 4.9.2-10)
configuration: --enable-shared --enable-gpl --prefix=/usr --enable-nonfree --enable-libmp3lame --enable-libfaac --enable-libx264 --enable-version3 --disable-mmx
libavutil      55. 10.100 / 55. 10.100
libavcodec     57. 17.100 / 57. 17.100
libavformat    57. 20.100 / 57. 20.100
libavdevice    57.  0.100 / 57.  0.100
libavfilter     6. 20.100 /  6. 20.100
libswscale      4.  0.100 /  4.  0.100
libswresample   2.  0.101 /  2.  0.101
libpostproc    54.  0.100 / 54.  0.100
[mov,mp4,m4a,3gp,3g2,mj2 @ 0xc2e900] Auto-inserting h264_mp4toannexb bitstream filter
Input #0, concat, from "/usr/sleeptalk/records-rendered/3enguzpuu2gw0ogk8wkko/videos.txt":
Duration: N/A, start: 0.000000, bitrate: 61 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1920x1080, 58 kb/s, 30 fps, 30 tbr, 15360 tbn, 60 tbc
Metadata:
handler_name    : VideoHandler
Stream #0:1(und): Audio: aac (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 2 kb/s
Metadata:
handler_name    : SoundHandler
Invalid file index 1 in filtergraph description [0:v:0] [1:v:0] [2:v:0] [2:a:0] [3:v:0] [4:v:0] [4:a:0] [5:v:0] [6:v:0] [6:a:0] [7:v:0] concat=n=8:v=1:a=1 [v] [a].

Napísal som tiež skúšobný prípad, aby ste ho mohli reprodukovať na svojom miestnom počítači. Stiahnite si súbory z mojej schránky, Nájdete tiež úplný skript, ktorý vykresľuje „posledný ťah“ tu.

Bolo by skvelé získať nápad, mali by sme sa snažiť tento problém vyriešiť posledné dva dni.

odpovede:

2 pre odpoveď č. 1

Používate konuxový demuxer aj koncatkový filter. Preskočte tento, pretože

a) je to zbytočné a

b) Neverím, že demuxer indukuje všetky vstupné súbory ako samostatné vstupy, takže indexy mimo 0 Nedáva to zmysel. Filtre concat tiež potrebujú rovnaký počet tokov na vstupný súbor a ich priradenie vstupu musí byť párové, t.j. [0:v:0] [0:a:0] [1:v:0] [1:a:0] [2:v:0] [2:a:0]....

Namiesto toho použite

ffmpeg -f concat -i "${video_list_textfile}" -c copy "${full_video_path}"

kde ${video_list_textfile} je textový súbor formulára

file "file1.mp4"
file "file2.mp4"
file "file3.mp4"
...