오디오 파일을 연결하고이를 ogg로 출력하는 Linux 명령


10

여러 오디오 파일을 연결하여 하나의 ogg (및 / 또는 mp3)로 출력하려면 어떤 명령 줄 도구가 필요합니까?

Ogg에 연결하고 출력 할 수있는 완벽한 명령을 제공 할 수 있다면 정말 대단 할 것입니다.

편집하다 : 입력 파일 (현재 나의 경우)은 wma 형식이지만, 이상적으로는 널리 사용되는 다양한 형식을 지원할 수있을 정도로 유연해야합니다.

편집 2 : 명확히하기 위해 병합하고 싶지 않습니다. 모든 wma 내가 특정 디렉토리에, 난 단지 하나에 2 또는 3 파일을 연결 싶어요.

제안 된 솔루션을 주셔서 감사합니다,하지만 그들은 임시 파일을 만들 필요가있는 것 같습니다, 가능하다면, 나는 그것을 피하고 싶습니다.


1
어떤 입력 형식을 지원해야합니까?
John T

원칙적으로이 모든 명령을 조정하여 서로간에 파이프 출력을 할 수 있습니다. 그러나 실제적으로 작동 시키려면 통증이 있고, 실패하면 디버그하는 것이 어렵습니다. 임시 파일을 수행하는 실용적인 방법이 있습니다. 내가 선호하는 방법은 mktemp -d /tmp/descriptive_name.XXXXXX 유익한 이름으로 임시 디렉토리를 만든 다음 거기에있는 모든 임시 파일을 처리 한 후 rm -r 나중에 임시 디렉토리를 처리합니다.
Ryan Thompson

그냥 명확히하기 위해, 모든 wma는 디렉토리에 있습니다. *.wma 커맨드 라인에서, 더 작은 목록을 위해 확실히 작동 할 것이다. 1.wma 2.wma 3.wma 4.wma (예 : 5.wma, 6.wma, 7.wma 제외)를 사용하는 대신 *.wma ).
quack quixote

답변:


9

여기 내 제안 : 사용 mplayer와 oggenc 명명 된 파이프로 연결됩니다.

  • 용도 mplayer 오디오를 디코딩합니다. 그것은 다양한 재생할 수 있습니다 오디오 (및 비디오) 포맷을 지원하며 재생할 수 있습니다. 여러 파일.

  • 용도 oggenc 오디오를 오그 보비스.

  • 에 대한 필요성을 없애기 위해 임시 파일, 명명 된 파이프 인코더간에 데이터를 전송하는 방법 및 디코더.

스크립트에 넣기 :

#!/bin/sh
# Usage: ./combine2ogg destination.ogg source1.wma source2.wma ...
# Requires: mplayer, oggenc
destination="$1"
shift
readpipe="$destination.tmpr"
writepipe="$destination.tmpw"
mkfifo "$readpipe"
mkfifo "$writepipe"
cat "$writepipe" > "$readpipe" &
mplayer -really-quiet -slave -nolirc -vc null -vo null -ao "pcm:fast:file=$writepipe" "$@" &
oggenc --quiet -o "$destination" "$readpipe"
rm -f "$readpipe"
rm -f "$writepipe"

설명 :

  1. 첫 번째 명령 줄 매개 변수에서 대상 파일 이름을 가져옵니다.
  2. 첫 번째 명령 줄 매개 변수를 제거하고 소스 파일 이름 만 남겨 둡니다.
  3. oggenc에서 읽을 파이프의 이름을 작성하십시오.
  4. 쓸 mplayer 파이프 이름을 만듭니다.
  5. 파이프를 만듭니다.
  6. cat을 사용하여 연속적으로 읽기 파이프에 쓰기 파이프를 덤프하십시오 (이렇게하면 mplayer가 종료 될 수있는 문제를 예방하는 데 도움이되지만 oggenc는 이것이 발생했을 때 oggenc이 완료되었다고 생각하지 않게됩니다)
  7. mplayer를 사용하여 소스 파일의 오디오를 디코딩합니다. 옵션 -really-quiet -slave -nolirc 메시지를 비활성화하고 키보드 나 리모컨을 읽지 않도록해야합니다. 옵션 -vc null -vo null 비디오 인코딩 및 출력을 비활성화 할 수 있습니까? 그만큼 -ao 옵션은 WAV 형식의 오디오를 명명 된 쓰기 파이프로 출력하도록 지시합니다.
  8. 이전 명령이 실행되는 동안 oggenc를 사용하여 명명 된 읽기 파이프에서 Ogg로 동시에 인코딩합니다.
  9. 명명 된 파이프를 제거하십시오.

