FFMPEG chuyển đổi flv sang mp4 mà không làm giảm chất lượng [trùng lặp]


55

Câu hỏi này đã có câu trả lời ở đây:

Hiện tại tôi đang chuyển đổi các tệp flash .flv sang các tệp .webm và .mp4 để sử dụng với trình phát video HTML5.

_

Tôi sử dụng lệnh ffmpeg này cho WEBM: ffmpeg -i filename.flv -vcodec libvpx -acodec libvorbis filename.webm hoạt động rất tốt và kích thước tệp vẫn tương đối giống nhau (quan trọng).

_

Đối với MP4 tôi đang sử dụng như sau: ffmpeg -i filename.flv -sameq -ar 22050 filename.mp4

Nó chuyển đổi thành .mp4 tốt và ngăn chặn mọi mất chất lượng nhưng kích thước tệp gần gấp ba lần kích thước.

Công thức ffmpeg nào có thể được sử dụng để chuyển đổi sang MP4 mà không làm giảm chất lượng quá nhiều và ngăn kích thước tệp cao hơn nhiều?

Câu trả lời:


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

Bạn phải chỉ định codec video được sử dụng. Trong lệnh của bạn, bạn không chỉ định -vcodechoặc -c:vvì vậy ffmpeg sử dụng codec mặc định cho MP4 ( mpeg4) không có hiệu quả nén rất tốt. Thay vào đó, hãy thử sử dụng libx264 và đặt CRF, đây là mức chất lượng (thấp hơn là tốt hơn, mặc định là 23 và các giá trị lành mạnh nằm trong khoảng từ 18 đến 28).

Mã hóa với libx264 là một loại phức tạp, vì vậy bạn nên tìm hướng dẫn mã hóa H.264 .

Bạn cũng cần chỉ định -strict experimentalnếu không bạn có thể nhận được: "Bộ mã hóa 'aac' là thử nghiệm nhưng codec thử nghiệm không được bật, hãy thêm '-strict -2' nếu bạn muốn sử dụng nó."


1
Điều này làm mất quá nhiều thời gian và kết quả là mp4 rất méo, mất pixel, v.v. Có ý tưởng nào tại sao có thể như vậy không? : /
trainoocation 04/11/2015

Bộ giải mã video mặc định cho định dạng mp4 là không cần thiết mpeg4. Theo đầu ra ffmpeg --help muxer=mp4trên máy của tôi, ffmpeg sử dụng h264 làm codec video mặc định của mp4.
doubleDown

1
@doubleDown Câu trả lời của tôi đã cũ - từ năm 2011. Có lẽ họ đã thay đổi mặc định tại một số điểm kể từ đó.
sashoalm

43

Lệnh này chỉ thay đổi container mà không cần mã hóa lại

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

bạn có biết cách tạo tập lệnh để chuyển đổi hàng loạt nhiều video trong cùng một thư mục không?
ttoine

có, trên windows tạo tệp convert.bat và đặt mã này vào đó : for %%a in ("*.flv") do ffmpeg -i "%%a" -codec copy "%%~na.mp4", sau đó thực hiện convert.bat trong thư mục với các tệp * .flv
c97

1
Đối với tôi, cú ném này Không thể ghi tiêu đề cho tệp đầu ra # 0 (tham số codec không chính xác?): Đối số không hợp lệ. Có ý kiến ​​gì không? : /
trainoocation 04/11/2015

2
@trainoocation .flv của bạn không chứa video H.264 và âm thanh AAC. Sao chép dữ liệu âm thanh / video chưa được xử lý -codec copyvào tệp .mp4 chỉ hoạt động trong trường hợp rất hiếm khi âm thanh và video đã được mã hóa với H.264 và AAC. Xem superuser.com/a/1009539/390946addpipe.com/blog/flv-to-mp4 .
Octavian Naicu

3

avconvffmpegvề cơ bản là điều tương tự. [kể từ RẤT thời gian gần đây có một số phân kỳ, nhưng không thực sự nhiều để viết về nhà nếu bạn biên dịch riêng bạn ffmpeg[một trong những quy định tại Repos Ubuntu ví dụ là OLD và bị mà kích thước video không phải là một blah thỏa thuận blah blah [cơ bản cố gắng để cho bạn biết video có tỷ lệ sai], nhưng nếu bạn bận tâm đọc ffmpeghướng dẫn biên dịch và biên dịch nó từ git thì nó không có vấn đề gì trong các phiên bản cũ hơn trong hầu hết các hệ điều hành. cảnh báo khấu hao đề cập đến avconvlà nói cho bạn biết rằng họ đã tạo ra một util mới hơn để cố gắng và thay thế ffmpeg, nhưng nó là SO sử dụng rộng rãi rằng ngay cả khi họ đã cố gắng để cắt nó đi, chúng tôi sẽ tất cả được tạo softlinks từ avconvđếnffmpeg dù sao đi nữa họ sẽ không dừng công việc và bỏ nó.]]

Nó không phải là một điều xấu để sử dụng avconv, tôi chỉ thấy một câu trả lời đề cập đến cảnh báo khấu hao mà về cơ bản là một tin nhắn trống nên là một thay thế cho ffpmeg bạn có thể thử avconv đúng hơn với trường hợp ở đây.

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

