ffmpeg 오디오를 추가하지만 비디오 길이는 동일하게 유지 (가장 짧지 않음)


12

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

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

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


정답을 선택하십시오. 유일한 올바른 것은 @Zurechtweiser의 것입니다.
— Roel Van de Paar

답변:


13

비디오가 더 길면 -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


당신은 것을 언급해야 -filter_complex옵션 세력이 재 인코딩 - 그것을 실행할 수 예되어 ffmpeg -i videofile.mp4 -i audiofile.wav -c:v copy output.mp4있지만ffmpeg -i videofile.mp4 -i audiofile.wav -filter_complex " [1:0] apad " -c:v copy -shortest output.mp4
— 오이겐 RIECK

이것은 요청 된 것과 정 반대입니다. OP는 오디오가 종료되면 비디오를 종료하도록 요청합니다. 오디오가 비디오보다 짧으면 오디오 침묵을 추가하는 것이 제공됩니다. 이 답변은 잘못되었습니다.
— Roel Van de Paar

OP가 요청한 것과 반대되는 것은 아니다. OP는 오디오 트랙의 길이에 관계없이 출력 비디오가 입력 비디오의 길이가되기를 원합니다. 내 대답은 입력 비디오가 오디오 파일보다 긴 상황을 해결합니다. OP에는 입력 비디오가 오디오 파일보다 짧은 경우 -shortest를 사용하는 솔루션이 이미 있습니다.
— deadcode

12
  • 비디오 길이가 오디오 길이보다 짧은 경우 -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를 허용합니다.


@RoelVandePaar 내가 말한 것처럼 : 비디오 길이가 오디오 길이보다 짧으면 -shortest재 인코딩없이 침묵을 추가하려면이 해결 방법을 사용하십시오.
— Eugen Rieck

맞아요, 리뷰를 놓쳤습니다. 입력을 제거했습니다. 자유롭게하세요.
— Roel Van de Paar

6

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

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

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


저자 질문은 비디오가 끝나지 않은 상태에서 오디오 파일을 반복하려고합니다. 이것이 효과가 있습니까?
— Rafael Sanches

@RafaelSanches 아니, 그는하지 않습니다.
— Zurechtweiser

저자는 오디오를 반복하고 싶지 않습니다. 이 답변은 OP가 요청한 것을 수행하는 유일한 올바른 답변입니다. 입력 비디오가 끝나면 비디오를 종료합니다.
— Roel Van de Paar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.