개선해야 할 일 : 명령 중 하나가 실패하면 스크립트를 일찍 종료합니다 (사용 set -e ),하지만 여전히 제대로 FIFO를 청소 (필요한 신호를 함정).


유일한 "약간"문제는 파일 사이에 클릭 소리가 있다는 것입니다.
hasen

@ 하센 j : 완벽하길 원한다면 Audacity 또는 다른 wav 편집기를 사용하십시오. 클릭의 출처를 추적 할 수 있다면 가해자에 대한보고를 제출할 수 있습니다.
quack quixote

15

SoX 컴파일 된 라이브러리에 따라 많은 수의 오디오 형식을 처리 할 수 ​​있으며 간단한 명령 줄을 사용하여 파일을 연결할 수 있습니다

sox file1.wav file2.mp3 file3.flac outfile.ogg

원본 오디오 파일의 채널 수가 모두 같은 경우에만 작동하는 것으로 알고 있지만 테스트하지는 않았습니다.

내가 아는 한, SoX는 .wma 파일을 전혀 지원하지 않으므로 적어도 다음과 같은 파일을 변환해야합니다. ffmpeg 첫 번째는 어쩔 수없는 일입니다.

ffmpeg -i infile.wma outfile.wav

2
AFAIK sox는 모든 파일이 동일한 채널, 샘플 속도, & amp; 비트 깊이; 그렇지 않으면 모두를 지정해야합니다. 나는 그것이 너무 인코딩 된 형식을 디코딩 것이라고 몰랐지만, 나는 그것을 따라 잡고 있지 않은 것 같아요.
quack quixote

3

나는 사용할 것이다. ffmpeg . wma를 ogg vorbis로 변환하려면 다음을 시도하십시오.

ffmpeg -i sample.wma -acodec vorbis -aq 100 sample.ogg

또는 mp3 :

ffmpeg -i input.wma -acodec libmp3lame output.mp3

당신은 절름발이 mp3 변환에 설치되어 있어야합니다. sudo apt-get install lame libmp3lame0

Cat, then doen't는 잘 작동하는 것처럼 보입니다. 웹에서 많은 참고 자료를 찾을 수 있지만 cat *.wma | ffmpeg -i - -acodec ... - 내 컴퓨터에서는 작동하지 않습니다. 첫 번째 파일 만 처리됩니다. ffmpeg에 '복사'코덱이 있지만 큰 차이는 없습니다.

먼저 ffmpeg로 변환 한 다음 cat * .ogg & gt; output.ogg 나를 위해 일했다.


1
좋아, 연결은 어떨까요?
hasen

미안합니다! 추가 사항을 읽으십시오.
DaveParillo

ffmpeg에 대해서는 그렇게 확신하지 못합니다 ... WMA 디코더로서 훌륭하지만 OGG 인코더에 대한 많은 불만이 있습니다. 적어도 사용하다 -acodec libvorbis 인코더에 내장 된 ffmpeg를 피하십시오.
quack quixote

3

오디오 파일을 연결하고 코드 변환하려면 다음과 같이 수행 할 작업입니다.

  1. 입력 오디오 파일을 WAV / PCM 데이터로 디코딩하고,
  2. WAV 연결,
  3. 오디오 코덱 파일을 출력하기 위해 WAV를 인코딩합니다.

이 단계에서의 처리는 WAV 데이터에 대한 연결을 수행합니다. WAV 데이터는 가장 쉽게 처리 할 수 ​​있고 손실이 가장 적은 항목입니다. 그리고 어쨌든 코드 변환을 원할 경우, 프로세스의 어딘가에서 WAV로 디코딩해야합니다. 뿐만 아니라 그것을 활용할 수 있습니다.

