MKV 파일에서 오디오 스트림을 제거하는 방법은 무엇입니까? 제거하려고했습니다. 내가 원하는 이유는 Windows Media

MKV (Matroska) 파일에서 불필요한 오디오 스트림을 제거하려고했습니다. 내가 원하는 이유는 Windows Media Player에서 원하는 스트림을 수동으로 선택하지 않아도되기 때문입니다.

입력 파일은 다음과 같은 ffmpeg 정보를 제공합니다.

Stream #0.0: Video: mpeg4, yuv420p, 704x396 [PAR 1:1 DAR 16:9], 29.98 tbr, 1k tbn, 29.98 tbc
Stream #0.1(eng): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.2(jpn): Audio: aac, 24000 Hz, 5.1, s16
Stream #0.3(eng): Subtitle: 0x0000
Stream #0.4(eng): Subtitle: 0x0000
Stream #0.5: Attachment: 0x0000
Stream #0.6: Attachment: 0x0000

스트림 0, 1 및 3 (하위)을 원하므로 ffmpeg 명령은 다음과 같습니다.

ffmpeg -i input.mkv -map 0:0 -map 0:1 -map 0:3 -vcodec copy -acodec libmp3lame -newsubtitle test.mkv

이상하게도 오류가 발생합니다.

At least one output file must be specified

자막 제거 :

ffmpeg -i input.mkv -map 0:0 -map 0:1 -vcodec copy -acodec libmp3lame test.mkv

나에게 이것을 준다 :

Number of stream maps must match number of output streams

“지도”옵션이 어떻게 작동하는지 이해하지 못하는 것 같습니다. 누군가 나를 알아낼 수 있도록 도와 줄까요?



답변

다시 인코딩하지 않고 스트림을 제거하기 만하면 MKVtoolnix 패키지를 사용하여이 작업을 수행 할 수 있습니다 ( videohelp.com 페이지 참조 ).

도움이 될만한 몇 가지 GUI가 있습니다 (videohelp 링크에서 확인하십시오). 정확한 mkvmerge명령 줄이 무엇인지 확실하지 않지만 다음과 같이 작동한다고 생각합니다.

# first, get audio track info so we know which one to keep
mkvmerge -i input.mkv
File 'input.mkv': container: Matroska
Track ID 1: video (V_MPEG4/ISO/AVC)
Track ID 2: audio (A_AAC)
Track ID 3: audio (A_AAC)        <----------- for example, let's keep this one
Track ID 4: audio (A_AAC)

mkvmerge -o output.mkv --atracks 3 input.mkv

해야 트릭을 (미안, 테스트를위한 편리한 파일이없는) 않습니다. 이 --atracks옵션은 나열된 오디오 트랙 새 파일 mkvmerge로 복사하도록 지시 합니다. 4가 아닌 2 & 3을 유지하려면을 사용할 수 있습니다 .--atracks 2,3

mkvmerge제목 설정, 오디오 동기화 지연 추가 등을위한 기타 옵션이 많이 있으므로 자세한 내용 은 맨 페이지확인 하십시오.


답변

-f지정된 형식을 강제로 시도하십시오 .

ffmpeg -i input.mkv -map 0 : 0 -map 0 : 1 -map 0 : 3 -vcodec copy -acodec libmp3lame -newsubtitle -f mkv test.mkv

답변

여기에는 두 가지 별도의 문제가 있습니다.

  1. 첫 번째 명령 행에서 매개 변수 순서가 잘못되었을 수 있습니다. -newaudio출력 파일 이름 다음에 스위치가 끝에 있어야 한다고 생각합니다 .

  2. 두 번째 명령 줄인 “자막 제거”는 입력 파일에 자막이 있으므로 -sn스위치를 사용하여 자막 을 제거해야합니다. 그렇지 않으면 FFmpeg가 -map목록에 지정된 것을 하나 이상 원하는 것 같습니다 .


답변

첫 번째 명령에서 test.mkv가 출력 파일임을 지정하지 않았습니다. 해당 부분을 변경 ... -c copy test.mkv하거나 코덱을 지정 해야하는 것처럼 보입니다 ... -c:s copy test.mkv.

그리고 그 -newsubtitle깃발이 거기서 무엇을 하고 있는지 확실하지 않습니다 . 그러나 추가하려는 자막 파일이 있으면 다른 입력 플래그를 수행 할 수 있어야합니다 -i input.srt. 이 링크 를 참조하십시오 .

두 번째 명령에서는 비디오 스트림을 매핑하고 복사하려고하는 것 같습니다. 따라서 -vcodec copy지침을 제거하려고 시도하면 작동합니다. 🙂