1FPS에서 PNG 형식의 비디오 프레임이 있으며 ffmpeg를 사용하여 비디오로 변환하려고합니다.

이렇게하면 :

ffmpeg -i data/input-%4d.png data/output.mp4

기본적으로 25FPS로 동영상을 얻습니다. 입력을 매우 빨리 감습니다 (1FPS로 캡처 됨).

시도 할 경우 :

ffmpeg -i data/input-%4d.png -r 1 data/output.mp4

VLC가 재생하고 싶지 않은 것을 얻었습니다.

이제 첫 번째 동영상 (FF 동영상)을 가져 와서 속도를 늦추는 필터를 적용하면 (예 : -filter:v "setpts=24.0*PTS"), 1FPS 동영상처럼 재생할 수 있지만 가격은 파일 크기입니다. 반복되는 프레임을 많이 생성하는 것 같습니다.

그래서 정확히 1FPS를 갖고 실제로 그 속도로 재생되는 비디오를 어떻게 만들 수 있습니까? 출력 형식 인 btw는 그렇지 않습니다. ” 저에게 그렇게 중요합니다.

댓글

  • 저 ' 잘 모르겠습니다. ffmpeg는 컨테이너 형식 파일 확장자 인 .mp4에서 비디오 코덱을 알아낼만큼 똑똑합니다. -vcodec libx264 -vpre hq를 명령 줄에 추가하여 코덱과 인코딩 매개 변수를 알려주세요.
  • 실제로 문제가 해결되었으며, 제가 언급 한대로 잘 작동했고 -r 1를 추가했을 때만 이상한 결과가 나왔습니다.
  • stackoverflow.com 또는 superuser.com .

답변

초당 1 프레임으로 재생되는 비디오를 생성하는 FFMPEG 용 한 줄짜리를 원한다면 다음과 같이 입력과 출력 모두에 프레임 속도를 지정하면됩니다.

ffmpeg -r 1 -i data / input- % 4d.png -pix_fmt yuv420p -r 10 data / output.mp4

-r 1는 동영상이 초당 원본 이미지 중 1 개로 재생됨을 의미합니다.
-r 10는 동영상이 초당 10 프레임으로 재생됨을 의미합니다.

(-pix_fmt yuv420p는 다양한 재생 프로그램과의 호환성을 보장하기위한 것입니다. 예를 들어, Windows Media Player에서 비디오를 재생할 수 있으려면 여기에서 필요합니다.)

여러 가지 출력 프레임 속도를 테스트했으며 10은 여전히 사용할 수있는 가장 낮은 수인 것 같습니다. VLC가 재생할 비디오입니다.

물론 위의 명령은 각 원본 이미지가 곱해지고 있음을 의미하지만 언급 한 “느리게하기”보다 간단한 방법이며 코덱에 따라 실제 1FPS 동영상보다 훨씬 더 큰 동영상을 제작하지 못할 수 있습니다.

이를 테스트하기 위해 방금 제작 한 진정한 1FPS 동영상이 2.24kiB로 나왔습니다. 그런 다음 동일한 입력 이미지로 24FPS로 출력 한 비디오를 제작했고 5.76kiB로 나왔습니다. 크기는 2 배가 조금 넘고 크기는 24 배에 가깝지 않습니다. 🙂

댓글

  • +1 on -pix_fmt. 일부 사람들은 WMP를 사용한다고 주장하는 것을 잊어 버립니다. 🙂
  • 입력이 1 인 동안 출력 형식을 10fps로 설정하려는 이유는 무엇입니까? ' 그렇지 않습니까? 정확히 동일한 90 % 중복 프레임을 만드시겠습니까?
  • @Herbert는 최대 10 개의 프레임 속도를 얻을 수 있도록 중복 프레임을 생성합니다. VLC가 ' 불평하지 않음 , 시각적으로 ' 동영상을 변경하지 않습니다. 인코더는 프레임이 모두 동일한 지 확인할 수있을만큼 똑똑합니다. 당신은 ' 훨씬 큰 파일로 끝나지 않습니다
  • @chiliNUT 모든 형식은 아니지만 대부분의 정상적인 형식이 가능합니다. 감사합니다. !

답변

-framerate-r

예 : 1FPS처럼 보이는 최종 동영상을 만들려면 :

ffmpeg -framerate 1 -pattern_type glob -i "*.png" \ -c:v libx264 -r 30 -pix_fmt yuv420p out.mp4 

