다양한 지속 시간을 가진 FFMPEG 이미지 시퀀스


16

1 분 길이의 mp3 파일이 있다고 가정 해 봅시다. 그리고 20 개의 PNG 이미지가 있습니다. 이 이미지와 오디오를 비디오 파일로 결합하고 싶지만 각 이미지가 화면에서 3 초간 지속되는 것을 원하지 않고 일부 이미지는 5 초간 지속되고 다른 이미지는 1 초간 지속됩니다.

내가 생각할 수있는 유일한 방법은 더 오래 지속되어야하는 이미지를 복사하는 것입니다. 예를 들어 image1, image2, image3을 정확히 동일하게 유지하면 비디오에서 3 배 더 많은 시간을 제공합니다.

그러나 이것은 시간과 공간이 많이 소모됩니다. ffmpeg에 스위치 / 매개 변수가 있습니까?


ffmpeg는 각 이미지를 동일한 길이로 표시해야한다는 것을 알았습니다. 길이를 변경하려면 미리 이미지를 복제하거나 원하는 기간마다 별도의 비디오를 만든 다음 연결해야합니다. 다른 사용자가 더 나은 아이디어를 가지고 있지만 Kdenlive와 같은 편집기를 사용하면 이러한 유형의 작업이 더 쉬울 수 있습니다.
— llogan

PHP 스크립트에서하고 있으므로 편집기는 내가 찾고있는 것이 아닙니다.
— Flot2011

답변:


21

ffmpeg 2.0을 사용하면 다음과 같은 몇 가지 방법이 있습니다.

  1. 한 가지 방법은 파일 수정 시간을 사용하는 것입니다. 먼저 이미지 파일 의 수정 시간 을 설정하여 각 이미지 파일의 수정 시간이 이전의 수정 시간보다 큼; 시차는 이전 이미지의 지속 시간입니다 (1 초 해상도). 그런 다음 image2 디 먹서 옵션을 사용하십시오 -ts_from_file 1. 예를 들면 다음과 같습니다.

    touch -t 01010000.00 image01.png
    touch -t 01010000.03 image02.png
    touch -t 01010000.08 image03.png
    ...
    ffmpeg -ts_from_file 1 -i image%2d.png -i audio.mp3 -c:a copy -vf fps=25 out.avi
    
  2. 또 다른 방법은 concatdemuxer 를 사용하는 것입니다. demuxer 는 선택적인 기간으로 연결할 파일 목록을 가져옵니다. 먼저 다음과 같은 이미지 및 지속 시간을 나열하는 파일을 작성하십시오.

    ffconcat version 1.0
    file image01.png
    duration 3
    file image02.png
    duration 5
    file image03.png
    

    그런 다음이 파일을 ffmpeg에 대한 입력으로 제공하십시오. 예를 들면 다음과 같습니다.

    ffmpeg -i in.ffconcat -i audio.mp3 -c:a copy -vf fps=25 out.avi
    

최종 지속 시간이 지난 후 마지막 파일을 복제해야 할 수도 있습니다. -c:a copymp3 오디오를있는 그대로 복사합니다. 다른 오디오 코덱으로 변환하려면 대신을 지정할 수 있습니다 copy. 와 같은 다른 비디오 코덱을 지정 -c:v하거나와 -pix_fmt같은 다른 픽셀 형식 을 지정할 수도 있습니다 -c:v libx264 -pix_fmt yuv420p. -vf fps=25출력 프레임 속도를 25fps로 만듭니다. 오디오가 길고 이미지 후에 잘라내려면 -shortest옵션을 사용하십시오 .


왜 이것이 효과가없는 것 같은지 알 수 있습니다 (즉, 두 번째 (및 첫 번째 시도) 옵션을 따라 문자를 보냈지 만 이미지가없는 검은 색 비디오를 출력하거나 이미지가 여러 프레임이 아닌 한 프레임 동안 깜박입니다. ffconcat 파일에 지정된 초
— sup

@ sup : 이것은 여전히 ​​나를 위해 작동합니다. 비디오가 검은 색이면 플레이어가 사용중인 비디오 형식을 지원하지 않을 수 있습니다. -c:v libx264 -profile:v baseline -pix_fmt yuv420p out.mp4out.avi 대신에 시도 하거나 mpv 또는 ffplay와 같은 다른 플레이어를 시도하십시오. 또한 현재 버전의 FFmpeg를 사용 중인지 확인하고 최종 지속 시간 후에 마지막 이미지 파일 이름을 복제하십시오.
— mark4o

흠, 이상하고 U는 mpv와 ffmpeg.org에서 다운로드 한 ffmpeg 정적 빌드를 사용하며 지속 시간은 무시합니다. 어쨌든, 나는 이것을하는 다른 방법을 찾았으므로 그렇게 중요하지는 않습니다 : ffmpeg.org/pipermail/ffmpeg-user/2015-July/027702.html
— sup

1

가정 ffmpeg -i in.ffconcat -vf fps=25 out.avi

(2018 : in.ffconcat 파일 내용)-작동합니다 :

ffconcat 버전 1.0
파일 text.png
지속 시간 30.0
파일 text.png

이 동안하지 않습니다

ffconcat 버전 1.0
파일 text.png
지속 시간 30.0

즉 두 번째 경우

ffprobe out.avi -show_entries format=duration -v 0

[체재]
지속 시간 = 0.040000
[/체재]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.