Fórum Ubuntu CZ/SK
Ostatní => Tipy a triky pro Linux => Téma založeno: JirkaZ 12 Února 2019, 14:24:14
-
Možná nesu dříví do lesa, ale potřeboval jsem narychlo spojit několik videí do jednoho a ověřil jsem přitom následující, zcela triviální postup s pomocí programu ffmpeg:
1) všechna videa nakopíruju do jednoho adresáře
2) změním názvy na souvislou vzrůstající číselnou řadu (např. v Krusaderu Soubor -> přejmenovat více položek a příslušné postupy). Změna názvu není nutná - jde o to, aby se videa ve výsledku správně časově seřadila, nejlépe vyzkoušet, případně prohlédnout soubor mylist.txt zmiňovaný dále.
3) příkazem (v konzoli otevřené v adresáři s videi - třeba v Krusaderu, když stojím v popisovaném adresáři, tak Nástroje -> Spustit zde terminál nebo rovnou tlačítkem F2):
printf "file '%s'\n" ./*.mp4 > mylist.txt
vytvořím seznam s názvem mylist.txt
4) příkazem (ve stejné, stále otevřené konzoli):
ffmpeg -f concat -safe 0 -i mylist.txt -c copy output.mp4
spojím všechna videa z adresáře a ze seznamu do jednoho s názvem output.mp4
Předpokladem je nainstalovaný program ffmpeg. Příklad je pro videa *.mp4 (nejčastěji z mobilu), ale funguje i pro jiné formáty. V příkazech je pak pochopitelně nutno změnit extenzi mp4
na jinou (aktuální). Videa musejí být ve stejném rozlišení a orientaci (opět typicky pro několik videí natočených v různých okamžicích stejným zařízením). Prostě když chci z jednotlivých záběrů udělat "film"...
Zdroj: https://trac.ffmpeg.org/wiki/Concatenate
Celá věc se pochopitelně dá udělat i v nějakém grafickém videoeditoru, ale když chci rychlý a jednoduchý postup, tak dva příkazy v konzoli (které by se dokonce zřejmě daly sloučit do jednoho) jsou bezkonkurenční.
-
Bez vytváření .txt seznamu
ls video1 video2 video3 | perl -ne 'print "file $_"' | ffmpeg -f concat -i - -c copy output.mp4
Kdo nemá/nechce ffmpeg instalovat, stačí stáhnout tento archiv
https://johnvansickle.com/ffmpeg/releases/ffmpeg-release-amd64-static.tar.xz
rozbalit a soubor ffmpeg a dát ho do složky s těmi videi.
-
Bez vytváření .txt seznamu
ls video1.mp4 video2.mp4 video3.mp4 | perl -ne 'print "file $_"' | ffmpeg -f concat -i - -c copy output.mp4
No to sice ano, ale když mám těch videí třeba 20 nebo víc, tak je trochu opruz do příkazu vypisovat všechny dílčí soubory. Tím spíš, když se každý jmenuje úplně jinak (typicky z mobilu je to kombinace data a času.extenze). A hvězdičková konvence tam nefunguje - nebo jo?
Hledal a našel jsem právě postup, který to automatizuje nezávisle na množství spojovaných souborů a není přitom třeba žádný skript apod. (protože takové způsoby taky jsou). No a ffmpeg má snad skoro každý, koho nějakým způsobem zajímá práce s videem (kromě toho i tak bývá součástí jiných programů z kategorie video)...