Mam raczej proste potrzeby edycji - muszę wyciąć niektóre filmy, może wstawić między nimi PNG i dołączyć do tych filmów (nie potrzebuję przejść, efektów itp.). Zasadniczo pitivi
zrobiłbym to, co chcę - poza tym, że używam AVI 640x480 30 fps z aparatu i jak tylko wrzucę kilka minut tego rodzaju materiału, pitivi
zaczyna się zawieszać na podglądzie, a zatem staje się bezużyteczny.
Zacząłem więc szukać narzędzia wiersza polecenia dla systemu Linux; Chyba tylko ffmpeg
( linia poleceń - Używanie ffmpeg do cięcia wideo - Super Użytkownik ) i mplayer
( Sam - Edycja pliku wideo z mencoderem pod linuksem ) są jak dotąd kandydatami, ale nie mogę znaleźć przykładów zastosowania, które mam na myśli.
Zasadniczo wyobrażam sobie, że istnieje koder i narzędzia odtwarzacza (takie jak ffmpeg
vs ffplay
; lub mencoder
vs mplayer
) - takie, że na początek sekwencja edycji może być określona bezpośrednio w wierszu polecenia, najlepiej z rozdzielczością ramki - pseudokod wyglądałby następująco:
videnctool -compose --file=vid1.avi --start=00:00:30:12 --end=00:01:45:00 --file=vid2.avi --start=00:05:00:00 --end=00:07:12:25 --file=mypicture.png --duration=00:00:02:00 --file=vid3.avi --start=00:02:00:00 --end=00:02:45:10 --output=editedvid.avi
... lub może mieć plik tekstowy „listy odtwarzania”, taki jak:
vid1.avi 00:00:30:12 00:01:45:00
vid2.avi 00:05:00:00 00:07:12:25
mypicture.png - 00:00:02:00
vid3.avi 00:02:00:00 00:02:45:10
... więc można to nazwać
videnctool -compose --playlist=playlist.txt --output=editedvid.avi
Chodzi o to, że wszystkie filmy są w tym samym formacie - umożliwienie narzędzia aby uniknąć transkodowanie, i po prostu zrobić „raw copy” zamiast (jak w mencoder
„s skopiować kodek:" -oac copy -ovc copy
„) - lub w braku tego, nieskompresowane audio / wideo byłoby OK (choć zjadłoby trochę miejsca). W przypadku obrazu nieruchomego narzędzie użyłoby kodowania ustawionego przez pliki wideo.
Chodzi o to, że do tej pory widzę to mencoder
i ffmpeg
mogę operować na pojedynczych plikach; np. wyciąć pojedynczą sekcję z jednego pliku lub połączyć pliki ( mencoder
ma również Edycję list decyzyjnych (EDL) , których można użyć do wycinania z dokładnością do ramki - dzięki czemu można zdefiniować wiele regionów wycinania, ale ponownie przypisuje się je do jednego pliku ). Co oznacza, że najpierw muszę wyciąć elementy z poszczególnych plików (z których każdy wymagałby własnego pliku tymczasowego na dysku), a następnie połączyć je w końcowy plik wideo.
Wyobrażam sobie wtedy, że istnieje odpowiednie narzędzie odtwarzacza, które może odczytać ten sam format opcji / plik listy odtwarzania z wiersza poleceń co narzędzie do kodowania - z wyjątkiem tego, że nie wygeneruje pliku wyjściowego, ale zamiast tego odtworzy wideo; np. w pseudokodzie:
vidplaytool --playlist=playlist.txt --start=00:01:14 --end=00:03:13
... i, biorąc pod uwagę nie ma wystarczającej ilości pamięci, byłoby wygenerować podgląd niskiej rozdzielczości wideo w pamięci RAM i odtworzyć go w oknie, jednocześnie oferując pewną ograniczoną interakcję (jak mplayer
„s skrótów klawiaturowych na odtwarzanie, pauza, przewijanie do tyłu, krok ramie ). Oczywiście wyobrażam sobie, że czasy rozpoczęcia i zakończenia odnoszą się do całej listy odtwarzania i zawierają na liście dowolny plik, który może znaleźć się w tym regionie.
Tak więc końcowym wynikiem tego wszystkiego byłoby: działanie wiersza poleceń; żadnych plików tymczasowych podczas edycji - a także żadnych plików tymczasowych (ani transkodowania) podczas renderowania końcowego wyniku ... co, moim zdaniem, byłoby fajne.
Tak więc, chociaż uważam, że wszystkie powyższe mogą być nieco rozciągnięte - czy istnieje coś, co przybliżałoby opisany powyżej przepływ pracy?
źródło
mkvmerge
, upewnię się, że to sprawdzę .. Pozdrawiam!Odpowiedzi:
Tak jest. Spróbuj użyć aplikacji o nazwie „Stop”. Zobacz dokumentację tutaj:
https://www.mltframework.org/docs/melt/
Jeśli używasz dystrybucji wywodzącej się z Debiana:
źródło
brew install mlt
Ok, ponieważ nie mogę znaleźć dużo informacji na temat
melt
korzystania z wiersza poleceń, oto kilka uwag .. (a następnie zobacz tę odpowiedź Używanie podstawiania procesów w celu oszukania programów oczekujących plików, z określonymi rozszerzeniami jako argumentem? - Wymiana stosu Unix i Linux dla skryptu przykład przezbash
)Na początek - jest pakiet Ubuntu / Debian dla
melt
(Mam Ubuntu 11.04 z MLT melt 0.6.2); link podany przez @Ielton jest dla Wiki „Media Lovin 'Toolkit” (MLT), którymelt
jest częścią (ale takżeopenshot
ikdenlive
). Oto link do plików tekstowych dokumentacji z ich git: mltframework.org/mlt.git/tree - docs / ; zwróć uwagę, że wiki ma stronę o BuildScripts .Na razie największym (jedynym) problemem, jaki mam z tym, jest to, że nie mogę znaleźć sposobu na eksport nieskompresowanej kompozycji wideo (jako
png
ramki lub jakiś nieskompresowany format wideo).Po pierwsze, w wierszu poleceń
melt
możesz sterować odtwarzaniem poprzez klatki; na przykład, aby „utworzyć” 15-ramkowy biały blank i wyświetlić go za pomocą wbudowanegomelt
odtwarzacza, użyjPodczas przeglądania za pomocą
melt
pojawi się także informacja wiersza poleceństderr
dla wbudowanego odtwarzacza:Po zakończeniu
melt
odtwarzania nie zakończy się - powinieneś więc wpisać,q
aby wyjść.Należy zauważyć, że są tak zwani „producenci” i „konsumenci”
melt
. Jeśli nic nie zostanie określone, wówczas domyślnym „konsumentem” jest okno SDL (Simple DirectMedia Layer) odtwarzające wideo; więc powyższe polecenie jest takie samo jak:Dlatego jeśli chcemy zapisać
melt
wyświetlane dane, powinniśmy zmienić konsumenta na coś, co będzie obsługiwać format pliku. Aby uzyskać listę konsumentów:libdv
Wyjście DV wola konsumentów sformatowane dane bezpośredniostdout
, tak aby zapisać plik wideo do.dv
pliku chcesz zrobić:Zauważ, że spośród wymienionych klientów jedynym formatem, który wypróbowałem, który można również otworzyć w innej aplikacji jest
libdv
(użyłemvlc
jako innej aplikacji); może to jednak nie powieść się w przypadku innego rodzaju transkodowania ( np. jeśli zamiast pustego miejsca spróbuję przekonwertować fragment.flv
kodu z pliku, powstały plik .dv otworzy się i odtworzyvlc
, ale jest uszkodzony ).Teraz część do edycji ; w zasadzie można podać serię sekcji nazwa-pliku / wejście / wyjście bezpośrednio w wierszu poleceń; powiedzmy, że masz plik,
video.avi
- wtedy możesz zrobić:lub nieco lepiej sformatowany:
Oznacza to, że
video.avi
z ramki 30 do ramki 79 będzie odtwarzany; następnie 15-ramka pusta; a następnie ponownievideo.avi
sekwencja od ramki 30 do ramki 79.Aby wykorzystać obrazy (powiedzmy
.png
) w kompozycji do edycji wideo:Należy pamiętać, że dla
test.png
,in=
parametr nie musi być 0 - jednak obraz zostanie wyświetlony naout
-in
czas; w takim przypadku najłatwiej byłoby po prostuin=0
całkowicie pominąć parametr.Dobrą rzeczą jest to, że sekwencję edycji można zapisać - lub jak
melt
to się nazywa, serializować - do pliku; Uwaga: istnieją dwa sposoby serializacji: „prosty” lub XML. Na przykład, aby zapisać powyższe polecenie jako „prosty” plik serializowany, możemy po prostu dodać-serialise [filename]
przełącznik do polecenia:Teraz
file.melt
zawiera:Pozornie ten „prosty” serializowany format pliku nie zawiera znaku „komentującego” - jeśli spróbuję dodać
# comment
wiersz „ ”,melt
narzeka: „ Nie udało się załadować„ # komentarza ” ” (ale poza tym wydaje się, że takie wiersz jest ignorowany, a odtwarzanie i tak jest kontynuowane)..melt
Wydaje się, że „ ” jest rozszerzeniem, któremelt
rozpoznaje zwykły plik serializowany.Teraz, aby odtworzyć ten zserializowany plik, możemy w zasadzie po prostu wywołać
melt file.melt
- jednak bardziej kompletna linia poleceń to:... co oznaczałoby: użyj
melt_file
„producenta”, aby otworzyćfile.melt
i renderować jego ramki w „konsumentu”sdl
(oknie).Zauważ, że mam doświadczenie, że (powiedzmy)
.flv
filmy odtwarzane są bez problemu w wierszu poleceń - powodują jednak błąd segmentacji, gdy są określone wfile.melt
pliku zserializowanym!.dv
wyprodukowane przezmelt
siebie filmy wydają się działać dobrze wfile.melt
...Serializację typu XML można osiągnąć za pomocą
-consumer xml:
przełącznika ( zamiast-serialise
) - więc powyższy przykład byłby teraz:Aby „odtworzyć” nowo wygenerowany
file.mlt
plik XML, można teraz zrobić bezpośredniomelt file.mlt
- lub bardziej kompletnym wierszem poleceń byłoby:... co oznaczałoby: użyj
xml
„producenta” ( uwaga, wcześniej był konsumentem ), aby otworzyćfile.mlt
i renderować swoje ramki na „konsumentu”sdl
(okno).Zauważ, że w tym przypadku zauważyłem, że te same
.flv
filmy, które spowodowały segfault z prostym plikiem serializacji - działają dobrze z plikiem serializacji XML!W takim przypadku wynikowy
file.mlt
plik XML ma o wiele więcej ustawień, takich jak rozdzielczość, liczba klatek na sekundę, informacje o kodekach itp. - ale trudniej jest pracować bezpośrednio w edytorze tekstu:źródło
Rozwiązanie ffmpeg tego problemu wygląda mniej więcej tak:
Używa nazwanych potoków, więc nie ma potrzeby tworzenia plików tymczasowych na dysku i pozwala na cięcie fragmentów klipów wideo i dodawanie obrazów.
Ten przykład wykorzystuje czas 30–60 pierwszego wejścia, a następnie dodaje pierwszą minutę drugiego wejścia, następnie wstawia plik obrazu, a następnie cały trzeci film.
Kod usunięty z:
Strona konkatenacji ffmpeg: https://trac.ffmpeg.org/wiki/Concatenate
strona superużytkownika Używanie ffmpeg do cięcia wideo
strona superużytkownika https://video.stackexchange.com/questions/12105/add-an-image-in-front-of-video-using-ffmpeg
źródło
npm
go zainstalować), więc pomyślałem, że wspomnę o tymJa również szukałem takiego narzędzia i wydaje się, że stop jest narzędziem do tego zadania, jednak dokumentacji nie można zrozumieć / brakuje. Możesz wykonać prawie dowolną kombinację edycji. Miałem trochę materiału z kamery akcji ... dźwięk był jednak bezużyteczny. Połączyłem wideo (h264), dodałem 60 klatek i zastąpiłem dźwięk ścieżką dźwiękową, używając:
Możesz przeczytać więcej na ten temat tutaj . Główna strona jest tutaj .
źródło