나는 또한 Linux 솔루션을 찾고 있습니다.별도의 질문)
확장자가 .ts
. 첫 번째 파일의 일부를 제거하고 두 번째 파일을 분할한 다음 첫 번째 파일을 두 번째 파일의 첫 번째(분할) 부분과 병합해야 합니다.
둘 다 동일한 특성을 가지고 있습니다.
Format : MPEG-TS
File size : 3.16 GiB
Duration : 1h 39mn
Overall bit rate mode : Variable
Overall bit rate : 4 527 Kbps
Video
ID : 720 (0x2D0)
Menu ID : 6181 (0x1825)
Format : AVC
Format/Info : Advanced Video Codec
Format profile : High@L4
Format settings, CABAC : Yes
Format settings, ReFrames : 4 frames
Codec ID : 27
Duration : 1h 39mn
Width : 1 440 pixels
Height : 1 080 pixels
Display aspect ratio : 16:9
Frame rate : 25.000 fps
Color space : YUV
Chroma subsampling : 4:2:0
Bit depth : 8 bits
Scan type : MBAFF
또한 여러 오디오 트랙과 자막이 포함되어 있습니다.
파일을 트랜스코딩하지 않고 처리하고 싶습니다. 적어도 시작 부분 등은 제거할 수 있어야 합니다.
FFMPEG
:
ffmpeg -i source.mts
다음을 제공합니다:
Input #0, mpegts, from 'source1.mts':
Duration: 01:40:00.76, start: 2995.511878, bitrate: 4526 kb/s
Program 6181
Stream #0:0[0x46](fra,fra): Subtitle: dvb_teletext ([6][0][0][0] / 0x0006)
Stream #0:1[0x2d0]: Video: h264 (High) ([27][0][0][0] / 0x001B), yuv420p, 1440x1080 [SAR 4:3 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc
Stream #0:2[0x2da](fra): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 73 kb/s
Stream #0:3[0x2db](qaa): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 67 kb/s
Stream #0:4[0x2dc](deu): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 49 kb/s
Stream #0:5[0x2dd](qad): Audio: aac (HE-AAC) ([15][0][0][0] / 0x000F), 48000 Hz, stereo, fltp, 57 kb/s
ffmpeg
내가 찾은 명령으로 크로스 플랫폼이기도 한 를 사용하면 매우 잘 수행할 수 있다고 생각합니다.여기 한 파일의 일부를 제거합니다.
ffmpeg -i InputFile -vcodec copy -acodec copy -ss 00:12:34.567 -t 00:34:56.789 OutputFile
Stream #0:2[0x2da](fra)
단, 입력에 4개의 오디오 트랙이 있어 첫 번째( ) 오디오만 사용된다는 점을 제외하면 작동합니다 . 내가 원하는 것은 모든 오디오이거나 세 번째( Stream #0:3[0x2db](qaa)
)입니다. 조정하는 방법?
ffmpeg
따라서 다음을 수행해야 합니다.
1. 첫 번째 파일의 시작 부분을 잘라냅니다. (1시간 40분 파일 중 처음 2분 부분을 제거합니다.)
2. 두 번째(1시간) 파일을 두 부분으로 분할합니다(3분 05초 후).
3. 두 번째 파일을 분할하여 얻은 3분 05분 부분을 첫 번째 파일 끝에 결합(추가)합니다.
내가 시도한 것:
Openshot: 트랜스코딩 없이는 처리할 수 없습니다.
Avidemux(Linux): 저장하려고 하면 다음과 같이 표시됩니다."MPEG와 호환되지 않습니다. 복사 코덱을 사용할 수 없습니다."
Windows의 Avidemux: 오디오가 동기화되지 않았습니다.
답변1
ffmpeg
모든 오디오 트랙을 유지하면서 를 사용하여 파일을 분할하고 결합하려면 어떻게 해야 합니까 ?
당신이 발견한 대로, 비트스트림 복사는 오직하나(오디오) 트랙에 따라스트림 사양 문서:
기본적으로
ffmpeg
입력 파일에 있는 각 유형(비디오, 오디오, 자막)의 스트림 하나만 포함하고 이를 각 출력 파일에 추가합니다. 다음 기준에 따라 각각의 "최고"를 선택합니다. 비디오의 경우 해상도가 가장 높은 스트림이고, 오디오의 경우 채널이 가장 많은 스트림이며, 자막의 경우 첫 번째 자막 스트림입니다. 동일한 유형의 여러 스트림이 균등하게 전송되는 경우 인덱스가 가장 낮은 스트림이 선택됩니다.
선택하려면모두오디오 트랙:
ffmpeg -i InputFile.ts-c copy -ss 00:12:34.567 -t 00:34:56.789 -map 0:v -map 0:a FirstFile.ts
선택하려면제삼오디오 트랙:
ffmpeg -i InputFile.ts -c copy -ss 00:12:34.567 -t 00:34:56.789 -map 0:v -map 0:a:2 FirstFile.ts
스트림 선택에 대한 자세한 내용과 다른 예를 볼 수 있습니다.고급 옵션문서 섹션 ffmpeg
.
또한 표현을 간결하게 하기 위해 -vcodec copy -acodec copy
원래 명령을 위와 같이 결합하겠습니다 .-c copy
나뉘다:
따라서 나중에 다시 결합하기 위해 분할 측면에서 두 파일에서 달성하려는 것과 결합합니다.
ffmpeg -i InputOne.ts -ss 00:02:00.0 -c copy -map 0:v -map 0:a OutputOne.ts
ffmpeg -i InputTwo.ts -c copy -t 00:03:05.0 -map 0:v -map 0:a OutputTwo.ts
당신에게 줄 것입니다 :
OutputOne.ts
, 이것이 전부입니다~ 후에첫 번째 입력 파일의 처음 2분OutputTwo.ts
, 이는첫 번째두 번째 입력 파일의 3분 5초
가입하다:
ffmpeg
다시 인코딩하지 않고 파일 연결을 지원합니다.연결 문서에 광범위하게 설명되어 있습니다..
결합할 파일 목록을 만듭니다(예 join.txt
: ).
file '/path/to/files/OutputOne.ts'
file '/path/to/files/OutputTwo.ts'
그러면 ffmpeg
명령에서 다음을 사용할 수 있습니다 concat demuxer
.
ffmpeg -f concat -i join.txt -c copy FinalOutput.ts
mpeg
전송 스트림( .ts
) 에 대해 작업하고 있으므로~해야 한다concat을 사용할 수 있습니다규약또한:
ffmpeg -i "concat:OutputOne.ts|OutputTwo.ts" -c copy -bsf:a aac_adtstoasc output.mp4
위에 링크된 연결 페이지의 예에 따라. 실험은 여러분에게 맡기겠습니다.
답변2
주요 답변을 기반으로 한 간단한 답변은 다음과 같습니다.
시작 지점 이후(끝까지) 데이터를 유지하려면 다음을 수행하세요.
ffmpeg -i INPUT -c copy -ss START_TIME -map 0 OUTPUT
두 시점 사이의 데이터를 유지하려면 다음을 수행하십시오.
ffmpeg -i INPUT -c copy -ss START_TIME -to END_TIME -map 0 OUTPUT
특정 시점 이후 특정 기간 동안 데이터를 보관하려면 다음을 수행하세요.
ffmpeg -i INPUT -c copy -ss START_TIME -t DURATION_TIME -map 0 OUTPUT
시작 후 특정 기간 동안 데이터를 유지하려면 다음을 수행하십시오.
ffmpeg -i INPUT -c copy -t DURATION_TIME -map 0 OUTPUT
특정 시점까지 데이터를 시작부터 유지하려면 다음을 수행하세요.
ffmpeg -i INPUT -c copy -to TIME_POINT -map 0 OUTPUT
TIME은 초 단위 또는 hh:mm:ss[.xxx] 단위의 숫자일 수 있습니다.
join.txt
파일을 결합하려면 콘텐츠가 포함된 파일을 생성하세요.
file 'path-to-INPUT1'
file 'path-to-INPUT2'
file...etc
그 다음에
ffmpeg -f concat -i join.txt OUTPUT
또는:
mpeg 파일(전송 파일 포함)을 결합하려면
ffmpeg -i "concat:INPUT-1|INPUT-2" -c copy -bsf:a aac_adtstoasc OUTPUT
GUI 솔루션으로 Avidemux를 시도했지만 결과가 좋지 않았습니다. Linux 솔루션을 검색할 때 이 댓글을 찾았습니다.여기가리키는Avidemux 야간:
"Avidemux를 사용해 볼 수 있지만 안정적인 버전은 아닙니다. "Wine"이 포함된 win32 버전(예, Windows용)을 사용해 보아야 합니다. 이 버전은 H.264를 지원하며 키프레임을 찾으려면 이중 화살표를 사용해야 합니다. not] 모든 곳에서 잘라내기("long gop" 때문에...) 그러나 이와 같은 모든 소프트웨어처럼 JUST CUTS를 수행할 수 있습니다. 그렇지 않으면 렌더링됩니다(전환, 효과 등의 경우). http://avidemux.org/nightly/win32/"
Linux/Wine에서 테스트했지만 Windows에서도 작동합니다.
파일을 결합하려면 다음을 사용하십시오.파일 열기첫 번째 파일을 추가한 다음파일 추가나머지를 위해.
저장하려면:파일 - 저장합니다.