이는 PNG 프레임을 1FPS의 비디오로 변환하는 것과 유사합니다. | Unix & Linux Stack Exchange 에 따르면 -r-framerate가 필요했습니다. > 작동합니다.

위키에서 언급 된 내용 : http://trac.ffmpeg.org/wiki/Slideshow#Framerates

출력 프레임 속도를 VLC가 처리 할 수있는 30로 설정하고 각 이미지를 30 번 복사하여 출력 비디오가 1FPS로 보이도록합니다. 참조 : ffmpeg를 사용하는 이미지에서 낮은 fps 비디오로 VLC의 재생 문제 | Stack Overflow

VLC는 동영상을 정상적으로 재생할 수 있습니다.

Ubuntu 16.10, VLC 2.2.4, ffmpeg 3.0.5, 10 개의 PNG가있는 디렉토리.

참조 : https://stackoverflow.com/questions/19267443/vlc-freezes-for-low-1-fps-video-created-from-images-with-ffmpeg

댓글

  • ' -r-framerate?
  • @Royi 저는 ' 정말 잘 모르겠습니다. 단 하나가 저에게 효과가 있었다는 점을 제외하면 :-)하지만 man 페이지에서 추출하여 알려주세요 😉 의미있는 인용문은 " -r입니다. 입력 옵션으로, 타임 스탬프는 파일에 저장되고 대신 일정한 프레임 속도 fps를 가정하여 타임 스탬프를 생성합니다. 이것은 image2 또는 v4l2와 같은 일부 입력 형식에 사용되는 -framerate 옵션과 동일하지 않습니다 (이전 버전의 FFmpeg에서 동일했습니다). 확실하지 않은 경우 입력 옵션 -r 대신 -framerate를 사용합니다. "

Answer

두 번째 예를 다음과 같이 약간 확대하면 어떻게 되나요?

$ ffmpeg -r 1 -i data/input-%4d.png -c:v libx264 out.mp4 

-r 1 .png 파일 뒤에 있어야합니다.

FFmpeg 문서 에서 :

일반적으로 옵션은 다음에 지정된 파일에 적용됩니다. 따라서 순서가 중요하며 명령 줄에서 동일한 옵션을 여러 번 사용할 수 있습니다. 그런 다음 각 항목이 다음 입력 또는 출력 파일에 적용됩니다.

댓글

  • 불행히도 이것은 작동하지 않습니다. 그러나 순서가 중요 하다는 점을 언급하면서 많은 시간을 절약 할 수있었습니다. 감사합니다.

답변

이것은 VLC의 버그입니다 (버전 3.0.6에 여전히 존재 함). 몇 가지 실험 후 FPS가 10 미만인 동영상에서 VLC가 다운된다는 것을 깨달았습니다. 따라서 10FPS 이상의 모든 동영상은 문제가되지 않습니다. 따라서 현재 VLC에서 재생할 수있는 1FPS의 동영상을 얻을 수있는 깨끗한 방법은 없습니다 ( 포기하고 계속 읽으십시오 ).

한 가지 해결 방법은 이미지를 복제하여 1FPS의 효과를 가짜로 만드는 것입니다. 실제로 FPS가 10 이상이며 VLC에 적합합니다.

예 : 12 개의 이미지가있는 폴더가 있고 1FPS (VLC에서 재생 가능)의 비디오를 생성하려면 각 이미지를 여러 번 복제 (10 번이라고 가정 해 보겠습니다) 한 다음 FFMPEG를 사용하여 10FPS 비디오를 생성합니다.이 방법으로 총 120 프레임의 비디오를 얻을 수 있으며 각 이미지는 1 초 동안 재생됩니다 (10 회 복제 됨). 이는 단순히 1FPS에 대한 가짜입니다.

fps 매개 변수를

(다른 답변에 표시됨) 어떤 경우에는 문제가 될 수 있습니다 ( 공식 문서 ).

ffmpeg -framerate 1 -i "img (%d).jpg" -c:v libvpx-vp9 -vf "fps=10,format=yuv420p" out.mkv 

입력 -framerate가 출력보다 낮기 때문에 fps, FFMPEG는 원하는 출력 프레임 속도 (위의 명령에 따라 10)에 도달하기 위해 프레임을 복제합니다.

또한 -framerate의 순서입니다. 그리고 -vf fps는 중요합니다 .이 구성은 다음에 언급되는 동영상 (입력 또는 출력)에 적용되기 때문입니다. 이는 공식 문서 에 따른 것입니다.

지정된 다음 항목에 옵션이 적용됩니다. 파일. 따라서 순서가 중요합니다 …

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다