FFmpeg를 통해 오디오에 1 초의 침묵 추가


14

처음에 x 초의 자동 오디오를 삽입하려는 AC3 5.1 오디오 파일이 있습니다. 이것은 비디오 멀티플렉싱과 관련이 없으므로 비디오 스트림과 함께 제공되는 오디오 스트림에서만 작동하는 것처럼 보이기 때문에 그 오프셋은 쓸모가 없습니다. 나는 ffmpeg로 이것을 달성하고 싶습니다. 어떤 아이디어?


ffmpeg는 동일한 코덱과 동일한 속도로 추가하거나 참여합니까?
Psycogeek

나는 ... 가정 @Psycogeek
Makaveli84

그리고 정확히 동일한 코덱 속도와 채널의 자동 오디오 파일을 생성 할 수 있습니까? ffmpeg.org/ffmpeg-filters.html#Examples-34 ? 나 자신은 GUI 방법을 사용하지만 매개 변수가 모두 동일한 한 요청이 매우 쉽고 빠릅니다. 여기에 Mov에 추가하는 것이 표시됩니다. stackoverflow.com/questions/12368151/… 답변
Psycogeek

Ardor를 사용하여 원하는 것을 추가하십시오. 효과를 원한다면 송아지 플러그인을 다운로드하십시오.
대시 보드

답변:


23

Concat demuxer 사용 (시작 및 / 또는 종료에 침묵 추가)

메인 세그먼트를 다시 인코딩하지 않으려면 concat demuxer를 사용하십시오. 이 방법은 시작 또는 끝에 침묵을 추가하는 데 효과적입니다.

  1. 사용 anullsrc 자동 오디오를 만들 오디오 소스 필터를. 기본 오디오 파일의 형식, 채널 레이아웃 및 샘플 속도와 일치해야합니다. 5.1 채널, 48000 Hz 샘플 레이트, 1 초 무음 AC3 오디오 파일을 만드는 예 (이 형식은 문제의 형식 임) :

    ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 1 silence.ac3
    
  2. 이제 input.txt연결할 파일이 나열된 텍스트 파일 을 작성하십시오.

    file 'silent.ac3'
    file 'main.ac3'
    

    마지막에 침묵을 원한다면에서 파일의 순서를 바꾸십시오 input.txt.

  3. 이제 concat demuxer를 사용하여 파일을 연결할 수 있습니다 .

    ffmpeg -f concat -i input.txt -codec copy output.ac3
    

concat 필터 사용 (시작 및 / 또는 끝에 침묵 추가)

하나의 명령으로 모든 작업을 수행하거나 입력과 다른 형식으로 출력하려는 ​​경우 concat 필터를 사용하십시오 (이 방법은 어쨌든 다시 인코딩되므로). 이 방법은 시작 또는 끝 또는 둘 다에 침묵을 추가하는 데 사용됩니다.

스테레오, 44100Hz 샘플 레이트 입력의 시작 부분에 1 초의 침묵을 추가하는 예 :

ffmpeg -f lavfi -t 1 -i anullsrc=channel_layout=stereo:sample_rate=44100 -i audio.oga -filter_complex "[0:a][1:a]concat=n=2:v=0:a=1" output.m4a
  • concat demuxer는 필터링하지 않고 필터링하면 다시 인코딩됩니다.

  • anullsrc에서는 채널 레이아웃과 입력 샘플 속도를 일치시키는 것이 좋습니다.

  • 끝에 침묵을 추가하려면 대신 concat 필터에 주어진 입력 순서를 전환하십시오 [1:a][0:a]concat=n=2:v=0:a=1.


지연 필터 사용 (처음에 침묵 추가)

하나의 명령으로 모든 작업을 수행하거나 입력과 다른 형식으로 출력하려는 ​​경우 adelay 오디오 필터를 사용하십시오 (이 방법은 어쨌든 다시 인코딩되므로). 이것은 파일의 시작 부분에 침묵을 추가하기 위해서만 작동합니다.

이 예제는 스테레오 입력의 시작 부분에 1 초의 침묵을 추가합니다.

ffmpeg -i input.flac -af "adelay=1000|1000" output.opus
  • concat demuxer는 필터링하지 않고 필터링하면 다시 인코딩됩니다.
  • 값은 밀리 초입니다. 최신 버전의 사용자 (현재 git master 또는 FFmpeg 4.1 이상)는 1s1 초 동안 사용할 수 있습니다 .
  • 각 채널마다 자체 지연이 필요합니다. 예를 들어 모노 입력은을 사용 adelay=1000하고 5.1 입력은을 사용 adelay=1000|1000|1000|1000|1000|1000합니다.

패드 필터 사용 (끝에 무음 추가)

하나의 명령으로 모든 작업을 수행하거나 입력과 다른 형식으로 출력하려는 ​​경우 apad 오디오 필터를 사용하십시오 (이 방법은 어쨌든 다시 인코딩되므로). 이것은 파일의 끝에 침묵을 추가하기 위해서만 작동합니다.

이 예제는 끝에 1 초의 침묵을 추가합니다.

ffmpeg -i input.wav -af "apad=pad_dur=1" output.m4a
  • concat demuxer는 필터링하지 않고 필터링하면 다시 인코딩됩니다.

  • pad_dur옵션은 FFmpeg 4.1 릴리스 이후에 추가되었으므로 git master 브랜치에서 최근 빌드를 사용하거나 FFmpeg 4.2를 기다려야합니다.


5
[Parsed_aevalsrc_0 @ 000000000195fec0] This syntax is deprecated. Use '|' to sep arate the list items.새로운 구문은 다음과 같습니다-i "aevalsrc=0|0|0|0|0|0:d=1"
Steven Penny

한 번에 여러 파일에 대해이 작업을 수행 할 수 있습니까?
Aaron Franke

@AaronFranke 그렇습니다. 그러나 ffmpeg 자체에는 그러한 기능이 없습니다. 명령을 반복하려면 쉘 또는 스크립팅 언어를 사용해야합니다. OS를 알 수 없으므로 턴키 솔루션을 제공 할 수 없지만 ffmpeg로 전체 디렉토리를 어떻게 변환합니까?를 참조하십시오 . 일반적인 정보 (필수적으로 복잡하고 비효율적이므로 수락 된 답변을 건너 뜁니다).
llogan

adelay또한 alladelay=delays=1000:all=1
Jurijs Kovzels
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.