이미지 + 오디오 = mp4 : 비디오를 더 작게 만드는 방법?


12

ffmpeg를 사용하여 MP4에 JPG를 추가하여 MP4를 만듭니다.

비디오를 만들 이미지가 하나뿐이므로 비디오 크기를 줄일 수있는 방법이 있는지 궁금합니다.

명령:

$ ffmpeg -loop 1 -i image.jpg -i audio.mp3 -shortest -c:a copy output.mp4

결과 :

  • image.jpg = 26.7K (이미지가 명확하지 않음)
  • audio.mp3 = 64.6M (54 분)
  • output.mp4 = 80.6M (비디오 결과가 명확하지 않고 음악이 여전히 좋습니다)

MP4에 적합한 크기입니까?


mp3 만 재생하고 mp3 만 재생하고 크기를 저장하기 위해 하나의 jpg로 화면을 고정 할 수 있도록 mp4를 메타 할 수 있는지 궁금합니다.
SIDU

출력 할 대상 플레이어, 장치 또는 사이트는 무엇입니까?
llogan

.mp4를 Youtube.com에 업로드하려고합니다
SIDU

답변:


18

YouTube에 업로드

H.264 : 가장 작은 파일

이 방법은 libx264를 사용하여 H.264 비디오를 인코딩합니다. 아래의 스트림 복사 방법보다 느리지 만 잠재적으로 더 작은 파일 크기를 출력합니다.

ffmpeg -loop 1 -framerate 1 -i image.jpg -i music.mp3 \
-c:v libx264 -preset veryslow -crf 0 -c:a copy -shortest output.mkv

스트림 복사 : 가장 빠른 프로세스

이 방법 은 이미지를 MKV 컨테이너로 스트리밍 (인코딩하지 않음)합니다. 매우 빠르지 만 위의 방법보다 크기가 중요한 경우 더 작은 파일을 생성 할 수 있습니다.

ffmpeg -loop 1 -framerate 1 -i image.jpg -i music.mp3 -c copy -shortest output.mkv
  • YouTube는 거의 모든 것을 받아들이므로이 명령은 몇 가지 트릭을 사용하여 인코딩 속도를 높이거나 파일 크기를 작게 만들고 YouTube는 사용자가 제공 한 모든 것을 다시 인코딩하므로 품질을 높게 유지합니다. 플레이어는 아마 마음에 들지 않지만 YouTube는 좋아할 것입니다.

  • 이 예에서는 기본 25fps보다 빠르게 처리해야하는 매우 낮은 프레임 속도가 사용됩니다.


모든 플레이어를위한 가장 넓은 호환성

ffmpeg -loop 1 -i image.png -i music.mp3 -vf "scale='min(1280,iw)':-2,format=yuv420p" \
-c:v libx264 -preset medium -profile:v main -c:a aac -shortest -movflags +faststart output.mp4
  • 이것은 매우 오래된 장치를 제외한 거의 모든 장치 -profile:v main에서 -profile:v baseline작동해야 합니다 ( 이 경우 변경 ).

  • 오디오 입력이 이미 AAC의 경우, 변경 -c:a aac하는 -c:a copy불필요한 재 인코딩을 피하기 위해.

  • 인코딩 시간이 길어지고 파일 크기가 위의 YouTube 명령보다 큽니다.

  • 자세한 정보는 FFmpeg Wiki : H.264 를 참조하십시오.


YouTube에서 허용하는 가장 낮은 프레임 / 초로 1280 * 720에서 a.jpg + a.mp3 = a.mp4를 만드는 코드 줄을 제공 할 수 있습니까? 또한 하나의 작업 만 있기 때문에 "-loop 1"을 삭제해야합니까? 미리 감사드립니다.
SIDU

@SIDU 기존 명령은 요청한 작업을 수행하지만 (MP4 대신 MKV 출력 제외) YouTube에서 지원하는 최저 프레임 속도는 알 수 없습니다. 실험 만하면됩니다. YouTube에 업로드 할 때 왜 MP4가 필요한가요?
llogan

나는 그것을 시도했지만 그것은 말한다 :Unrecognized option 'preset'. Error splitting the argument list: Option not found
NineCattoRules

@NineCattoRules 추가 정보 없이는 말하기가 어렵습니다. pastebin 사이트를 사용하여 전체 ffmpeg명령과 명령의 전체 콘솔 출력 을 표시 한 후 주석에 링크를 제공하십시오.
llogan

