# 1 Aby jednocześnie zanikać wejście / wyjście audio:
ffmpeg -i clip.mp4 -vf 'fade=in:0:30,fade=out:960:30'
-af 'afade=in:st=0:d=1,afade=out:st=32:d=1'
-c:v libx264 -crf 22 -preset veryfast fadeInOut.mp4
Czasy Afade są w sekundach .
# 2 automatycznie? Nie. Ale zobacz obejście poniżej
Możesz najpierw uruchomić ffprobe, aby uzyskać czas trwania.
ffprobe -i clip.mp4 -show_entries stream=codec_type,duration -of compact=p=0:nk=1
Otrzymasz coś takiego:
video|13.556000
audio|13.816000
Następnie możesz użyć powyższego, aby umieścić swoje przejścia. Te czasy są w sekundach.
Obejście
ffmpeg -i clip.mp4 -sseof -1 -copyts -i clip.mp4 -filter_complex
"[1]fade=out:0:30[t];[0][t]overlay,fade=in:0:30[v];
anullsrc,atrim=0:2[at];[0][at]acrossfade=d=1,afade=d=1[a]"
-map "[v]" -map "[a]" -c:v libx264 -crf 22 -preset veryfast -shortest fadeInOut.mp4
FFmpeg ma sseof
opcję, która pozwala szukać danych od końca. Możemy to wykorzystać do osiągnięcia naszego celu. Tak więc podajemy dane wejściowe dwa razy, a drugi raz pochłaniamy tylko ostatnią sekundę. Mówimy FFmpeg, aby zachował znaczniki czasu, aby ffmpeg zachował pozycję czasową tej części ogona.
Stosujemy wyciszenie do tego ogona, a następnie nakładamy wynik na pełne wejście. Ponieważ są one tym samym plikiem multimedialnym, pierwszy plan całkowicie pokrywa tło, a ponieważ copyts
został zastosowany, nakładka zachodzi na odpowiednią identyczną ramkę na wejściu tła.
W przypadku dźwięku tworzymy pusty dźwięk fikcyjny o czasie trwania 2 sekundy, a następnie zastosujemy płynne przejście dźwięku z dźwięku głównego do tego dźwięku fikcyjnego. Ponieważ drugi dźwięk jest pusty, jest to w rzeczywistości wyciszenie głównego wejścia. -shortest
Dodaje opuścić części manekina i dźwięku po nastąpiło Przenikanie.
-report
dodanym i udostępnij raport.To straszny hack, ale może to zadziałać, jeśli wszystko, co chcesz zrobić, to wyciszanie / zanikanie dźwięku, ale nie wiem dokładnie, jak długo trwa klip:
[edytuj 2019-07-24: Pamiętaj, że to rozwiązanie nie jest dobre dla rozwiązań przesyłania strumieniowego, ponieważ wymaga przetworzenia pełnej ścieżki przed przesłaniem pierwszego bajtu]
inną opcją jest użycie
acrossfade
cichej ścieżki:źródło
Odpowiedź na pytanie 2 brzmi: TAK! Szukałem tej samej funkcjonalności i ostatecznie napisałem skrypt bash, który prosi o czas trwania zanikania w kilka sekund i oblicza początkową ramkę dla wyciszenia:
Zanikanie wymaga ponownego kodowania, więc użycie niskiej
crf
wartości dlalibx264
daje wysokiej jakości ponowne kodowanie. Komentarze powinny wyjaśniać wszystko inne.źródło
automatically figure out the duration
używaffprobe
, który jest zainstalowany zffmpeg
. Kto powiedział coś o ograniczeniu liczby poleceń lub*nix
? Wygląda na to, że OP używa wersji UNIX. Nie.exe
wffmpeg
poleceniu. Ja sam używam,OS X
który jest zbudowany,UNIX
ale nie jestUNIX
.ffprobe
jest integralną częściąffmpeg
dystrybucji. Wybieracie gnidy, aby uratować twarz IMO.