简体   繁体   中英

ffmpeg not resize video with dvd format

I have a video and an audio file. I'm trying joining them and slice a piece of video and it's working:

ffmpeg -ss 0:0:1.950 -i "video.avi" -ss 0:0:1.950 -i "audio.mp3" -target pal-dvd -bufsize 9175040 -muxrate 50400000 -acodec ac3 -ac 2 -ab 128k -ar 44100 -t 0:0:5.997 -y "output.mpg"

The problem is when I try resize the video using the -vf filter, example:

ffmpeg -ss 0:0:1.950 -i "video.avi" -ss 0:0:1.950 -i "audio.mp3" -vf scale="1024:420" -target pal-dvd -bufsize 9175040 -muxrate 50400000 -acodec ac3 -ac 2 -ab 128k -ar 44100 -t 0:0:5.997 -y "output.mpg"

It doesn't work because of the argument: -target pal-dvd . If I remove this argument, the video resize but doesn't keep the quality I want.

-target pal-dvd is equal to -c:v mpeg2video -c:a ac3 -f dvd -s 720x576 -r 25 -pix_fmt yuv420p -g 15 -b:v 6000000 -maxrate:v 9000000 -minrate:v 0 -bufsize:v 1835008 -packetsize 2048 -muxrate 10080000 -b:a 448000 -ar 48000 . Your other options override these defaults, so you can simply use these options directly and remove the -s 720x576 and use your own size instead.

I'm not sure why you want to resize to 1024x420 and then use -target pal-dvd , but this option implies additional options. From ffmpeg_opt.c :

} else if (!strcmp(arg, "dvd")) {

    opt_video_codec(o, "c:v", "mpeg2video");
    opt_audio_codec(o, "c:a", "ac3");
    parse_option(o, "f", "dvd", options);

    parse_option(o, "s", norm == PAL ? "720x576" : "720x480", options);
    parse_option(o, "r", frame_rates[norm], options);
    parse_option(o, "pix_fmt", "yuv420p", options);
    opt_default(NULL, "g", norm == PAL ? "15" : "18");

    opt_default(NULL, "b:v", "6000000");
    opt_default(NULL, "maxrate:v", "9000000");
    opt_default(NULL, "minrate:v", "0"); // 1500000;
    opt_default(NULL, "bufsize:v", "1835008"); // 224*1024*8;

    opt_default(NULL, "packetsize", "2048");  // from www.mpucoder.com: DVD sectors contain 2048 bytes of data, this is also the size of one pack.
    opt_default(NULL, "muxrate", "10080000"); // from mplex project: data_rate = 1260000. mux_rate = data_rate * 8

    opt_default(NULL, "b:a", "448000");
    parse_option(o, "ar", "48000", options);

Also, option placement matters. If you want to resize and use -target then place the filtering after -target . Note that this will probably resize twice.

Or omit -target and manually declare each option and modify them to your desired specifications.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM