새 파일을 만들지 않고 ffmpeg를 사용하여 스트림 추가


2

메타 데이터 (설명, 삽화, 배우 등)로 태그 된 일부 비디오 (.mp4)가 있으며 이제 스트림으로 추가하려는 자막 파일이 있습니다.

나는 사용할 수있다. ffmpeg 동영상과 .srt 파일을 입력으로 가져오고 새 출력 파일을 가져 오지만 출력은 항상 컨테이너 수준의 모든 메타 데이터를 잃어 버리는 것처럼 보일뿐 아니라 때로는 원래 파일로 되돌아가 삭제하는 경우가 있습니다.

새 파일을 만들지 않고 비디오 파일에 자막 파일을 새 스트림으로 추가 할 수있는 방법이 있습니까? 원본 비디오 파일을 수정하면됩니까?

Subler와 같은 프로그램이 이것을하는 것처럼 보이지만 커맨드 라인에서 이해할 수 있습니까?

답변:


4

파일을 내부 편집 할 수 없습니다. ffmpeg - 항상 새로운 출력 파일을 생성해야합니다. 나는 이것이 거의 모든 프로그램의 기본값이라고 생각하며, 많은 경우에 출력 파일은 작성 중에 프로그램에 의해 검색 가능하고 편집 가능해야합니다. *

만약 레알 메타 데이터를 잃어 버리는 문제는 다음과 같습니다.

ffmpeg -i input.mp4 -i subtitles.srt \
-c copy -c:s mov_text \
-map 0 -map 1 -map_metadata 0 output.mp4

당신은 가지고 있어야합니다. ffmpeg SRT (SubRip)을 (으)로 변환 MP4 호환 자막 -c:s mov_text, 그렇지 않으면 ffmpeg 스트림을 복사하는 것을 거부합니다. **

그만큼 -map_metadata 옵션은 입력 된 MP4 파일의 모든 전체 메타 데이터를 출력 (예 : 컨테이너 수준에서 설정 한 내용)으로 복사해야합니다. 비트 스트림 수준의 메타 데이터는 추가 옵션없이 자동으로 복사해야합니다.

물론, sponge moreutils에서 입력을 "흡수"하여 파일을 적절한 위치에 덮어 쓸 수 있지만 검색 할 수없는 출력을 지원하는 muxer에서만 작동하므로 MP4에서는 작동하지 않습니다.
** 문제가 있습니다. mov_text 인코딩 된 자막 및 QuickTime 플레이어 FFmpeg 티켓 # 1845 그리고 또한 # 2488 .


오 굿. 나는 그런 메타 데이터를 매핑 할 수 있는지 몰랐다. 스트림을 '주입'할 수는 없지만 매우 편리합니다. 너는 ~라고 말한다 only works with muxers that support non-seekable output, and therefore not with MP4 그렇다면 어떻게 Subler가 mp4로 이것을 할 수 있을까요? MP4에 자막 스트림을 추가 할 때 2 초 미만이 걸리므로 완전히 새로운 파일을 만들고 오래된 파일을 삭제할 수 없습니까?
Sam

나는 이것이 디자인 선택이라고 생각한다. ffmpeg 개발자들은 결코 그렇게하려고하지 않았습니다. 당연히, 나는 subler가하는 무슨을 모른다 - 나는 그것의 근원을 보지 않았다. 또한 임시 파일을 사용하여 원본을 삭제하고 새 파일로 교체 할 수도 있습니다. 비트 스트림 복사본은 매우 빠르기 때문에 차이점을 알 수 없습니다. 나는 생각한다. MP4Box 또한 in-place 편집을 할 수 있지만, 나는 항상 옵션 구문을 잊어 버린다 ... 정말 많이 사용하지는 않았다.
slhck

프로세스 대체 및 단순 사용 cat, 나는 장소에서 파일을 수정할 수 있었다. 빠르게 작동하고 훌륭하게 작동합니다. 어쨌든이 문제가 있습니까?
rien333

1
@ rien333 읽을 때 입력 파일과 관련하여 출력 파일을 쓰는 시점에 따라 다릅니다. 출력 컨테이너에 따라 다르다는 것을 알 수 있습니다 (일부 형식의 경우 검색 가능해야 함). 일반적으로 그렇게하지 말고 대신 임시 파일을 사용하십시오. 위 게시물의 첫 번째 각주를 참조하십시오.
slhck
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.