감사합니다. mc3man 리포지토리를 사용하여 FFMPEG를 다시 설치했으며 이제 제대로 작동합니다!
NineCattoRules

3

내가 생각할 수있는 정보 만 제공했습니다.

조각으로 가자 :

비디오에 하나의 이미지 만 추가되었으므로. 비디오 크기를 줄이는 방법이 있는지 궁금합니다. 예를 들어 28 대신 강제 비트 레이트 / 초 = 1입니까?

정지 이미지이므로 변경할 필요가 없습니다. 그냥있어

당신이 말하는 것은 비트 레이트가 아닌 초당 프레임 (fps) 입니다. 그리고 당신은 개념에 맞습니다. 정지 이미지 1fps 하나만 문제가되지 않습니다.

mp4에 적합한 크기입니까? 이미지 크기가 중요합니까?

이 경우 하나의 스틸 사진 만 처리하므로 이미지 크기는 큰 무게를 갖지 않습니다. 고화질 비디오라면 다른 문제입니다.

jpg의 크기를 1080 * 720으로 조정하고 ffmpeg의 추가 설정을 720p로 출력해야합니까 (ffmpeg 설정은 무엇입니까 :)?

당신이 말하는 해상도는 1280x720입니다.

-loop 1여기서 옵션 의 요점을 보지 못하면 프로세스 속도가 느려집니다. -shortest파일에 둘 이상의 입력 스트림이 있기 때문에 사용 했습니까 ? 그렇지 않다면 그것을 사용할 이유가 없습니다. 당신이 사용했기 때문에 -acodec copy나는 당신이 그것을 다시 인코딩하고 싶지 않다고 가정해야합니다.

다시 인코딩하지 않고 비트 전송률에 닿지 않는 720p 1fps 출력의 경우 :

ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 output.mp4

입력 스트림이 두 개 이상이고 ffmpeg가 가장 짧은 스트림에서 인코딩을 완료하려는 경우를 생각해보십시오.

ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -s 1280x720 -shortest output.mp4

이제 비트 전송률을 변경해야하는 경우 (예를 들어 1024k라고 가정)

ffmpeg -framerate 1 -i input.mp3 -i cover.jpg -c:a copy -b:v 1024k -bufsize 1024k -s 1280x720 output.mp4

참조 : 출력 비트 레이트 제한

-c : a copy = 입력 오디오 스트림을 복사하여 다시 인코딩하지 않도록합니다.

-b : v = (정확하지는 않음) 일정하도록 지정된 비트 전송률.

-bufsize = 평균 비트 전송률을 계산하는 간격입니다. -b : v에 지정된 손실 품질 이미지는 가장 낮지 만 비트 전송률은 더 정확합니다 .

-s = 비디오 출력의 실제 크기.

-framerate = 출력에서 ​​사용할 입력 프레임 속도.

한 지점에서 더 작은 크기의 비디오를 계속 원한다면이를 달성하기 위해 품질을 희생해야합니다. 그리고 다른 방법으로는 손실 압축으로 다시 인코딩하는 것이 포함됩니다.

당신이 말하는 것, 당신이 제공하는 정보, 그리고 당신이하려고하는 것은 앨범 아트를 mp3에 포함시키는 것 같습니다. 그것이 당신의 목표라면 이것은 당신의 요구 사항에 더 잘 맞을 것입니다 :

ffmpeg -i input.mp3 -i cover.jpg -map_metadata 0 -map 0 -map 1 output.mp3

-map_metadata = 파일에서 파일을 출력하는 ffmpeg 메타 데이터 지정자 이 경우 글로벌 메타 데이터 ( 0 )입니다.

-map 0 = 입력 스트림 1 (오디오).

-map 1 = 입력 스트림 2 (이미지).

여기에 귀하의 요청에 맞는 것이 없으면 추가 정보를 제공하십시오.


-framerate입력 옵션으로 사용 하고 출력을 제거하는 것을 고려하십시오 -r. 그렇지 않으면 기본 입력 프레임 속도 25가 사용 된 다음 ffmpeg프레임을 제거하여 달성 -r 1합니다. 입력 프레임 속도 만 선언하면 출력에 동일한 프레임 속도가 사용됩니다.
llogan

감사. 몰랐어요 제안 된 변경 사항을 반영하도록 편집되었습니다.
Fenrir

튜토리얼 주셔서 감사합니다. 내 origianl ffmpeg 코드 줄은 Google 검색의 복사 붙여 넣기였습니다. 무엇이 무엇인지 전혀 모릅니다.
SIDU
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.