오디오 파일의 마지막 x초 자르기

오디오 파일의 마지막 x초 자르기

오디오 파일이 여러 개 있는데 각 파일에서 마지막 1초를 제거해야 합니다. 오디오 파일의 길이는 임의입니다.

이를 수행하는 가장 좋은 도구/방법은 무엇입니까?

저는 ffmpeg에 어느 정도 익숙하지만 제가 아는 한 이 작업을 수행할 수 있는 직접적인 옵션은 없습니다(-ss 및 -to를 사용하여 시작 및 종료 시간을 제공해야 함).

답변1

우회 방법을 사용해야 합니다. 파일을 두 번 추출하고 두 번째 입력의 타임스탬프를 트리밍하려는 끝 부분의 기간만큼 오프셋합니다. 그런 다음 set을 사용하여 두 스트림을 다른 ffmpeg 인스턴스로 파이프합니다 -shortest. 두 번째 ffmpeg 인스턴스에서는 두 번째 입력의 스트림만 저장됩니다.

ffmpeg -i in.mp3 -itsoffset 1 -i in.mp3 -map 0:a:0 -map 1:a:0 -c copy -shortest -f nut - | ffmpeg -f nut -i - -c copy -map 0:1 out.mp3

답변2

당신은 그것을 사용할 수 있습니다미디어 정보지속 시간을 밀리초 단위로 가져온 다음 지속 시간 - 1로 전환합니다.

duration=$(mediainfo FILE.mp3 --Inform="Audio;%Duration%")
ffmpeg -to $(($duration / 1000 - 1)) -i FILE.mp3 -c copy FILE_NEW.mp3

답변3

이 사이트의 다른 질문에 대한 답변에서 영감을 받아 저도 뭔가를 만들 수 있었습니다. 명령은 옵션 find으로 전달될 수 있습니다.exec

ffmpeg -i FILE1.wma -ss 0 -to $(echo $(ffprobe -i FILE1.wma -show_entries format=duration -v quiet -of csv="p=0") - 1 | bc) -c copy FILE2.wma

중간 부분이 $(echo $(ffprobe -i FILE1.wma -show_entries format=duration -v quiet -of csv="p=0") - 1 | bc)필요한 기간을 먼저 가져옵니다. 파이프는 bc부동 형식으로 계산을 수행합니다. 그런 다음 해당 출력이 -to기본 명령 에 인수로 전달됩니다 .

이해를 돕기 위해 위의 긴 한 줄 명령을 분석해 보겠습니다.

    ffmpeg -i FILE1.wma -ss 0 -to
      $(echo 
        $(ffprobe -i FILE1.wma -show_entries format=duration -v quiet -of csv="p=0") 
        - 1 | bc
        )
    -c copy FILE2.wma

관련 정보