№1 Для одночасного вимкнення аудіо введення / виводу:
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
Часи помирання в секундах .
№2 Автоматично? Ні. Але див. Вирішення нижче
Ви можете спочатку запустити ffprobe, щоб отримати тривалість.
ffprobe -i clip.mp4 -show_entries stream=codec_type,duration -of compact=p=0:nk=1
У вас вийде щось подібне:
video|13.556000
audio|13.816000
Потім ви можете скористатися вищесказаним, щоб розмістити свої завмирання. Ці часи в секундах.
Обхід
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 має sseof
опцію, яка дозволяє шукати вхід з кінця. Ми можемо використовувати це для досягнення своєї мети. Таким чином, ми вводимо дані двічі, вдруге вводячи лише останню секунду. Ми кажемо FFmpeg зберегти часові позначки, щоб ffmpeg зберігав тимчасове положення цієї хвостової частини.
До цього хвоста ми застосовуємо вицвітання, а потім накладаємо результат на повний вхід. Оскільки вони є тим самим медіа-файлом, передній план повністю охоплює фон, і оскільки він copyts
був застосований, накладання відбувається на відповідний ідентичний кадр у фоновому вході.
Для аудіо ми створюємо порожній фіктивний аудіо тривалістю 2 секунди, а потім застосовуємо аудіоперехрещення від основного звуку до цього манекена. Оскільки 2-е аудіо порожнє, це фактично є згасанням основного входу. -shortest
Додають , щоб залишити з частин фіктивного аудіо після того , як сталася склейка.