본문 바로가기

ffmpeg를 이용하여 일괄적으로 mp4 + m4a 머지하기 for f in *.mp4; do ffmpeg -i "$f" -i "${f%.*}.m4a" -c copy "merge/${f%.*}-merged.mp4"; done 라인을 풀면 아래와 같음 ----------- 아 래 --------------- for f in *.mp4; do ffmpeg -i "$f" -i "${f%.*}.m4a" -c copy "merge/${f%.*}-merged.mp4"; done --------- 해 석 -------- 현재 폴더에 있는 모든 mp4 와 이름이 같은 m4a를 머지하여 merge/ 폴더아래에 (같은 이름-merged.mp4)로 결과를 저장 더보기
vscode 에서 default encoding을 특정 폴더만 임의(euckr)로 지정하기 해당 폴더에 .vscode 폴더를 만들고 그 아래 setting.json파일을 만든 다음 아래와 같이 설정하라 "files.encoding": "euckr", --- 아래는 샘플 --- { "files.encoding": "euckr", "editor.fontFamily": "맑은고딕", "editor.fontSize": 15, "debug.console.fontSize": 15, "terminal.integrated.fontSize": 15 } 더보기
websocket 프로토콜 분석 웹소켓은 핸드세이크 과정이 있다 클라이언트의 요청 GET /ws HTTP/1.1 Host: 127.0.0.1 Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Version: 13 서버의 응답 HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: m1gerlQGO93j1SfFew3lhvMXqro= =============== 핸드세이크 설명: 클라이언트가 http 연결을 하며 필수로 보내야 하는 4개의 헤더가 있다 1. Connection, 2. Connection헤더 .. 더보기
C++ pthread pool management library GitHUB -> https://github.com/woenho/pthread_pool GitHub - woenho/pthread_pool: 사용자 프로그램과 온전히 독립적으로 동작할 수 있는 완전체 모습의 pthre 사용자 프로그램과 온전히 독립적으로 동작할 수 있는 완전체 모습의 pthread pool 관리라이브러리를 추구했다 ExampleThreadPool.cpp 라는 예제 프로그램을 이용하여 라이브러리의 작동모습을 볼 수 있 github.com 주요기능: 지정된 수 만큼의 워크 쓰레드를 생성하도록 하는 API 제공 (실행할 외부함수를 인자로 받아야함) 명시적으로 쓰레드풀을 종료 할 수 있는 api를 제공 (큐 처리 후 종료 | 큐 버리고 종료) 프로세스의 쓰레드 요청 내역을 큐에 넣는 api를 제.. 더보기
GIT 복구, 복원 또는 되돌리는 작업 정리 흐미 ... 프로그램 소스파일 캐릭터셋 잘못 지정해서 commit & push 하는 바람에 복구하는라 애 먹었다. 비상발생시 처리는 잊은지 오래된 이야긴데.... 어쨌든 살리는 방법 시험해서 정리한 다음 로깅해 둔다. 기억력이 현저히 떨어져 가는 나를 포함해서 잘 모르시는 분이 보면 도움이 될꺼다. 혹시 잘 아시는 분 있으면 가르침을 바란다. 이거 하느라고도 애썼다 ... ---- 작업기록 그래프로 본것 --- 목표: 커밋 아이디가 5b9153f 인 녀석을 그 전인 0b062be 로 복원하려는 것이다 ----------------------- /* GIT 복원시험 */ ----------------------- 1. HEAD 변경이력 확인 { $ git reflog 5b9153f (HEAD -> mast.. 더보기
linux find 명령 예 find /var/spool/asterisk/monitor/ -iname “*wav” -type f -exec sh -c ‘ffmpeg -i {} -y -vn -aq 40 -ac 1 `echo {} | sed “s/.wav/.mp4/g”` && rm {}’ \; -name : 이름입력 -iname: 패턴 입력 -> -name과 비슷하지만 일치는 대소 문자를 구분하지 않습니다. 예를 들어 패턴 'fo *' 및 'F??' 파일 이름 'Foo ', 'FOO', 'foo ', 'fOo'등 -type : f ( regular file), d (directory) -exec : 다음 명령을 실행하라.... {} : find로 검색된 결과값 하나하나 \; : -exec 명령문의 종료로 앞글자 '}' 와 반드시 띄워 .. 더보기
sprintf() with '*' sprintf( "%.*s", txt.len, txt.s); '*'의 의미는 길이이다 sprintf( "%.20s", txt.s); 라면 txt.s 문자열의 길이가 몇이던 20바이트 길이를 printf 하는것이나 이 길이가 가변일 때는? 그렇다 바로 '*'을 사용하는 것이다. 유용한 프로그램밍이 되길 바라며... 오늘도 술퍼! 더보기
Asterisk CallFlow -. 301번전화(192.168.1.84) 교환기1(192.168.1.75) 교환기2(192.168.1.99) 901번전화(192.168.1.91) ============================================================================================== (오류를 수신하면 실패처리. 여기서는 성공흐름만 기술) (화살표는 위 각 피어의 연결순에에 따른 흐름 방향으로 한다) (#참조1) ---- 참고로 최초의 invite 전문을 기술한다 (SDP 구간의 IP, PORT, codec를 잘 살펴보길 바란다) { INVITE sip:901@192.168.1.75;user=phone SIP/2.0 Via: SIP/2.0/UDP 192.168.1.84:5.. 더보기