내 의도는 비디오의 특정 시간에 페이드 효과가 있는 이미지 오버레이를 적용하고 단일 명령으로 비디오에 배경 오디오를 적용하는 것입니다. 동영상 길이도 15초로 제한됩니다.
현재 2개의 명령을 통해 이를 달성할 수 있으며, 그 결과 2개의 출력이 생성됩니다. 이 2개의 명령을 어떻게 병합할 수 있습니까?
첫 번째 명령
ffmpeg -i video.mp4 -loop 1 -i image.png -ss 00:00:00 -t 00:00:15 -filter_complex "[1]format=yuva420p,fade=in:st=12:d=0.5:alpha=1[i]; [0][i]overlay=main_w/2-overlay_w/2-0+0:main_h/2-overlay_h/2-0+0:shortest=1" incomplete.mp4
두 번째 명령
ffmpeg -i audio.mp3 -i incomplete.mp4 -shortest finalVideo.mp4
이는 두 명령을 단일 명령으로 병합하려는 시도이지만 이제 비디오는 더 이상 15초로 제한되지 않으며 여러 mp4 비디오로 테스트한 후 배경 오디오는 소수의 비디오에만 적용됩니다.
ffmpeg -i video.mp4 -loop 1 -i image.png -ss 00:00:00 -t 00:00:15 -i audio.mp3 -shortest -filter_complex "[1]format=yuva420p,fade=in:st=12:d=0.5:alpha=1[i]; [0][i]overlay=main_w/2-overlay_w/2-0+0:main_h/2-overlay_h/2-0+0:shortest=1" finalVideo.mp4
답변1
사용
ffmpeg -ss 00:00:00 -t 00:00:15 -i video.mp4 -loop 1 -i image.png -i audio.mp3
-filter_complex "[1]format=yuva420p,fade=in:st=12:d=0.5:alpha=1[i];
[0][i]overlay=main_w/2-overlay_w/2:main_h/2-overlay_h/2:shortest=1[v]"
-map "[v]" -map 2:a -shortest incomplete.mp4
ffmpeg에서는 옵션 배치가 중요합니다. 입력 전의 모든 옵션은 해당 입력에만 적용됩니다. 시도한 결합 명령에서 시간 지정 이후에 오디오를 입력하여 오디오 입력에만 특정되도록 합니다.
FFmpeg는 매핑 시스템을 사용하여 출력에 포함할 스트림을 결정합니다. 맵 할당이 명시적으로 설정되지 않은 경우 기본 매핑은 입력 중에서 하나의 오디오를 선택합니다. 일부 MP4에 MP3보다 우선순위가 높은 오디오 스트림이 있는 것 같습니다. 명시적인 할당을 사용하면 그런 일이 발생하지 않습니다.