비디오로 변환하고 싶은 PNG 파일이 10,000개 정도 있습니다.
에서인터넷을 둘러보다나는 ffmpeg를 발견하고 다음 명령을 실행하기로 결정했습니다.
ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 video.mp4
우선, 이 명령을 실행하면 프롬프트가 나타납니다 . 제가 이해하는 한, 이 명령은 이미지 자체를 수정해서는 안 되고 새 파일 File 'img/00001.png' already exists. Overwrite ? [y/N]
만 생성하면 되기 때문에 조금 이상해 보입니다 .video.mp4
어쨌든 10,000번을 누르고 싶지 않았기 y
때문에 이미지를 백업하고 명령을 수정했습니다.
ffmpeg -f image2 -r 25 -i img/* -vcodec libx264 -crf 22 -y video.mp4
이제 프로그램은 254개의 이미지에 대해 제대로 실행되는 것처럼 보이지만 다음과 같은 오류가 발생합니다.
[png @ 0x7facf0503800] ff_frame_thread_encoder_init failed
Error initializing output stream 255:0 -- Error while opening encoder for output stream #255:0 - maybe incorrect parameters such as bit_rate, rate, width or height
Conversion failed!
유용할까봐 추가했어요전체 로그 파일은 여기. 그리고 좋은 측정을 위해,여기 이미지의 예가 있습니다변환하고 싶습니다. 또한,여기 악명 높은 프레임 255가 있습니다, 프로그램이 충돌합니다.
답변1
ffmpeg는 각 입력 파일에 고유한 인수가 있어야 하므로 -i
를 실행하면 -i img/*
쉘이 와일드카드를 일련의 이미지로 확장하고 ffmpeg는 이를 다음과 같은 이미지로만 읽습니다.하나입력 이미지는 10k(마이너스 1) 출력 이미지입니다. 즉, ffmpeg는 다음을 확인합니다.
ffmpeg … -i img/00000.png img/00001.png …
00000.png
이는 입력 및 00001.png
출력 으로 사용하도록 지시합니다 . 실제로 의 내용으로 00001.png
모든 파일을 덮어쓰게 됩니다 . 그래서 나는 당신이 그것들을 백업해 두기를 바랍니다.00254.png
00000.png
원본 입력 파일을 복원한 후 명령을 다시 확인하세요. 이미지 번호를 지정하기 위해 와일드카드를 사용하지 않았습니다 %d
(링크된 답변에 표시됨). 따라서 다음을 사용하십시오.
ffmpeg -f image2 -framerate 25 -i img/%05d.png -vcodec libx264 -crf 22 video.mp4
자세한 내용은 다음을 확인하세요.슬라이드쇼 가이드. 여기에서는 입력 파일 목록을 지정하기 위한 다양한 옵션도 찾을 수 있습니다(예: 수행하려는 작업과 유사한 glob 패턴을 통해).
답변2
너~할 수 있다또한 별표 와일드카드를 사용하지만 다음 답변에 따라 확장을 방지하려면 파일 목록을 인용해야 합니다.@slhckpattern_type
, globbing을 사용하도록 지시하려면 추가 옵션이 필요합니다 .
ffmpeg -f image2 -r 25 -pattern_type glob -i 'img/*.png' -vcodec libx264 -crf 22 video.mp4