처음에 x 초의 자동 오디오를 삽입하려는 AC3 5.1 오디오 파일이 있습니다. 이것은 비디오 멀티플렉싱과 관련이 없으므로 비디오 스트림과 함께 제공되는 오디오 스트림에서만 작동하는 것처럼 보이기 때문에 그 오프셋은 쓸모가 없습니다. 나는 ffmpeg로 이것을 달성하고 싶습니다. 어떤 아이디어?
처음에 x 초의 자동 오디오를 삽입하려는 AC3 5.1 오디오 파일이 있습니다. 이것은 비디오 멀티플렉싱과 관련이 없으므로 비디오 스트림과 함께 제공되는 오디오 스트림에서만 작동하는 것처럼 보이기 때문에 그 오프셋은 쓸모가 없습니다. 나는 ffmpeg로 이것을 달성하고 싶습니다. 어떤 아이디어?
답변:
메인 세그먼트를 다시 인코딩하지 않으려면 concat demuxer를 사용하십시오. 이 방법은 시작 또는 끝에 침묵을 추가하는 데 효과적입니다.
사용 anullsrc 자동 오디오를 만들 오디오 소스 필터를. 기본 오디오 파일의 형식, 채널 레이아웃 및 샘플 속도와 일치해야합니다. 5.1 채널, 48000 Hz 샘플 레이트, 1 초 무음 AC3 오디오 파일을 만드는 예 (이 형식은 문제의 형식 임) :
ffmpeg -f lavfi -i anullsrc=channel_layout=5.1:sample_rate=48000 -t 1 silence.ac3
이제 input.txt
연결할 파일이 나열된 텍스트 파일 을 작성하십시오.
file 'silent.ac3'
file 'main.ac3'
마지막에 침묵을 원한다면에서 파일의 순서를 바꾸십시오 input.txt
.
이제 concat demuxer를 사용하여 파일을 연결할 수 있습니다 .
ffmpeg -f concat -i input.txt -codec copy output.ac3
하나의 명령으로 모든 작업을 수행하거나 입력과 다른 형식으로 출력하려는 경우 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
1s
1 초 동안 사용할 수 있습니다 .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를 기다려야합니다.
[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"
adelay
또한 all
adelay=delays=1000:all=1