어떤 ffmpeg 명령 줄이 모든 장치에서 비디오 호환성을 향상 시킵니까?


15

그래서 H264 비디오를 말하는 사용자가 있습니다. MP4는 Apple의 IPad에서 오디오를 재생하지 않으며 MP4 비디오를 Android에서도 올바르게 재생하기 위해 고심하고 있습니다.

내가 사용해야하는 명령 줄에는 두 가지 명령 줄이 있습니다.

-profile:v baseline -level 3.0

그리고 :

-vpre baseline

어떤 장치를 사용해야 모든 장치에서 작동합니까?

또한 현재 오디오 비트 전송률이 오디오 비트 전송률 일 수 있음을 읽었습니다.

-ab 192k

아마도 나는 그것을 낮추어야한다.

-ab 160k

MP3 오디오를 MP4 파일로 인코딩하는 데 사용되는 명령 줄입니다.

"C:/server/ffmpeg/bin/ffmpeg.exe" -y -i Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/54bbf30bb11a0f6b9dc832114c26fd29.mp4 -strict experimental -acodec libmp3lame -ar 44100 -ac 2 -ab 192k -s 480x360 -aspect 16:9 -r 24000/1001 -vcodec libx264 -b:v 1000k -minrate 800k -maxrate 1000k -bufsize 800K -crf 18 -preset veryslow -f mp4 -threads 0 -movflags +faststart Z:/server/websites/ps/public_www/media/com_hwdmediashare/files/55/ac/fb/98382d43d31d4ff91ea44cb2aa1bbc49.mp4 2>&1

답변:


26

먼저 FFmpeg 프로파일 사용과 직접 명령 행 옵션의 차이점을 이해해야합니다. ffmpeg가 설치되어있는 곳 또는 어디에 있든지 파일을 -vpre사용합니다 . 일련의 옵션 = 값 쌍이며, 귀하의 경우 직접 정의해야 할 것입니다 (적어도 나는 ffmpeg와 함께 제공된 사전 설정을 모릅니다 )..ffpreset/usr/share/ffmpeg/baseline

사전 설정을 직접 만들고 명령 줄 옵션이 무엇인지 알지 않는 한 사전 설정을 사용하지 않는 것이 좋습니다. 저는 몇 년 동안 ffmpeg를 사용해 왔으며 사전 설정을 사용한 적이 없습니다.

대부분의 장치와 호환되는 H.264 비디오를 생성하기위한 일반적인 명령 줄은 다음과 같습니다.

ffmpeg -i <input> \
  -c:v libx264 -crf 23 -profile:v baseline -level 3.0 -pix_fmt yuv420p \
  -c:a aac -ac 2 -b:a 128k \
  -movflags faststart \
  output.mp4

몇 가지 참고 사항 :

  • H.264 / AAC는 HTML5에서 광범위한 지원을위한 최상의 조합입니다. 그러나 H.264 디코더가없는 브라우저에는 VP8 / Vorbis 비디오도 필요합니다. 일부 명령 행 예제 는이 답변을 참조하십시오 . 다른 코덱에 대해서는 Wikipedia 의 브라우저 지원 페이지를 참조하십시오 .

  • H.264는 모바일 장치에서도 잘 작동합니다.

  • -profile:v baseline-level 3.0옵션은 H.264의 CPU를 많이 사용하는 기능을 처리 할 수없는 기존 모바일 장치가 필요하다. 당신은 일반적으로 이것을 생략하거나 대신 사용할 수 있습니다 -profile:v main.

  • CRF는 품질을 설정합니다 (18-28은 합리적인 범위이며, 낮을수록 품질이 향상됨). 물론 고정 비트 전송률을 사용 -b:v 1000k하거나 이와 유사한 것을 사용할 수 있습니다 . 비디오 해상도와 일치하는 비트 전송률을 선택하십시오. 일부 저전력 장치는 불필요하게 높은 비트 전송률을 처리하지 못할 수 있습니다.

  • -movflags faststart옵션은 컨테이너 메타 데이터를 파일을 그대로 두지 않고 파일의 시작 부분으로 이동 시키므로 스트리밍에 필수적입니다. 그러면 파일이 완전히로드 될 때까지 기다리지 않고 즉시 재생을 시작할 수 있습니다.

그러나 대상이되는 모든 장치에 대해 가장 낮은 공통 분모를 찾는 것이 중요합니다. 항상 존재하지는 않습니다. 물론 당신은 (이다, 다른를 사용하고 싶지 않아요 H.264 이상) 코덱을. 실제로 메인 또는 하이 프로파일을 디코딩 할 수있는 클라이언트에베이스 라인 인코딩 비디오를 제공하는 것은 현명하지 않습니다. 디코딩 복잡성을 줄이려면 품질을 떨어 뜨립니다.

내 경험에 따르면 Android 기기는 MP4 컨테이너에서 AAC-LC 오디오를 사용하여 Baseline H.264를 재생할 수 있습니다. 나는 그것에 문제가 없었습니다. 실제로 일부 장치는 공식적으로 지원되지 않지만 더 높은 프로파일을 재생할 수 있습니다. iOS는 일반적으로 Baseline H.264도 지원하지만 일부 장치에서도 메인 프로파일을 사용할 수 있습니다. 일부 지침은 이 게시물 (약간 구식)을 참조하십시오 .

재생 문제가있는 사용자가있는 경우 어떤 비디오가 문제를 일으키는 지 확인하고 사용중인 하드웨어 및 플레이어 소프트웨어에 대한 자세한 정보를 확인해야합니다. 그런 다음 해당 사례의 문제 해결에 대해 이야기 할 수 있습니다.


1
자세한 답변을 주셔서 감사합니다. 나는 그것을 다시 읽습니다. :) 또한 -acodec libmp3lame -ab 160k로 인코딩하고 ipad 애플 장치를 사용하는 사용자는 비디오를 볼 수는 있지만 소리를들을 수는 없다는 것을 말하고 있습니다. 오디오 코덱 또는 비트 전송률 Android 및 Windows 사용자는 괜찮다고 말하고 비디오 스트림에 오디오가 있으므로 aac 대신 libmp3lame을 사용하면 Apple 사용자가 비디오에 오디오를 가지지 않는 이유가 확실하지 않습니다.
C0nw0nk

MP4 컨테이너에서 사용되는 MP3 오디오는 거의 보지 못했습니다. 아마도 AAC가 더 안전한 선택 일 것입니다.
slhck December

내가 amp로 bit_rate, 너비 높이 오류를 계속 유지하고 libmp3lame으로 전환하고 모든 오류가 중지되고 Apple 사용자는 오디오가 없지만 다른 모든 사람들이 동일한 파일을 볼 수 있다고 말했기 때문에 MP3 만 사용하고 있습니다. 다른 모든 장치에서, 아마도 내가 잘 알고 :( 애플의 MP3에 따른해야 버그 발견 developer.apple.com/library/mac/documentation/...을
C0nw0nk

@ user2068371이 링크는 MP4 컨테이너 형식이 아닌 MPEG-2 전송 스트림을 나타냅니다.
llogan

1
@ user2068371 MediaElementjs에 문제가 없었습니다. 일부 브라우저에서는 H.264 및 MP3가 지원되지 않습니다 . HTML5 비디오의 경우 항상 H.264 / AAC 및 가능한 경우 VP8 / Vorbis를 폴백으로 사용하십시오. AAC 변환에 문제가있는 경우 새로운 질문을하고 전체 명령 행 출력도 포함 시키십시오.
slhck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.