저는 동영상 편집에 대한 멍청한 놈 이니 우스꽝스러운 것을 요청하면 용서해주세요.
동영상 클립을 받고 있습니다. 셋톱 레코더 박스에서. 클립은 AVI 파일입니다.
Resolution: 1920 x 1080 Frames Per Second: 60 Video Format: ITU H.264 Audio Format: MPEG 1 Audio, Layer 3 (MP3)
해상도 및 FPS가 필요한 것 이상이므로 크기를 줄이기위한 명령을 실행하려고합니다.
ffmpeg -i highres.avi -r 30 -s 960x540 lowerres.avi
원하는 해상도, 프레임 속도 및 낮은 파일 크기를 제공하는 데 성공했지만 예상보다 품질이 저하되었습니다.
새 파일을 살펴본 결과 어떤 이유로 FFmpeg가 사용 된 형식을 변환했음을 발견했습니다.
Video Format: FFmpeg MPEG-4 Audio Format: MPEG 1 Audio, Layer 2
이유가 명확하지 않습니다. 입력 형식과 동일한 출력 형식을 사용하지 않습니다.이 명령을 사용하여 H.264를 강제로 사용하려고했습니다.
ffmpeg -i highres.avi -r 30 -s 960x540 -f h264 lowerresforceh264.avi
안타깝게도 실패했습니다. 다음 출력으로 :
ffmpeg version 0.7.3-4:0.7.3-0ubuntu0.11.10.1, Copyright (c) 2000-2011 the Libav developers built on Jan 4 2012 16:21:50 with gcc 4.6.1 configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --enable-shared --disable-static WARNING: library configuration mismatch avutil configuration: --extra-version="4:0.7.3ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avcodec configuration: --extra-version="4:0.7.3ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-libopenjpeg --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdirac --enable-libmp3lame --enable-librtmp --enable-libx264 --enable-libxvid --enable-libvo-aacenc --enable-version3 --enable-libvo-amrwbenc --enable-version3 --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avformat configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avdevice configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay avfilter configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay swscale configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay postproc configuration: --extra-version="4:0.7.3-0ubuntu0.11.10.1" --arch=i386 --prefix=/usr --enable-vdpau --enable-bzlib --enable-libgsm --enable-libschroedinger --enable-libspeex --enable-libtheora --enable-libvorbis --enable-pthreads --enable-zlib --enable-libvpx --enable-runtime-cpudetect --enable-vaapi --enable-gpl --enable-postproc --enable-swscale --enable-x11grab --enable-libdc1394 --shlibdir=/usr/lib/i686/cmov --cpu=i686 --enable-shared --disable-static --disable-ffmpeg --disable-ffplay libavutil 51. 7. 0 / 51. 7. 0 libavcodec 53. 6. 0 / 53. 6. 0 libavformat 53. 3. 0 / 53. 3. 0 libavdevice 53. 0. 0 / 53. 0. 0 libavfilter 2. 4. 0 / 2. 4. 0 libswscale 2. 0. 0 / 2. 0. 0 libpostproc 52. 0. 0 / 52. 0. 0 Input #0, avi, from "highres.avi": Metadata: comment : Quality_GOOD encoder : Lavf52.64.2 encoded_by : AverMedia_c281_1.7.2 Duration: 00:01:59.28, start: 0.000000, bitrate: 10263 kb/s Stream #0.0: Video: h264 (High), yuv420p, 1920x1080, 59.94 fps, 59.94 tbr, 59.94 tbn, 119.88 tbc Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s [buffer @ 0x8f438a0] w:1920 h:1080 pixfmt:yuv420p [scale @ 0x8f431e0] w:1920 h:1080 fmt:yuv420p -> w:960 h:540 fmt:yuv420p flags:0x4 [libx264 @ 0x8f0fb40] broken ffmpeg default settings detected [libx264 @ 0x8f0fb40] use an encoding preset (e.g. -vpre medium) [libx264 @ 0x8f0fb40] preset usage: -vpre <speed> -vpre <profile> [libx264 @ 0x8f0fb40] speed presets are listed in x264 --help [libx264 @ 0x8f0fb40] profile is optional; x264 defaults to high Output #0, h264, to "lowerresforceh264.avi": Stream #0.0: Video: libx264, yuv420p, 960x540, q=2-31, 200 kb/s, 90k tbn, 30 tbc Stream mapping: Stream #0.0 -> #0.0 Error while opening encoder for output stream #0.0 - maybe incorrect parameters such as bit_rate, rate, width or height
이 작업을 수행 할 수없는 이유를 모르겠습니다. “ffmpeg -formats”를 실행하면 h264가 사용할 수있는 것으로 나열되었습니다. 입력과 출력 모두.
누군가 나를 올바른 방향으로 안내 할 수 있다면 대단히 감사하겠습니다. 감사합니다.
PS : Ubuntu 11.10에서 FFmpeg 버전 0.7.3-4 : 0.7.3-0을 사용하고 있습니다.
수정
사전 설정 사용을 살펴 보는 해결책을 찾았습니다. 사전 설정에 대한 정보를 찾은 후 이에 대해 설명하는 다음 자습서를 찾았습니다.
http://juliensimon.blogspot.com/2009/01/howto-ffmpeg-x264-presets.html
코덱과 적절한 사전 설정을 다음과 같이 지정하기 만하면됩니다.
ffmpeg -i highres.avi -r 30 -s 960x540 -vcodec libx264 -vpre medium lowerresforceh264vpremedium.avi
아직 조정해야 할 부분이 있지만 이것은 기본적으로 내가 원했던 것입니다. 감사합니다.
댓글
- 어떤 사람들은 단순히 Avermedia .avi 파일 .mp4를 변환하여 Mountain Lion / Mavericks에서 재생하는 방법을 알고 싶어합니다. div id = “32f254d7e2”>
pre > ffmpeg -i 140203-1229.avi -vcodec copy -acodec copy fromavermedia_cog.mp4 < / pre >
답변
I ” m 도움을 주려고합니다. 첫째, FFMPEG H.264가 입력 형식이 아니라고 말하는 이유를 이해하지 못합니까?
FFMPEG 명령 줄을 충분히 잘 모릅니다. 하지?;)). 멀티 패스 인코딩을위한 스위치가 있어야합니다. 아마도 사용할 수있는 내장 사전 설정이 있고 원하는 것을 거의 확실하게 수행 할 수 있다는 것을 알고 있습니다. 일반적으로 x264 사전 설정 또는 x264 조정이라고합니다. 그런 것을 찾을 수 있습니까?
댓글
- 감사합니다. 사전 설정에 대한 귀하의 이야기는 제가 가능한 해결책을 찾는 데 도움이되었습니다. ‘ 내가 한 일을 보여주기 위해 게시물을 편집하겠습니다.
- 멋진 솔루션입니다. 내 스 니펫 모음에 추가되었습니다. 감사합니다.
- @BigBeagle : 질문에 대한 답변을 찾으면 답변으로 게시 할 수 있습니다. 질문을 더 명확하게하기 위해 질문을 편집합니다. 이해했듯이 답변은 답변 섹션에 있습니다.
Answer
ffmpeg는 x264 사전 설정을 제거 했으므로 -vpre 설정이 더 이상 작동하지 않습니다.
이제 비디오 파일을 휴대폰에서 처리 할 수있는 형식으로 변환하는 스크립트가 있습니다.
ffmpeg -i input.avi -sws_flags lanczos+accurate_rnd -vf "scale=320:240" -c:v libx264 -crf 20 -preset veryslow -profile:v main -tune fastdecode -c:a copy output.mkv
각 옵션에 대해 설명하겠습니다.
-sws_flags lanczos+accurate_rnd
이 옵션은 축소 알고리즘입니다. lanczos는 흐림없이 최소한의 아티팩트를 생성하므로 권장되지만 느립니다.
-vf "scale=..."
는 출력 해상도를 설명합니다.
-crf 20
quality, 20은 좋은 최종 ( “편집 전에 사용하지 마십시오) 출력 설정입니다. 이것은 일정한 품질이며 파일 크기가 빡빡하지 않고 다른 어떤 것보다 가장 낮은 파일 크기에서 더 나은 품질을 생성 할 때 가장 좋은 옵션입니다. 그렇지 않으면 다음을 사용하십시오. 특정 파일 크기 (예 : CD 또는 DVD에 저장해야 함), 고정 비트 전송률 (예 : )는 스트리밍 할 때만 사용해야합니다. 특별한 경우는 손실이없는”0 “이며이 옵션의 범위는 1 (최고 품질)에서 50 (최저 품질)까지입니다.
이에 대한 좋은 테스트는 -crf 20을 사용하여 인코딩을 실행하는 것입니다. 비트 전송률을 기록한 다음 파일의 두 번째 버전에 대한 -b 설정으로 두 파일 크기가 같아야합니다. 품질 차이입니다.
-preset veryslow
사용하려는 CPU 양을 선택합니다. 파일 크기가 작고 품질이 더 좋습니다.
-profile:v main
H.264 프로필 사용할 수 있습니다. high는 가장 효율적인 파일 크기이지만 다른 형식에 비해 디코딩하는 데 많은 CPU를 사용합니다. 대부분의 휴대폰에는 하드웨어 디코더가 내장되어 있고 플래시 플레이어가 지원하므로 가장 인기가 있습니다. 메인을 사용하십시오.
-tune fastdecode
내 휴대폰은이 옵션없이 파일을 재생하는 것을 좋아하지 않지만 일반적으로이 옵션을 비워 두거나 비디오 게임의 경우 “영화”로 설정할 수 있습니다. 이 기능을 사용하는 주된 이유는 약간의 추가 품질을 얻기 위해서입니다.
최근의 컨테이너 형식 인 .avi를 사용하는 것이 가장 좋습니다. avi는 “H.264를 수용하도록 설계되지 않았습니다. H.264를 저장하거나 파일을 2GB보다 크게 만드는 표준이 없으며 대부분의 구현은 해킹이며 문제가 발생하기 쉽습니다. mkv 또는 mp4를 사용합니다.
댓글
- libx264의 사전 설정은 이제
-preset slow
-
-tune fastdecode
는 디 블로킹, 가중치가 적용된 B 및 P 프레임과 CABAC를 비활성화합니다. B 프레임을 처리 할 수 있지만 CABAC는 처리 할 수없는 디코더가 있습니까?-profile:v baseline
를 제안합니다. , 이전 하드웨어 디코더를 대상으로해야하는 경우. (fastdecode
는 소프트웨어를 대상으로하는 경우 유용 할 수 있습니다. 느린 CPU에서 디코더를 다시 사용하지만 하드웨어 디코더는 아닙니다.) B 프레임이 있지만 디 블로킹이없는 메인 또는 CABAC는 디 블로킹을 사용하는 기준보다 좋을 수도 있고 그렇지 않을 수도 있습니다. h.264 저장을 위해 not-AVI를 권장하는 +1. IIRC, 메인은 B 프레임이지만 avi의 h.264는 잘 표준화되어 있지 않으며 ‘ s hacky입니다. - I ‘ d는
-crf 20
하이 파이널을 호출했습니다. 스포츠 이벤트와 같이 ‘의 높은 동작이 아니라면 22 또는 24로 변경할 수 있습니다.
에서와 같이 -preset
에 의해 지정됩니다.
답변
몇 가지 명확하게해야 할 사항이 있습니다.
- 형식은 코덱이 h264로 인코딩 된 비디오가있는 avi 형식 파일을 가져 오려고합니다. 코덱. -vcodec libx264 와 .avi 가있는 파일 이름을 사용하면됩니다. Ffmpeg는 파일 확장자를 확인하여 형식을 인식해야하지만 -f avi 를 추가 할 수도 있습니다. mpeg2보다 품질이 나쁘거나 내가 권장하는 mpeg4에 비해 품질이 더 나쁘기 때문에 mpeg1을 사용하고 싶지 아닙니다 .
- 문제는 ffmpeg가 아무 것도 지정하지 않았기 때문에 가능한 가장 낮은 품질을 사용했다는 것입니다. -sameq 옵션은 거의 작동하지 않는 것 같습니다. 실제로 비트 전송률을 수동으로 설정하는 것은 매우 간단합니다. 예를 들어, -vb 3000k 를 추가하면 평균 비디오 비트 전송률이 3Mb / s 인 파일을 얻을 수 있습니다. 이는 상당히 좋은 품질을 제공합니다.이 정도면 충분할 것 같습니다. 언급 된 해상도에 대해 2Mb / s를 갖도록합니다.
- 파일 크기를 낮추는 핵심은 해상도가 아니라 위에서 언급 한 비트 전송률입니다. 차라리 원래 해상도를 고수하고 비트 전송률을 조작하고 싶습니다.
- 음질 손실없이 변환없이 오디오를 유지하고 싶으므로 -acodec copy 를 사용하세요.
다음을 시도해보세요. ffmpeg -i highres.avi -acodec copy -vcodec libx264 -vb 2000k 낮음 res.avi
댓글
- 일정 비트 전송률은 모든 전송률 제어 모드 중 가장 최악 (품질 대 크기)입니다. x264이며 피해야합니다. 대신
-crf
를 사용하여 일정한 품질 모드를 설정하세요.