FFMPEG는 품질을 잃지 않고 flv를 mp4로 변환합니다 [중복]


55

이 질문에는 이미 답변이 있습니다.

현재 .flv 플래시 파일을 .webm 및 .mp4 파일로 변환하여 HTML5 비디오 플레이어와 함께 사용하고 있습니다.

_

WEBM 에이 ffmpeg 명령을 사용합니다. ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis filename.webm 이 기능은 훌륭하게 작동 하며 파일 크기는 상대적으로 동일합니다 (불필요).

_

MP4의 경우 다음을 사용하고 있습니다. ffmpeg -i filename.flv -sameq -ar 22050 filename.mp4

.mp4 fine으로 변환하고 품질 손실을 방지하지만 파일 크기는 거의 세 배입니다.

품질을 잃지 않고 파일 크기를 크게 막지 않으면 서 어떤 ffmpeg 공식을 사용하여 MP4로 변환 할 수 있습니까?

답변:


57
ffmpeg -i filename.flv -c:v libx264 -crf 19 -strict experimental filename.mp4

사용되는 비디오 코덱을 지정해야합니다. 명령에서 당신은 지정하지 -vcodec-c:v이렇게는 FFmpeg은 MP4에 대한 기본 코덱 (사용 mpeg4아주 좋은 압축 효율이 없음). 대신 libx264를 사용하고 품질 수준 인 CRF를 설정하십시오 (낮을수록 좋음, 기본값은 23, 정상 값은 18-28 임).

libx264로 인코딩하는 것은 복잡한 일이므로 H.264 인코딩 안내서를 찾아보십시오 .

또한 -strict experimental다음과 같이 얻을 수도 있습니다. "인코더 'aac'는 실험적이지만 실험적인 코덱은 사용할 수 없습니다. 사용하려면 '-strict -2'를 추가하십시오."


1
시간이 많이 걸리고 결과적으로 나오는 mp4가 매우 왜곡되고 픽셀 손실 등이 발생합니다. 그 이유는 무엇입니까? : /
trainoasis

mp4 형식의 기본 비디오 코덱이 반드시 필요한 것은 아닙니다 mpeg4. ffmpeg --help muxer=mp4내 컴퓨터 의 출력에 따르면 ffmpeg는 h264를 mp4의 기본 비디오 코덱으로 사용합니다.
doubleDown

1
@doubleDown 내 대답은 2011 년부터 오래되었습니다. 그 이후로 어느 시점에서 기본값이 변경되었을 수 있습니다.
sashoalm

43

이 명령은 재 인코딩없이 컨테이너 만 변경합니다.

ffmpeg -i input.flv -codec copy output.mp4

같은 폴더에있는 많은 비디오를 일괄 변환하기위한 스크립트를 만드는 방법을 알고 있습니까?
ttoine

예, Windows에서 파일 convert.bat를 작성하고이 코드를 여기에 넣으십시오 : for %%a in ("*.flv") do ffmpeg -i "%%a" -codec copy "%%~na.mp4"* .flv 파일이있는 폴더에서 convert.bat를 실행하십시오
c97

1
나를 위해 이것은 출력 파일 # 0에 대한 헤더를 쓸 수 없습니다 (잘못된 코덱 매개 변수?) : 잘못된 인수입니다. 어떤 아이디어? : /
trainoasis

2
@trainoasis 귀하의 .flv는 H.264 비디오 및 AAC 오디오를 포함하지 않습니다. -codec copy.mp4 파일로 수정 되지 않은 오디오 / 비디오 데이터를 복사하는 것은 오디오 및 비디오가 이미 H.264 및 AAC로 인코딩 된 매우 드문 경우에만 작동합니다 . superuser.com/a/1009539/390946addpipe.com/blog/flv-to-mp4를 참조하십시오 .
Octavian Naicu

3

avconvffmpeg본질적으로 같은 것입니다. [매우 최근에 약간의 발산이 있지만 직접 컴파일하면 집에 쓸 글이 많지 않습니다. ffmpeg예를 들어 우분투 저장소에 제공된 파일은 오래되었으며 해당 비디오 크기로 고통받습니다. 비디오가 잘못된 비율을 가지고 있다고 말하지만, ffmpeg컴파일 가이드 를 읽고 git에서 컴파일하려는 경우 대부분의 OS에서 제공되는 이전 버전의 문제는 없습니다. 참조 감가 상각 경고는 avconv그들이 시도하고 대체 할 새로운 폴더의 유틸리티를 만든 사실을 말하고 ffmpeg, 그러나입니다 SO 광범위하게 그들은 우리가에서 소프트 링크를 만드는 모든 것을 차단하려고해도 것을 사용 avconvffmpeg 어쨌든 그들은 일을 멈추고 버리지 않을 것입니다.]]

사용하는 것은 나쁜 일이 아닙니다. avconv난 본질적으로 빈 메시지 인 감가 상각 경고를 언급 한 답글을 보았습니다 .ffpmeg에 대한 대안은 여기에 더 현실적인 avconv를 시도 할 수 있습니다.

