성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
[정성태] 저렇게 조각 코드 말고, 실제로 재현이 되는 예제 프로젝트를 압...
[정성태] Modules 창(Ctrl+Shift+U)을 띄워서, 해당 Op...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>ffmpeg.exe를 사용해 비디오 파일을 MPEG1 포맷으로 변경하는 방법</h1> <p> 동영상 포맷 정보를 알기 위해 (<a target='tab' href='https://www.sysnet.pe.kr/2/0/12900'>vcpkg로도 쉽게 빌드해 생성할 수 있는</a>) ffprobe를 실행해 보면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > D:\video_sample> <span style='color: blue; font-weight: bold'>ffprobe mp4video_sample2.mp4</span> ffprobe version 4.4.1 Copyright (c) 2007-2021 the FFmpeg developers built with Microsoft (R) C/C++ Optimizing Compiler Version 19.30.30705 for x64 configuration: ...[생략]... --extra-cflags='-DHAVE_UNISTD_H=0' --extra-cflags=-MD --extra-cxxflags=-MD libavutil 56. 70.100 / 56. 70.100 libavcodec 58.134.100 / 58.134.100 libavformat 58. 76.100 / 58. 76.100 libavdevice 58. 13.100 / 58. 13.100 libavfilter 7.110.100 / 7.110.100 libswscale 5. 9.100 / 5. 9.100 libswresample 3. 9.100 / 3. 9.100 libpostproc 55. 9.100 / 55. 9.100 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'mp4video_sample2.mp4': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf58.45.100 Duration: 00:04:00.98, start: 0.000000, bitrate: 1263 kb/s Stream #0:0(und): <span style='color: blue; font-weight: bold'>Video: h264</span> (High) (avc1 / 0x31637661), yuv420p(tv, bt709), 1920x1080 [SAR 1:1 DAR 16:9], 1130 kb/s, 23.98 fps, 23.98 tbr, 24k tbn, 47.95 tbc (default) Metadata: handler_name : ISO Media file produced by Google Inc. vendor_id : [0][0][0][0] Stream #0:1(eng): <span style='color: blue; font-weight: bold'>Audio: aac</span> (LC) (mp4a / 0x6134706D), 44100 Hz, stereo, fltp, 127 kb/s (default) Metadata: handler_name : ISO Media file produced by Google Inc. vendor_id : [0][0][0][0] </pre> <br /> MPEG4 포맷이군요. ^^ 이것을 MPEG1로 변환하기 위해 ffmpeg를 다음과 같이 사용할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > D:\video_sample> <span style='color: blue; font-weight: bold'>ffmpeg -i mp4video_sample2.mp4 mp4video_sample2_loss.mpeg</span> </pre> <br /> 생성된 mpeg 파일을 ffprobe로 확인해 보면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > D:\video_sample> <span style='color: blue; font-weight: bold'>ffprobe mp4video_sample2_loss.mpeg</span> ffprobe version 4.4.1 Copyright (c) 2007-2021 the FFmpeg developers built with Microsoft (R) C/C++ Optimizing Compiler Version 19.30.30705 for x64 configuration: ...[생략]... --extra-cflags='-DHAVE_UNISTD_H=0' --extra-cflags=-MD --extra-cxxflags=-MD libavutil 56. 70.100 / 56. 70.100 libavcodec 58.134.100 / 58.134.100 libavformat 58. 76.100 / 58. 76.100 libavdevice 58. 13.100 / 58. 13.100 libavfilter 7.110.100 / 7.110.100 libswscale 5. 9.100 / 5. 9.100 libswresample 3. 9.100 / 3. 9.100 libpostproc 55. 9.100 / 55. 9.100 Input #0, mpeg, from 'mp4video_sample2_loss.mpeg': Duration: 00:04:00.95, start: 0.530800, bitrate: 1433 kb/s Stream #0:0[0x1e0]: <span style='color: blue; font-weight: bold'>Video: mpeg1video</span>, yuv420p(tv), 1920x1080 [SAR 1:1 DAR 16:9], 104857 kb/s, 23.98 fps, 23.98 tbr, 90k tbn, 23.98 tbc Stream #0:1[0x1c0]: Audio: mp2, 44100 Hz, stereo, s16p, 384 kb/s </pre> <br /> "mpeg1video"라는 문자열이 있으니 잘 변환이 되었습니다. 그런데, 저렇게 변환을 하고 나서 보면 영상 이미지가 제법 깨져 있습니다. 원래의 원본 영상과,<br /> <br /> (사진은 <a target='_tab' href='https://www.youtube.com/watch?v=xjWYhCac0XU'>유튜브 영상 "디에이드"의 "안다은" 님</a>이고 사용을 허락받고 올립니다.)<br /> <img alt='ffmpeg_mpeg1video_1.png' src='/SysWebRes/bbs/ffmpeg_mpeg1video_1.png' /><br /> <br /> 변환된 영상을 보면 확연한 차이가 있습니다.<br /> <br /> <img alt='ffmpeg_mpeg1video_2.png' src='/SysWebRes/bbs/ffmpeg_mpeg1video_2.png' /><br /> <br /> 왜냐하면, ffmpeg에 <a target='tab' href='https://trac.ffmpeg.org/wiki/Encode/MPEG-4'>qscale 값</a>(범위: 1 ~ 31)을 설정하지 않았기 때문입니다. 이 값을 0으로 주면 손실 변환을 하지 않아 원본 이미지와 유사한 해상도가 나옵니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > D:\video_sample> <span style='color: blue; font-weight: bold'>ffmpeg -i mp4video_sample2.mp4 -q:v 0 mp4video_sample2_q0.mpeg</span> ffmpeg version 4.3.2-2021-02-27-full_build-www.gyan.dev Copyright (c) 2000-2021 the FFmpeg developers built with gcc 10.2.0 (Rev6, Built by MSYS2 project) configuration: ...[생략]... --enable-libsoxr --enable-chromaprint libavutil 56. 51.100 / 56. 51.100 libavcodec 58. 91.100 / 58. 91.100 libavformat 58. 45.100 / 58. 45.100 libavdevice 58. 10.100 / 58. 10.100 libavfilter 7. 85.100 / 7. 85.100 libswscale 5. 7.100 / 5. 7.100 libswresample 3. 7.100 / 3. 7.100 libpostproc 55. 7.100 / 55. 7.100 ...[생략]... Output #0, mpeg, to 'mp4video_sample2_q0.mpeg': Metadata: major_brand : isom minor_version : 512 compatible_brands: isomiso2avc1mp41 encoder : Lavf58.45.100 Stream #0:0(und): Video: mpeg1video, yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 23.98 fps, 90k tbn, 23.98 tbc (default) Metadata: handler_name : ISO Media file produced by Google Inc. encoder : Lavc58.91.100 mpeg1video Side data: cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A Stream #0:1(eng): Audio: mp2, 44100 Hz, stereo, s16, 384 kb/s (default) Metadata: handler_name : ISO Media file produced by Google Inc. encoder : Lavc58.91.100 mp2 [mpeg1video @ 0000020611e6f040] warning, clipping 1 dct coefficients to -255..255 Last message repeated 18 times [mpeg1video @ 0000020611e6f040] warning, clipping 1 dct coefficients to -255..255speed=32.6x Last message repeated 17 times [mpeg1video @ 0000020611e6f040] warning, clipping 1 dct coefficients to -255..255speed=36.2x Last message repeated 13 times [mpeg1video @ 0000020611e6f040] warning, clipping 1 dct coefficients to -255..255speed=36.5x Last message repeated 10 times [mpeg1video @ 0000020611e6f040] warning, clipping 1 dct coefficients to -255..255speed=36.1x Last message repeated 23 times [mpeg1video @ 0000020611e6f040] warning, clipping 1 dct coefficients to -255..255speed=36.9x Last message repeated 11 times [mpeg1video @ 0000020611e6f040] warning, clipping 1 dct coefficients to -255..255speed=37.2x Last message repeated 14 times [mpeg1video @ 0000020611e6f040] warning, clipping 1 dct coefficients to -255..255speed=37.2x Last message repeated 10 times [mpeg1video @ 0000020611e6f040] warning, clipping 1 dct coefficients to -255..255speed=37.6x Last message repeated 10 times [mpeg1video @ 0000020611e6f040] warning, clipping 1 dct coefficients to -255..255speed=37.6x Last message repeated 36 times [mpeg1video @ 0000020611e6f040] warning, clipping 1 dct coefficients to -255..255speed=37.4x Last message repeated 25 times [mpeg1video @ 0000020611e6f040] warning, clipping 1 dct coefficients to -255..255speed=37.5x Last message repeated 10 times frame= 5776 fps=912 q=0.0 Lsize= 161002kB time=00:04:00.96 bitrate=5473.4kbits/s speed= 38x video:148950kB audio:11296kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 0.471775% </pre> <br /> 그런데, 이번에는 마지막 즈음에 경고 메시지들이 뜹니다. 아직, 영상 처리에 초보라 이런 경고들의 원인을 모르겠군요. ^^ (혹시 아시는 분은 덧글 부탁드립니다.)<br /> <br /> 그나저나, 원본 영상이 37MB이고 qscale을 주지 않았을 때는 (손실 압축의 경우) 42MB MPEG1Video가 나왔지만, qscale을 0으로 준 경우에는 160MB 크기의 MPEG1Video 파일이 생성되었습니다. "-q:v 3" 정도로는 113MB에 영상 품질의 차이가 거의 없는 걸로 봐서, 아마도 크기를 감안해 적절한 수치를 찾아내면 될 듯합니다. 바꿔 말하면, 그 정도로 h2464의 압축 효율이 높다는 거겠죠!<br /> <br /> <hr style='width: 50%' /><br /> <br /> 참고로, 동영상을 구할 수 있는 Sample Videos라는 사이트가 있군요. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Sample Videos ; <a target='tab' href='https://sample-videos.com/'>https://sample-videos.com/</a> </pre> <br /> <hr style='width: 50%' /><br /> <br /> (2022-04-16 업데이트) 무손실 변환으로 video와 audio에 대해 단순히 복사하라는 명령을 다음과 같이 실행할 수 있습니다.<br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // How to Convert AVI to MP4 using FFmpeg? Lossy and Lossless Conversion // ; <a target='tab' href='https://ottverse.com/ffmpeg-convert-avi-to-mp4-lossless/'>https://ottverse.com/ffmpeg-convert-avi-to-mp4-lossless/</a> ffmpeg -i test.avi -c:v copy -c:a copy -y output.mp4 (또는,) ffmpeg -i test.avi -codec copy output.mp4 </pre> <br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1945
(왼쪽의 숫자를 입력해야 합니다.)