ffmpeg 오디오를 추가하지만 비디오 길이는 동일하게 유지 (가장 짧지 않음) 파일의 길이가되도록 확장합니다. 오디오 파일이 비디오보다

ffmpeg를 사용하여 비디오 파일에 오디오를 추가하고 있습니다.

ffmpeg -i videofile.mp4 -i audiofile.wav output.mp4

그러나이 방법은 출력 비디오 파일이 비디오보다 긴 경우 오디오 파일의 길이가되도록 확장합니다. 오디오 파일이 비디오보다 짧은 경우 -shortest를 사용하면 비디오 파일이 짧아집니다. ffmpeg에게 출력 비디오의 길이를 입력 비디오의 길이로 유지하도록 지시하는 플래그가 있습니까?



답변

비디오가 더 길면 -filter_complex 옵션과 apad 필터 옵션을 사용하여 마지막에 침묵으로 오디오를 제거하여 원하는 목표를 달성 할 수 있다고 생각합니다. 당신의 명령은 다음과 같습니다.

ffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -shortest output.mp4

이것은 원하는 오디오가 audiofile.wav의 첫 번째 스트림에 있다고 가정하고 [A : B] 구문은 A 번째 입력에서 B 번째 스트림을 가져 오라고 말합니다 (둘 다 0으로 시작하므로 [1 : 0]은 두 번째 입력의 첫 번째 스트림 또는 위의 audiofile.wav).

세부 정보 :
https://www.ffmpeg.org/ffmpeg-filters.html#Examples-68


답변

  • 비디오 길이가 오디오 길이보다 짧은 경우 -shortest원하는 것입니다.
  • 비디오 길이가 오디오 길이보다 길면 원하는 플래그가 전혀 없습니다.

이 결정을 자동화 할 플래그가 없습니다.

편집하다

@deadcode의 답변에서 영감을 얻어, 다시 자동화 할 의향이 있다면 “자동화 할 플래그 없음”은 물론 사실 이 apad아니라는 것을 분명히해야합니다.

그러나 재 인코딩을 피하려면 (즉 -c:v copy) 답이 의미합니다.

ffconcat디먹 서를 사용하는 해결 방법이 있지만 약간의 작업이 필요합니다.

  • 오디오 파일과 정확히 같은 형식 으로 무음이 포함 된 파일을 만듭니다 ( “silence.wav”)
  • concat 파일 “audio.ffconcat”를 작성하십시오 (오디오 길이가 길어야하는 묵음 라인 수).

.

file 'audiofile.wav'
file 'silence.wav'
file 'silence.wav'
...
file 'silence.wav'
  • 운영 ffmpeg -i videofile.mp4 -f concat -i audio.ffconcat -c:v copy output.mp4

apad필터 그래프없이 필터를 합성하여 재 인코딩없이 mux를 허용합니다.


답변

비디오 파일의 길이를 알고 있다면 다음을 사용하여 달성 할 수 있습니다.

ffmpeg -i videofile.mp4 -i audiofile.wav -t 43 output.mp4

여기서 43은 비디오 파일의 길이 (초)입니다.


답변