다음은 내가 권장하는 단계입니다. 우리는 ffmpeg 디코딩을 위해, sox 연결을 위해, 그리고 oggenc 인코딩 용. 어떤 단계를 위해 다른 도구를 사용할 수 있습니다. mencoder 그리고 다른 것들은 디코더로 잘 작동하며, Ogg를 인코딩하는 모든 도구는 인코더로 사용할 수 있습니다. 비록 당신이 더 나은 도구를 찾기 란 어렵지 만, sox 연결을 위해.

  1. find *.wma -exec ffmpeg -i {} outfile.{}.wav \;
    (이 실행 ffmpeg -i infile.wma outfile.infile.wma 현재 디렉토리의 각 WMA 파일에 있음)

  2. sox outfile* all.wav
    (노트 outfile 우리가 단계 1에서 출력 파일을 준 것과 동일한 접두어입니다.

  3. oggenc all.wav all.ogg 여기에 약간의 품질 설정이 필요할 것입니다. 그러나 이것은 상당한 품질 기본값을 제공합니다. 나는 내가 좋아하는 결과를 얻지 못했다. ffmpeg,하지만 당신은 그것을 선호 할 수 있습니다, 그래서 아래 ffmpeg 예제를 포함 시켰습니다.

참고로 sox 명령은 모든 WAV 파일이 같은 형식이 아니라면 제대로 작동하지 않습니다. 예를 들어 22kHz와 44.1kHz 중 일부는 sox 커맨드 라인 스위치를 통해, 그리고 출력 형식을 지정하십시오. sox 연결 단계. 당신 할 수 있었다 아마도 1 단계에서 원시 PCM 형식으로 출력하고 cat 2 단계에서 동일한 형식으로되어있는 경우에만 작동하며 예상되는 형식과 관련하여 디코더와 인코더 모두에 대해 매우 구체적이어야합니다.

ffmpeg로 인코딩하기 : 그물 주변의 많은 게시물은 ffmpeg의 내장 Vorbis 인코더가 그리 좋지 않다고 불평합니다. 사용중인 버전이 libvorbis 지원으로 빌드 된 경우 -acodec libvorbis 대신에. 샘플 명령 줄 :

ffmpeg -i all.wav -acodec libvorbis -ac 2 -ab 128k all.ogg

1

.ogg 파일에는 작동하지 않지만 mp3 포장 여러 개의 .mp3 파일을 하나의 파일로 연결할 수 있습니다. 명령 줄에서 다음과 같이 할 수 있습니다.

for FILE in *.wma; do ffmpeg -i "$FILE" "`basename "$FILE" .wma`.mp3"; done
mp3wrap bigmp3_MP3WRAP.mp3 *.mp3

이렇게하면 ffmpeg 모든 .wma 파일을 .mp3로 변환 한 다음 모든 .mp3 파일을 단일 파일로 병합합니다.


1

Mencoder는 임시 파일없이 비디오를 연결하고 코드 변환 할 수 있습니다. 여기에 사소한 예가있다. ). aconvert라는 어딘가에 떠 다니는 스크립트가 있는데, mencoder를 오디오 전용으로 사용하도록 (보통은 거절)합니다. 이 두 가지가 결합 된 것은 귀하의 요구 사항을 충족시키는 것처럼 보입니다.

편집 : 나는 aconvert.sh를 발견했다. 불행히도 오디오 파일을 하나만 변환하도록 설계되었습니다. 하지만 어쨌든 코드를 사용하면 여러 오디오 파일을 변환하는 명령 행을 만드는 데 사용할 수 있습니다.

#!/bin/sh

# Author: Jonas Jermann
# Description: A hack to allow mencoder to encode from an audio only file

if [ "$1" = "" ]; then
    echo "Usage: $0 <\"input file\"> <\"output file\"> <\"options\">"
    exit 0
fi

options=${3:-"-oac mp3lame"}

mencoder -demuxer rawvideo -rawvideo w=1:h=1 -ovc copy -of rawaudio -endpos `mplayer -identify $1 -frames 0 2>&1 | grep ID_LENGTH | cut -d "=" -f 2` -audiofile $1 -o $2 $options $1


0

내 대답을 던질 줄 알았는데. 이것은 아마도 가장 우아한 방법은 아니지만, 내가 원했던 것입니다.

1 단계 : ogg로 변환 (사용 mplayer, pacplruby모두 무료 데비안 저장소에서 구할 수 있습니다. 나는)

#! /usr/bin/ruby

ARGV.each do |target|
  file_ext = target.scan(/\.\w*$/)[0]
  name = target.sub(file_ext, "")

  `mplayer -novideo -ao pcm:file="tmp.wav" "#{target}"`
  `pacpl -t ogg --outfile "#{name}" tmp.wav`
  `rm tmp.wav`
end

2 단계 : ogg 파일 연결

cat *ogg > big-file.ogg
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.