thực sự là CÙNG

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

về cơ bản trong lần đầu tiên bạn đang sử dụng các tùy chọn tay ngắn và trong lần thứ hai là sự đa dạng bằng văn bản hơn.

ALSO -map 0đang đề cập đến các rãnh âm thanh, vì vậy nếu sử dụng thứ gì mp4ađó có thể xử lý nhiều rãnh âm thanh tốt, bạn có thể bỏ qua phần này để sao chép tất cả các luồng âm thanh vào tệp kết quả. Điều này chỉ được yêu cầu nếu sử dụng codec không hỗ trợ nhiều rãnh âm thanh trong cùng một tệp thì bạn sẽ muốn ánh xạ âm thanh cần thiết chứ không phải tất cả. Tất nhiên, nếu cố gắng giảm thiểu không gian sử dụng, bạn có thể chỉ định một lần thử và loại bỏ một chút kích thước khỏi tệp [âm thanh có thể bằng 1/3 kích thước của bản nhạc video [và đó là hào phóng]].

-c:v = codec(video)vì vậy: -c:v libx264giống như sử dụng: -vcodec libx264FYI; tương tự với ví dụ này:-c:v copy = -vcodec copy

và hơn nữa đối với FLV hãy cẩn thận, tệp flv giống như một avi ở chỗ nó là một thùng chứa có thể chứa bất kỳ số lượng codec nào cho video hoặc âm thanh. Trước tiên, bạn muốn sử dụng tiện ích kiểm tra phương tiện để xem những gì được sử dụng trong chính tệp đó trước khi bạn chọn sao chép video và / hoặc luồng âm thanh hoặc nếu bạn muốn truyền nó từ bất cứ thứ gì sang một thứ mới. Vì vậy, lệnh hoạt động tốt nhất cho một FLV có thể không giống với một FLV khác [tất nhiên là USUALLY nếu nhận được nhiều FLV từ cùng một nguồn, chúng sẽ được mã hóa theo cùng một cách nhưng nó không bao giờ là đảm bảo].

Không cố gắng để chọn nit chỉ chạy qua điều này trong tìm kiếm trên web và muốn cố gắng giúp làm rõ mọi thứ cho mọi người một chút.

Một lần nữa vì câu trả lời này cho biết câu trả lời bên dưới câu này CÓ chạy ffmpeg sẽ luôn đăng thông báo đó về cơ bản là rỗng vì 2 tiện ích này thực sự vẫn chỉ là cùng sử dụng với rất ít sự khác biệt. Trong hầu hết các trường hợp, bạn sẽ nhận được kết quả chính xác bằng cách sử dụng một trong hai lệnh. Điều này không nhất thiết sẽ dẫn đến việc chuyển mã lại đầy đủ, tại sao? A, nếu không cần thiết, nó sẽ tiết kiệm rất nhiều thời gian và B nếu bạn chuyển mã lại một tệp, nó đã được nén vào một codec video, về cơ bản bạn đang chạy một thói quen nén đối với một thứ đã được nén và sẽ luôn dẫn đến chất lượng kém hơn nguồn. Hầu hết các codec mới hơn có khả năng tương thích chéo [không phải tất cả] như flv về mặt kỹ thuật có thể là một MP4 trong trình bao bọc FLV vì FLV như AVI chỉ là nơi chứa các codec khác. Vì thế, nó phụ thuộc vào flv nguồn có gì cho video và codec ausio so với những gì bạn đang chuyển đổi thành liệu nó có cần được chuyển mã hay không. Nếu trong FLV họ đã sử dụng video MP4 H264 và MP4a cho âm thanh, bạn không cần phải chuyển mã lại thứ mà bạn chỉ cần sao chép nó ra và điều chỉnh các tiêu đề tệp để nó được đọc dưới dạng MP4 thực sự thay vì video MP4 trong một tập tin FLV.


3

Theo hướng dẫn này , lệnh thích hợp để chuyển đổi FLV sang MP4 mà không cần mã hóa AV là:

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

Nó hoạt động hoàn hảo với tôi trong mọi trường hợp với video AVC và âm thanh AAC hoặc MP3.


-1

Khi sử dụng ffmpeg tôi nhận được cảnh báo không dùng nữa để sử dụng avconv. Sử dụng avconv tôi nhận được kết quả tốt đẹp:

avconv -i inputfile.flv -map 0 -c: v libx264 -c: một bản sao outputfile.mp4

Đọc man avconvđể biết thêm thông tin.


1
ffmpegbản thân không bị phản đối . Lý do có vẻ tốt là vì bạn chỉ định bộ mã hóa x264 có cài đặt mặc định đẹp về chất lượng.
slhck

-2

Tôi đề nghị bạn tạo một tập lệnh shell cho video_flv_to_mp4nội dung được gọi với nội dung sau:

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

Sau đó chạy nó như thế này:

$ video_flv_to_mp4 video.flv

Nó sẽ cung cấp cho bạn một tệp video.flv.mp4.


4
-sameqkhông phải là một lựa chọn hợp lệ cho ffmpeg nữa. Nó cũng không có nghĩa là "cùng chất lượng". Xem thêm bài này .
slhck
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.