Newest 'x264' Questions - Stack Overflow
Les articles publiés sur le site
-
What are the licence free codecs for FFMPEG ?
8 avril, par FunkyPizzaSo I've recently started implementing ffmpeg in an application that I do intend to distribute commercially. And I've had an hard time getting my head around the whole licensing process.
The most commonly answered question I've seen seems to be about x264 which requires a paid licence from x264.org in order to use it commercially (right?). I started to look into mpeg4 instead but that too seemed to be locked behind some patent licensing fee (https://www.mpegla.com/programs/mpeg-4-visual/license-agreement/).
I guess my question is the following, what video encoders compatible with FFMPEG are fully free to use?
Yes I barely know what I'm talking about, but I feel like I'm missing the elephant in the room here...
-
How to create IDR I-slice frame for H264 bytestream ?
19 mars, par galukI depacketize the H264 video fragments from an IP.RTP stream and save them to video.ivf file. After depacketizing i have only [SPS] ,[PPS] and [non-IDR slice]. I try to create IDR slice by using x264 lib. x264 lib creates IDR frame which consists of 0x000001[SPS] 0x000001[PPS] 0x0001[SE slice] and 0x0001[I slice]. i insert it in the beginning of my file. But when i try to play this with VLC player it doesn't plays well. if i convert it to video.mp4 by ffmpeg i get playablr file. I think the problem is that after creating IDR frame with x264 lib I get SPS and PPS frames different from those that I get from the stream. My question is how to set parameters for x264 if i have real SPS and PPS frames to get the same SPS and PPS frames.
Here is my code:
x264_param_t param;
`x264_param_t param`; `/* Get default params for preset/tuning */ x264_param_default_preset(¶m, "medium", NULL);` `/* Configure non-default params */ param.i_csp = X264_CSP_I420; param.i_width = width;//640 GET FROM SPS !!!!!!!!!! param.i_height = height;//360; GET FROM SPS !!!!!!!!!!!!!! param.b_vfr_input = 0; //frame rate param.b_repeat_headers = 1; param.b_annexb = 1; `x264_t *encoder = x264_encoder_open(¶m);` if (encoder) { // These are the two picture structs. Input must be alloc() // Output will be created by the encode process x264_picture_t pic, pic_out; int r = x264_picture_alloc(&pic, X264_CSP_I420, width, height); if (r == 0) { pic.i_type = X264_TYPE_IDR; int y_bytes = width * height; int uv_bytes = width * height / 4; UCHAR* result = pic.img.plane[0]; // luma for (unsigned int y = 0; y < height; y++) { for (unsigned int x = 0; x < width; x++) pic.img.plane[0][y * width + x] = 0x16; } // chroma for (unsigned int y = 0; y < height / 2; y++) { for (unsigned int x = 0; x < width / 2; x++) { pic.img.plane[1][y * width / 2 + x] = 0x16; pic.img.plane[2][y * width / 2 + x] = 0x80; } } int i_frame_size = x264_encoder_encode(encoder, &nal, &i_nal, &pic, &pic_out); } }`
Maybe i should set another parameters for x264_param_t param which i can get from SPS and PPS
can someone help me with this issue
-
ffmpeg not working after update to Mavericks
24 février, par Hudson BuddyAfter recently updating to Mavericks 10.9.5, my installation of ffmpeg has been bugging out
Error:
dyld: Library not loaded: /usr/local/lib/libx264.142.dylib Referenced from: /usr/local/bin/ffmpeg Reason: image not found Trace/BPT trap: 5
Any thoughts? I'm not very familar with manual compiling and I installed ffmpeg through Homebrew.
I tried uninstalling and doing:
brew install ffmpeg --HEAD brew install ffmpeg --build-from-source
but it spits back a ./configure error
==> ./configure --prefix=/usr/local/Cellar/ffmpeg/2.4.2 --enable-shared --enable-pthreads --enable-gpl --enable-version3 --enable-nonfree --enable-hardcoded-tables --enable-avresample If you think configure made a mistake, make sure you are using the latest version from Git. If the latest version fails, report the problem to the ffmpeg-user@ffmpeg.org mailing list or IRC #ffmpeg on irc.freenode.net. Include the log file "config.log" produced by configure as this will help solve the problem. READ THIS: https://github.com/Homebrew/homebrew/wiki/troubleshooting These open issues may also help: gpac 0.5.0 doesn't build against ffmpeg 2.4.1 (https://github.com/Homebrew/homebrew/issues/32978)
-
Error Linking FFmpeg with libx264 : Undefined Reference to __imp_x264_encoder_open_163
23 février, par zeyuI'm attempting to compile FFmpeg with libx264 support on Windows using MinGW-w64, but I'm encountering a linking error when building . The error points to an undefined reference to in . Here are the details of the error message:libavcodec/avcodec-57.dll__imp_x264_encoder_open_163libx264.o
In fact, I want to run the AccMPEG branch from https://github.com/Alex-q-z/myh264.git, and I am looking to obtain an executable (exe) to run on Windows.
LD libavcodec/avcodec-57.dll E:/MSY/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/13.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: libavcodec/libx264.o: in function `X264_init': E:\MSY\home\myh264\ffmpeg-3.4.8/libavcodec/libx264.c:818: undefined reference to `__imp_x264_encoder_open_163' collect2.exe: error: ld returned 1 exit status make: *** [ffbuild/library.mak:103: libavcodec/avcodec-57.dll] Error 1
Here's what I've tried so far:
Ensuring libx264 is compiled with shared library support using .--enable-shared Verifying that the libx264 version is compatible with the version of FFmpeg I'm compiling. Adding the path to libx264 binaries to my PATH environment variable. Environment Details:
OS: Windows 11 MSYS2 MinGW-w64 version: 13.2.0 FFmpeg version: 3.4.8 libx264 version: unknown Questions:
What could be causing this undefined reference error? Is there a specific version of libx264 that's known to work with FFmpeg 3.4.8? Are there additional flags or configurations I should use when compiling libx264 or FFmpeg to avoid this issue? Any guidance or suggestions would be greatly appreciated. Thank you in advance!
In fact, I want to run the AccMPEG branch from https://github.com/Alex-q-z/myh264.git, and I am looking to obtain an executable (exe) to run on Windows.
-
Why is a file unplayable in Windows Media Player ?
21 février, par zhangI have written some code to generate a MP4 video. This is a simplified version of the code:
#include
#include #include #include #include -
#include
extern "C"
{
#include "libavformat/avformat.h"
#include "libavutil/frame.h"
#include "libavcodec/avcodec.h"
#include "libavutil/imgutils.h"
}
using namespace std;
const int output_width = 180;
const int output_height = 320;
int main(int argc, char **argv)
{
AVCodec *output_avc = avcodec_find_encoder_by_name("libx264");
if (!output_avc)
abort();
AVCodecContext *output_cc = avcodec_alloc_context3(output_avc);
if (!output_cc)
abort();
output_cc->time_base.num = output_cc->time_base.den = 1;
output_cc->pix_fmt = AV_PIX_FMT_YUV420P;
output_cc->width = output_width;
output_cc->height = output_height;
if (avcodec_is_open(output_cc) == 0)
{
if (avcodec_open2(output_cc, output_avc, 0) < 0)
abort();
}
string outf = "res.mp4";
AVFormatContext *output_ctx;
avformat_alloc_output_context2(&output_ctx, NULL, NULL, outf.c_str());
AVStream *out_stream = avformat_new_stream(output_ctx, 0);
out_stream->codecpar->codec_id = AV_CODEC_ID_H264;
out_stream->codecpar->codec_type = AVMEDIA_TYPE_VIDEO;
out_stream->codecpar->codec_tag = 0;
out_stream->codecpar->width = output_width;
out_stream->codecpar->height = output_height;
out_stream->codecpar->format = AV_PIX_FMT_YUV420P;
av_dump_format(output_ctx, 0, outf.c_str(), 1);
if (!(output_ctx->oformat->flags & AVFMT_NOFILE))
{
if (avio_open(&output_ctx->pb, outf.c_str(), AVIO_FLAG_WRITE) < 0)
abort();
}
if (avformat_write_header(output_ctx, NULL) < 0)
abort();
AVPacket packet;
AVFrame *frame;
int fileCount = 0;
for (int i = 0; i < 100; i++)
{
frame = av_frame_alloc();
frame->width = output_width;
frame->height = output_height;
frame->format = AV_PIX_FMT_YUV420P;
if (av_image_alloc(frame->data, frame->linesize, frame->width, frame->height, AV_PIX_FMT_YUV420P, 32) < 0)
abort();
frame->pts = 60000 * i;
frame->pkt_dts = 60000 * i;
if (avcodec_send_frame(output_cc, frame) < 0)
abort();
av_frame_free(&frame);
av_new_packet(&packet, 0);
while (avcodec_receive_packet(output_cc, &packet) >= 0)
{
packet.pos = -1;
packet.dts = 4500 * fileCount;
packet.pts = 4500 * fileCount;
packet.duration = 4500;
av_write_frame(output_ctx, &packet);
av_packet_unref(&packet);
av_new_packet(&packet, 0);
fileCount++;
}
av_packet_unref(&packet);
}
avcodec_free_context(&output_cc);
av_write_trailer(output_ctx);
if (output_ctx && !(output_ctx->oformat->flags & AVFMT_NOFILE))
avio_close(output_ctx->pb);
avformat_free_context(output_ctx);
}
Then, I compiled it (with
g++ encode.cpp -lavcodec -lavformat -lavutil -g
and libraries are installed via Ubuntu 20.04 apt) and run it. This is the MP4 file I get (2872 bytes, base64 encoded):AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAAB39tZGF0AAAAAWdkAAys 2UMCnn4QAAADABAAAAMAIPFCmWAAAAABaOvjyyLAAAABBgX//6rcRem95tlIt5Ys2CDZI+7veDI2 NCAtIGNvcmUgMTU1IHIyOTE3IDBhODRkOTggLSBILjI2NC9NUEVHLTQgQVZDIGNvZGVjIC0gQ29w eWxlZnQgMjAwMy0yMDE4IC0gaHR0cDovL3d3dy52aWRlb2xhbi5vcmcveDI2NC5odG1sIC0gb3B0 aW9uczogY2FiYWM9MSByZWY9MyBkZWJsb2NrPTE6MDowIGFuYWx5c2U9MHgzOjB4MTEzIG1lPWhl eCBzdWJtZT03IHBzeT0xIHBzeV9yZD0xLjAwOjAuMDAgbWl4ZWRfcmVmPTEgbWVfcmFuZ2U9MTYg Y2hyb21hX21lPTEgdHJlbGxpcz0xIDh4OGRjdD0xIGNxbT0wIGRlYWR6b25lPTIxLDExIGZhc3Rf cHNraXA9MSBjaHJvbWFfcXBfb2Zmc2V0PS0yIHRocmVhZHM9MTAgbG9va2FoZWFkX3RocmVhZHM9 MSBzbGljZWRfdGhyZWFkcz0wIG5yPTAgZGVjaW1hdGU9MSBpbnRlcmxhY2VkPTAgYmx1cmF5X2Nv bXBhdD0wIGNvbnN0cmFpbmVkX2ludHJhPTAgYmZyYW1lcz0zIGJfcHlyYW1pZD0yIGJfYWRhcHQ9 MSBiX2JpYXM9MCBkaXJlY3Q9MSB3ZWlnaHRiPTEgb3Blbl9nb3A9MCB3ZWlnaHRwPTIga2V5aW50 PTI1MCBrZXlpbnRfbWluPTEgc2NlbmVjdXQ9NDAgaW50cmFfcmVmcmVzaD0wIHJjX2xvb2thaGVh ZD00MCByYz1jcmYgbWJ0cmVlPTEgY3JmPTIzLjAgcWNvbXA9MC42MCBxcG1pbj0wIHFwbWF4PTY5 IHFwc3RlcD00IGlwX3JhdGlvPTEuNDAgYXE9MToxLjAwAIAAAAFliIQAF//+7oK+BTeKk2/DVSCr MT4MeFdCVv4gBUyU0LeeB3T/sW2Y2XML/dzzR/1dfS/wWmJ+KGm0PX/sHuGpnyAn2gs5wsYABhgA WoTf+9Y7PDk9QANDAAAAAUGaJGxBf/rtlHe1U64AATcAAAABQZ5CeILfbxYfLVgA1IEAAAABAZ5h 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 YQAAAAEAAAAATGF2ZjU4LjI5LjEwMA==
And I try to play it in Media Player in Windows 11. It can not play at all and fails with a 0xC00D36C4 error.
Later I compiled and run the same code in Ubuntu 22.04. This time I got a 3161 byte file (base64 encoded) which can be correctly played in Media Player:
AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAACF5tZGF0AAAAGWdkAAys 2UMCnn4QAAADABAAAAMAIPFCmWAAAAAGaOvjyyLAAAACrgYF//+q3EXpvebZSLeWLNgg2SPu73gy NjQgLSBjb3JlIDE2MyByMzA2MCA1ZGI2YWE2IC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENv cHlsZWZ0IDIwMDMtMjAyMSAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9w dGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1o ZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2 IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0 X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTEwIGxvb2thaGVhZF90aHJlYWRz PTEgc2xpY2VkX3RocmVhZHM9MCBucj0wIGRlY2ltYXRlPTEgaW50ZXJsYWNlZD0wIGJsdXJheV9j b21wYXQ9MCBjb25zdHJhaW5lZF9pbnRyYT0wIGJmcmFtZXM9MyBiX3B5cmFtaWQ9MiBiX2FkYXB0 PTEgYl9iaWFzPTAgZGlyZWN0PTEgd2VpZ2h0Yj0xIG9wZW5fZ29wPTAgd2VpZ2h0cD0yIGtleWlu dD0yNTAga2V5aW50X21pbj0xIHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhl YWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02 OSBxcHN0ZXA9NCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAWmWIhAAV//7sz34FN2u2Mv14 OUV1GW52wf6mv09Y/+Eq5ywBqFdjI7RiQruDqkHmD84Ah+1pD+u+Ju9pbKoJmVnS6c+DhXKzmU8A AEJAA5Q0japbJSyuwAA24QAAAENBmiRsR/93Hj0GFYn+ROeWur9cQ/zaceE37Gsw8XYMMBmtQahK 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 HWRhdGEAAAABAAAAAExhdmY1OC43Ni4xMDA=