пн, 7 нояб. 2022 г., 20:50 Andrew Randrianasulu <randrianasulu@gmail.com>:
пн, 7 нояб. 2022 г., 20:30 Andrew Randrianasulu <randrianasulu@gmail.com>:
пн, 7 нояб. 2022 г., 19:40 Andrew Randrianasulu <randrianasulu@gmail.com>:
пн, 7 нояб. 2022 г., 19:10 Andrew Randrianasulu <randrianasulu@gmail.com>:
Because old thread now a bit too big for mobile gmail client.
Yes, I'll try to see if it fails same way on my end.
code seems to check first 100 frames
2528 static int field_probe(AVFormatContext *fmt_ctx, AVStream *st)2529 {2530 AVDictionary *copts = 0;2531 //av_dict_copy(&copts, opts, 0);2532 AVCodecID codec_id = st->codecpar->codec_id;2533 #if LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(58,134,100)2534 AVCodec *decoder = avcodec_find_decoder(codec_id);2535 #endif2536 #if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59,16,100)2537 const AVCodec *decoder = avcodec_find_decoder(codec_id);2538 #endif2539 AVCodecContext *ctx = avcodec_alloc_context3(decoder);2540 if( !ctx ) {2541 fprintf(stderr,"codec alloc failed\n");2542 return -1;2543 }2544 avcodec_parameters_to_context(ctx, st->codecpar);2545 if( avcodec_open2(ctx, decoder, &copts) < 0 ) {2546 fprintf(stderr,"codec open failed\n");2547 return -1;2548 }2549 av_dict_free(&copts);25502551 AVFrame *ipic = av_frame_alloc();2552 AVPacket ipkt;2553 av_init_packet(&ipkt);2554 int ilaced = -1;2555 for( int retrys=100; --retrys>=0 && ilaced<0; ) {2556 av_packet_unref(&ipkt);2557 int ret = av_read_frame(fmt_ctx, &ipkt);2558 if( ret == AVERROR_EOF ) break;2559 if( ret != 0 ) continue;2560 if( ipkt.stream_index != st->index ) continue;2561 if( !ipkt.data || !ipkt.size ) continue;2562 ret = avcodec_send_packet(ctx, &ipkt);2563 if( ret < 0 ) {2564 fprintf(stderr, "avcodec_send_packet failed\n");2565 break;2566 }2567 ret = avcodec_receive_frame(ctx, ipic);2568 if( ret >= 0 ) {2569 ilaced = ipic->interlaced_frame ? 1 : 0;2570 break;2571 }2572 if( ret != AVERROR(EAGAIN) )2573 fprintf(stderr, "avcodec_receive_frame failed %d\n", ret);2574 }2575 av_packet_unref(&ipkt);2576 av_frame_free(&ipic);2577 avcodec_free_context(&ctx);2578 return ilaced;
may be we can add flags to force interlaced vs progressive to bdwrite ... and/or debug why it fails.
sorry, not m2t or m2ts files were found on my main harddrive, so blind shot!
Terje, can you recompile bdwrite with attached patch and see if it improves situation?
err, I think second patch also needed, because ilace in bdwrite is just 1/0/-1 not more detailed.
finally found m2t file, for me bdwrite does not complain but resulting file is unplayable
this one contain real very short hdv sample with mp2 soundhttp://twenkid.com/os/3.m2t
note I used -b switch for new mkudffs so it works with 2048 blocks and not default 512
root@slax:/tmp# mkudffs -b 2048 /tmp/newfilename.udfs 25915 filename=/tmp/newfilename.udfs label=LinuxUDF uuid=6369651cdf849fbf blocksize=2048 blocks=25915 udfrev=2.01start=0, blocks=16, type=ERASE start=16, blocks=4, type=VRS start=20, blocks=76, type=ERASE start=96, blocks=16, type=MVDS start=112, blocks=16, type=ERASE start=128, blocks=4, type=LVID start=132, blocks=124, type=ERASE start=256, blocks=1, type=ANCHORstart=257, blocks=25400, type=PSPACE start=25657, blocks=1, type=ERASEstart=25658, blocks=1, type=ANCHOR start=25659, blocks=69, type=ERASE start=25728, blocks=16, type=RVDS start=25744, blocks=170, type=ERASE start=25914, blocks=1, type=ANCHORroot@slax:/tmp# mount -o loop /tmp/newfilename.udfs /mnt/test
root@slax:/tmp# bdwrite /mnt/test /home/guest/20081103140154.m2t
root@slax:/tmp# umount /mnt/test
playing result in many
root@slax:/tmp# mplayer -vo null br://tmp/newfilename.udfsMPlayer UNKNOWN-11.2.0 (C) 2000-2022 MPlayer Teamdo_connect: could not connect to socket connect: No such file or directoryFailed to open LIRC support. You will not be able to use your remote control. Playing br://tmp/newfilename.udfs. The hostname option must be an integer: tmp Struct bluray, field hostname parsing error: tmp libavformat version 59.33.100 (internal) bluray.c:707: Skipping broken unit at 0 bluray.c:255: 00000.m2ts: no timestamp for SPN 0 (got 0). clip 46909800-47511000. bluray.c:707: Skipping broken unit at 0 bluray.c:707: Skipping broken unit at 6144 bluray.c:255: 00000.m2ts: no timestamp for SPN 0 (got 0). clip 46909800-47511000. bluray.c:707: Skipping broken unit at 0 bluray.c:707: Skipping broken unit at 6144 bluray.c:707: Skipping broken unit at 12288 bluray.c:707: Skipping broken unit at 18432 bluray.c:707: Skipping broken unit at 24576
{and so on}
on the other hand reencoding audio like this
root@slax:/tmp# ffmpeg -i /home/guest/20081103140154.m2t -c:v copy -c:a ac3 -b:a 384k 2008.m2ts
and repeating steps with mkudffs / mount /bdwrite /umount resulted in working in mplayer file!
I have 'old' 4.4 ffmpeg, so no bluray encoding for me.
also, I used wcalc as console calc