Rasio aspek yang benar tanpa mengode ulang file video

18

Saya memiliki aliran video dengan properti berikut:

Stream #0:0: Video: mpeg4 (Advanced Simple Profile) (XVID / 0x44495658), yuv420p, 720x416 [SAR 1:1 DAR 45:26], 1908 kb/s, 25 fps, 25 tbr, 25 tbn, 25 tbc

Ketika saya menjalankannya di VLC, saya harus menekan "A" untuk mengubah rasio aspek menjadi "4: 3" untuk membuat video ditampilkan dengan rasio aspek yang benar.

Melihat fakta-fakta video, Apakah kesalahan bahwa a) video yang sebenarnya telah salah diregangkan dalam data piksel, atau b) hanya ada beberapa nilai metadata yang telah salah diatur?

Jika yang pertama, saya tahu saya bisa menyandikan ulang video dan mengubah lebar dan tinggi. Tetapi jika yang terakhir, perintah ffmpeg apa yang harus saya jalankan untuk memperbaiki metadata tanpa meng-encode ulang video itu sendiri?

sebagainya
sumber

Jawaban:

36

Ada perbedaan antara Sample Aspect Ratio (SAR) dan Display Aspect Ratio (DAR). Jika Anda ingin mengubah video untuk ditampilkan pada 4: 3, Anda harus mengubah piksel sebenarnya dalam gambar (dengan menskalakan piksel dan mengubah SAR), atau dengan menetapkan bendera metadata yang pada tingkat wadah yang memberitahu eksternal pemutar media untuk meregangkan gambar ke DAR yang Anda inginkan.

Anda tidak akan dapat mengubah skala piksel dan mengubah SAR tanpa menerapkan filter video. Jika Anda memilih metode ini, Anda akan diminta untuk melakukan transkode file - karena Anda tidak dapat "stream menyalin" aliran video saat menerapkan filter video.

Untuk skala gambar dan mengubah SAR (saat transcoding), coba:

ffmpeg -i <INPUT_FILE> -vf scale=720:540 -c:v <Video_Codec> <OUTPUT_FILE>

Di sisi lain, jika Anda hanya ingin mengubah bendera metadata dan menyesuaikan DAR, Anda akan dapat melakukan streaming menyalin video. Untuk melakukan ini, coba:

ffmpeg -i <INPUT_FILE> -aspect 720:540 -c copy [OUTPUT_FILE]
occvtech
sumber
Luar biasa! Mengubah aspek langsung bekerja!
sebagainyarin
1
Anda tidak dapat menggunakan -c copydan skala pada saat yang sama; namun Anda dapat menggunakan -aspectuntuk mengubah rasio aspek di tingkat wadah (tetapi tidak pada tingkat aliran).
Logan
@ LordNeckbeard, menggunakan -aspecttidak berfungsi untuk pemutaran ffplay, tetapi tidak di WMP atau MPC-HC. Itu menambahkan item SAR / DAR tambahan ke Stream #…baris info di FFmpeg/probe/playtetapi tampaknya tidak menjadi solusi untuk pemutaran umum. Meregangkan video dengan jendela sepertinya solusi termudah untuk pemutaran MPC-HC.
Lumi
tidak bekerja untuk saya untuk MPEG2 tanpa reencoding
Mikhail V
Saya tidak tahu mengapa itu tidak berhasil untuk saya. Itu hanya menghasilkan video yang sama!
Tina J
4

Jawaban Delgado benar bahwa MP4Box dapat melakukan ini, tetapi -paropsi tidak berfungsi sebagaimana dijelaskan. Dengan -outparameter (agar tidak mengganggu file asli Anda):

mp4box source.mp4 -out target.mp4 -par stream-number=width:height

Saat Anda menggunakan -par stream-number=width:height, Anda menentukan rasio aspek piksel - yaitu, hasil membagi rasio aspek perangkat dengan rasio aspek penyimpanan. (Dengan kata lain, Anda menggambarkan rasio aspek piksel sumber.) Misalnya, Anda memiliki sumber DVD 720x480, dan rasio aspek tampilan yang benar adalah 4: 3. Untuk kasus ini, Anda perlu:

mp4box source.mp4 -out target.mp4 -par 1=8:9

karena (4/3) / (720/480) = 8/9.

Jika sumber mewakili piksel SD NTSC yang sebenarnya (dalam hal ini hanya 704 × 480 piksel pusat yang seharusnya dipetakan ke layar 4 × 3, dengan 8 piksel overscan di kedua sisi), perintah yang benar adalah:

mp4box source.mp4 -out target.mp4 -par 1=10:11

karena (4/3) / (704/480) = 10/11 - persis rasio aspek piksel referensi untuk video NTSC definisi standar.

Untuk kasus yang diberikan dalam pertanyaan, jika benar-benar 4: 3, itu memberikan rasio aspek piksel yang sangat aneh: (4/3) / (720/416) = 104/135. Lebar 720, yang menunjukkan sumber DVD; ini adalah video 25 fps, menyarankan PAL, tetapi PAR bekerja kurang dari 1, menyarankan NTSC. Bisa jadi 4: 5, saya kira (sangat dekat dengan 104: 135), tetapi saya tidak tahu apa pun yang menghasilkan rasio aspek piksel; mungkin coba dulu, dan kemudian coba 3: 4 jika masih terlihat terlalu melar secara horizontal. Jika Anda yakin itu tepat 4: 3, tentu saja, gunakan saja 104: 135.

Coises
sumber
3

ffmpeg tidak dapat mengubah parameter aliran video tanpa pengodean ulang, MP4Box (bagian dari gpac ) dan mkvmerge dapat. Dalam hal satu streaming video dan rasio aspek nyata / benar 4: 3, Anda mungkin ingin mencoba:

MP4Box -par 1=3:4 VideoFile.mp4

    "-par" : PixelAspectRatio (adjusts DAR + SAR with respect to the video resolution)
    "1"=   : stream number
    "3:4"  : aspect ratio (lower number 1st!)
    Changes are directly applied to "VideoFile.mp4", no copy

Untuk memverifikasi sebelum dan sesudah: ffmpeg -i VideoFile.mp4

Delgado
sumber
0

Mengubah SAR tanpa reencoding juga bekerja dengan ffmpegpada .mp4menggunakan h264_metadatasebagai Gyan menunjukkan di sini :

ffmpeg -i in.mp4 -c copy -bsf:v "h264_metadata=sample_aspect_ratio=4/3" out.mp4
drake7
sumber
Sementara ini secara teoritis dapat menjawab pertanyaan, akan lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini, dan menyediakan tautan untuk referensi.
MMM