avconv -i inputfile.flv -map 0 -c:v libx264 -c:a copy outputfile.mp4

정말 같은

ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis

본질적으로 첫 번째에는 짧은 옵션을 사용하고 두 번째에는 더 다양한 옵션을 사용합니다.

ALSO -map 0는 오디오 트랙을 참조하므로 mp4a다중 오디오 트랙을 잘 처리 할 수있는 것을 사용하는 경우 모든 오디오 스트림을 결과 파일로 복사하기 위해 이것을 해제 할 수 있습니다. 동일한 파일에서 여러 오디오 트랙을 지원하지 않는 코덱을 사용하는 경우에만 필요한 경우 필요한 오디오를 모두 매핑하려는 것이 아닙니다. 물론 사용되는 공간을 최소화하려는 경우 파일 크기를 약간만 줄 이도록 하나만 지정할 수 있습니다. [오디오는 비디오 트랙 크기의 1/3과 같으며 관대합니다].

-c:v = codec(video)그래서 : -c:v libx264사용하는 것과 같습니다 : -vcodec libx264FYI; 이 예제와 동일합니다 :-c:v copy = -vcodec copy

또한 FLV의 경우 flv 파일은 비디오 또는 오디오 용 코덱을 여러 개 포함 할 수있는 컨테이너라는 점에서 avi와 동일합니다. 비디오 및 / 또는 오디오 스트림을 복사하거나 새로운 것에서 무엇이든 파일을 변환하기 전에 파일 자체 내에서 무엇이 사용되는지 확인하려면 먼저 선택한 미디어 검사 유틸리티를 사용하십시오. 따라서 한 FLV에 가장 적합한 명령은 다른 FLV에 대해 동일하지 않을 수도 있습니다 (물론 동일한 소스에서 여러 FLV를 가져 오는 경우 동일한 방식으로 인코딩되지만 보장되는 것은 아닙니다).

nit pick을 시도하지 않고 웹 검색 에서이 문제를 극복하고 사람들을 위해 물건을 명확하게 설명하려고했습니다.

이 답변 아래에 회신에 대해이 답변이 표시되는 것처럼 YES를 실행하는 ffmpeg는 항상이 메시지를 게시 할 것입니다.이 두 유틸리티는 여전히 거의 동일한 유틸리티이며 차이가 거의 없기 때문입니다. 거의 모든 경우에 두 명령을 사용하여 정확히 동일한 결과를 얻어야합니다. 이것이 반드시 전체 코드를 다시 변환해야하는 것은 아닙니다. 왜 그렇습니까? A, 필요하지 않은 경우 시간을 절약하고 B 파일을 이미 비디오 코덱으로 압축 한 파일을 다시 트랜스 코딩하는 경우 이미 압축 된 내용에 대해 압축 루틴을 실행하고 있습니다. 소스보다 품질이 떨어집니다. AVI와 같은 FLV는 다른 코덱의 컨테이너 일 뿐이므로 flv는 FLV 래퍼 내에서 기술적으로 MP4가 될 수 있습니다. 그래서, 그것은 비디오 및 ausio 코덱에 대해 소스 flv가 트랜스 코딩 해야하는지 여부와 비교하여 변환하는 것과 비교합니다. FLV 내에서 오디오 용으로 H264 MP4 비디오 및 MP4a를 사용한 경우 MP4 비디오 대신 실제 MP4로 읽히도록 파일을 복사하고 파일 헤더 만 조정하면됩니다. FLV 파일 내부


3

이 안내서 에 따르면 AV 레코딩없이 FLV를 MP4로 변환하는 올바른 명령은 다음과 같습니다.

ffmpeg -i input.flv -c copy -copyts output.mp4

AVC 비디오 및 AAC 또는 MP3 오디오와 함께 모든 경우에 완벽하게 작동했습니다.


-1

ffmpeg를 사용할 때 avconv를 사용하라는 경고 메시지가 표시됩니다. avconv를 사용하여 좋은 결과를 얻었습니다.

avconv -i inputfile.flv -map 0 -c : v libx264 -c : 복사 출력 파일 .mp4

man avconv자세한 내용을 읽으십시오 .


1
ffmpeg그 자체 는 더 이상 사용되지 않습니다 . 보기 좋게 보이는 이유는 품질에 대한 기본 설정이 좋은 x264 인코더를 지정하기 때문입니다.
slhck

-2

video_flv_to_mp4다음 내용으로 호출되는 쉘 스크립트를 작성하는 것이 좋습니다 .

ffmpeg -i $1 -sameq -ar 22050 -vcodec libx264 $1.mp4 

그런 다음 다음과 같이 실행하십시오.

$ video_flv_to_mp4 video.flv

video.flv.mp4 파일이 제공됩니다.


4
-sameq더 이상 ffmpeg에 유효한 옵션이 아닙니다. 또한 "동일한 품질"을 의미하지는 않습니다. 이 게시물 도 참조하십시오 .
slhck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.