나는 avconv/ffmpeg 인코딩 및 사용에 대해 거의 알지 못합니다. 다음과 같이 비디오를 다운샘플링하려고 합니다.
avconv -i blah_in.avi -s 640x360 -pass 1 blah.avi
avconv -i blah_in.avi -s 640x360 -pass 2 blah.avi
나는 이것이 간단하다는 것을 알고 있지만 문제가 무엇인지 알 수 없습니다. 패스 1의 오류 메시지는 다음과 같습니다.
avconv version 0.8.3-4:0.8.3-0ubuntu0.12.04.1, Copyright (c) 2000-2012 the Libav developers
built on Jun 12 2012 16:37:58 with gcc 4.6.3
[avi @ 0x9fdd240] non-interleaved AVI
Input #0, avi, from 'blah_in.avi':
Metadata:
encoder : MEncoder svn r34540 (Ubuntu), built with gcc-4.6
Duration: 01:21:59.24, start: 0.000000, bitrate: 8996 kb/s
Stream #0.0: Video: mpeg4 (Advanced Simple Profile), yuv420p, 1920x1080 [PAR 1:1 DAR 16:9], 23.98 tbr, 23.98 tbn, 23.98 tbc
Stream #0.1: Audio: mp3, 44100 Hz, stereo, s16, 128 kb/s
File 'blah.avi' already exists. Overwrite ? [y/N] y
[buffer @ 0x9fe1e00] w:1920 h:1080 pixfmt:yuv420p
[scale @ 0x9fdcfa0] w:1920 h:1080 fmt:yuv420p -> w:640 h:360 fmt:yuv420p flags:0x4
Incompatible sample format 's16' for codec 'ac3', auto-selecting format 'flt'
[ac3 @ 0x9fdc740] invalid bit rate
Output #0, avi, to 'blah.avi':
Metadata:
encoder : MEncoder svn r34540 (Ubuntu), built with gcc-4.6
Stream #0.0: Video: mpeg4, yuv420p, 640x360 [PAR 1:1 DAR 16:9], q=2-31, pass 1, 200 kb/s, 90k tbn, 23.98 tbc
Stream #0.1: Audio: ac3, 44100 Hz, stereo, flt, 200 kb/s
Stream mapping:
Stream #0:0 -> #0:0 (mpeg4 -> mpeg4)
Stream #0:1 -> #0:1 (mp3 -> ac3)
Error while opening encoder for output stream #0:1 - maybe incorrect parameters such as bit_rate, rate, width or height
많은 것을 시도했지만 비슷한 오류 메시지가 나타나거나 해상도가 낮기 때문이 아니라 압축 아티팩트로 가득 차서 품질이 극도로 나빴습니다.
이제 제가 달성하고 싶은 것은 제 아이의 비디오 장치에서 잘 재생되는 다음 avi 파일과 동일한 해상도/인코딩입니다.
Stream #0.0: Video: mpeg4 (Advanced Simple Profile), yuv420p, 624x352 [PAR 1:1 DAR 39:22], 25 fps, 25 tbr, 25 tbn, 25 tbc
Stream #0.1: Audio: mp3, 48000 Hz, stereo, s16, 128 kb/s
답변1
출력 로그의 마지막 줄은 너무 일반적입니다. 더 자세히 살펴봐야 합니다. 오류는 다음과 같습니다.
[ac3 @ 0x9fdc740] invalid bit rate
문제는 어떤 이유로 avconv가 MP3 오디오를 AC3으로 인코딩하려고 한다는 것입니다. 실제로 비디오 크기만 조정하면 오디오 비트스트림을 보존할 수 있습니다.
크기를 조정하고 다시 인코딩하면 품질이 크게 저하됩니다. 그러니 꼭 필요한 경우가 아니면 하지 마세요. 귀하의 동영상이 영향을 받습니다.세대 손실.
가능하다면 MPEG-4 Part 2 코덱(Xvid 또는 libavcodec-native mpeg4
) 사용을 피하고 MPEG-4 Part 10/H.264 코덱(예: x264)을 사용하세요. AVI 컨테이너는 H.264를 제대로 지원하지 않기 때문에 대부분의 경우 AVI가 아닌 사용자가 선택한 컨테이너인 MP4를 사용합니다.
ffmpeg -i in.avi -c:a copy -c:v libx264 -crf 23 -s:v 640x360 output.mp4
그러면 다음 명령을 사용하여 오디오 스트림( )을 복사하고 -c:a copy
비디오를 x264( )로 인코딩합니다.-c:v libx264
안정적인 품질-crf
총 23 ( )개 항목입니다. 여기서 낮은 값을 사용하면 품질이 좋아집니다(정상 값 범위는 18-28입니다). 그에 따라 크기가 변경됩니다 -s:v
.
여기서는 구문이 동일해야 하기 때문에 Libav와 동의어로 FFmpeg를 사용하고 있습니다. 하지만 우분투와 함께 제공되는 기본 Libav 버전을 포기하는 것이 좋습니다.소스 코드에서 FFmpeg 컴파일아니면 가장 가까운 곳을 이용하세요Linux 정적 빌드.
답변2
지정된 비디오 비트 전송률이 200kpbs로 매우 낮습니다. 이 명령을 시도해 보세요
ffmpeg -i input_video -b 800 -s 640x360 -vcodec xvid -acodec copy output_video
장치가 지원하는 경우 의견의 조언을 따르십시오.264이것이 더 나은 선택이 될 것입니다.