Skip to content

Commit 799ef91

Browse files
Merge branch 'leandromoreira:master' into master
2 parents 4052d49 + 68b5a5f commit 799ef91

8 files changed

Lines changed: 1044 additions & 23 deletions

File tree

.github/workflows/docker-image.yml

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
name: Docker Image CI
2+
3+
on:
4+
push:
5+
branches: [ "master" ]
6+
pull_request:
7+
branches: [ "master" ]
8+
9+
jobs:
10+
11+
build:
12+
13+
runs-on: ubuntu-latest
14+
15+
steps:
16+
- uses: actions/checkout@v4
17+
- name: Run hello example
18+
run: make make_hello
19+
- name: Run remuxing
20+
run: make make_remuxing
21+
- name: Run transcoding
22+
run: make make_transcoding
23+

0_hello_world.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ static void save_gray_frame(unsigned char *buf, int wrap, int xsize, int ysize,
2828

2929
int main(int argc, const char *argv[])
3030
{
31+
3132
if (argc < 2) {
3233
printf("You need to specify a media file.\n");
3334
return -1;

3_transcoding.c

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -328,17 +328,25 @@ int main(int argc, char *argv[])
328328
avformat_alloc_output_context2(&encoder->avfc, NULL, NULL, encoder->filename);
329329
if (!encoder->avfc) {logging("could not allocate memory for output format");return -1;}
330330

331-
if (!sp.copy_video) {
332-
AVRational input_framerate = av_guess_frame_rate(decoder->avfc, decoder->video_avs, NULL);
333-
prepare_video_encoder(encoder, decoder->video_avcc, input_framerate, sp);
334-
} else {
335-
if (prepare_copy(encoder->avfc, &encoder->video_avs, decoder->video_avs->codecpar)) {return -1;}
336-
}
331+
for (int i = 0; i < decoder->avfc->nb_streams; i++) {
332+
if (decoder->avfc->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO)
333+
{
334+
if (!sp.copy_video) {
335+
AVRational input_framerate = av_guess_frame_rate(decoder->avfc, decoder->video_avs, NULL);
336+
prepare_video_encoder(encoder, decoder->video_avcc, input_framerate, sp);
337+
} else {
338+
if (prepare_copy(encoder->avfc, &encoder->video_avs, decoder->video_avs->codecpar)) {return -1;}
339+
}
340+
}
337341

338-
if (!sp.copy_audio) {
339-
if (prepare_audio_encoder(encoder, decoder->audio_avcc->sample_rate, sp)) {return -1;}
340-
} else {
341-
if (prepare_copy(encoder->avfc, &encoder->audio_avs, decoder->audio_avs->codecpar)) {return -1;}
342+
if (decoder->avfc->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_AUDIO)
343+
{
344+
if (!sp.copy_audio) {
345+
if (prepare_audio_encoder(encoder, decoder->audio_avcc->sample_rate, sp)) {return -1;}
346+
} else {
347+
if (prepare_copy(encoder->avfc, &encoder->audio_avs, decoder->audio_avs->codecpar)) {return -1;}
348+
}
349+
}
342350
}
343351

344352
if (encoder->avfc->oformat->flags & AVFMT_GLOBALHEADER)
@@ -386,8 +394,11 @@ int main(int argc, char *argv[])
386394
logging("ignoring all non video or audio packets");
387395
}
388396
}
389-
// TODO: should I also flush the audio encoder?
390-
if (encode_video(decoder, encoder, NULL)) return -1;
397+
398+
if (!sp.copy_video)
399+
if (encode_video(decoder, encoder, NULL)) return -1;
400+
if (!sp.copy_audio)
401+
if (encode_audio(decoder, encoder, NULL)) return -1;
391402

392403
av_write_trailer(encoder->avfc);
393404

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -242,7 +242,7 @@ RUN \
242242
DIR=/tmp/xvid && \
243243
mkdir -p ${DIR} && \
244244
cd ${DIR} && \
245-
curl -sLO http://downloads.xvid.org/downloads/xvidcore-${XVID_VERSION}.tar.gz && \
245+
curl -sLO https://xvid.com/downloads/xvidcore-${XVID_VERSION}.tar.gz && \
246246
echo ${XVID_SHA256SUM} | sha256sum --check && \
247247
tar -zx -f xvidcore-${XVID_VERSION}.tar.gz && \
248248
cd xvidcore/build/generic && \

Makefile

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,31 @@ fetch_small_bunny_video:
1111
./fetch_bbb_video.sh
1212

1313
make_hello: clean
14-
docker run -w /files --rm -it -v `pwd`:/files leandromoreira/ffmpeg-devel:4.4 \
14+
docker run -i -w /files --rm -v `pwd`:/files leandromoreira/ffmpeg-devel:4.4 \
1515
gcc -L/opt/ffmpeg/lib -I/opt/ffmpeg/include/ /files/0_hello_world.c \
1616
-lavcodec -lavformat -lavfilter -lavdevice -lswresample -lswscale -lavutil \
1717
-o /files/build/hello
1818

1919
run_hello: make_hello
20-
docker run -w /files --rm -it -v `pwd`:/files leandromoreira/ffmpeg-devel:4.4 /files/build/hello /files/small_bunny_1080p_60fps.mp4
20+
docker run -i -w /files --rm -v `pwd`:/files leandromoreira/ffmpeg-devel:4.4 /files/build/hello /files/small_bunny_1080p_60fps.mp4
2121

2222
make_remuxing: clean
23-
docker run -w /files --rm -it -v `pwd`:/files leandromoreira/ffmpeg-devel:4.4 \
23+
docker run -i -w /files --rm -v `pwd`:/files leandromoreira/ffmpeg-devel:4.4 \
2424
gcc -L/opt/ffmpeg/lib -I/opt/ffmpeg/include/ /files/2_remuxing.c \
2525
-lavcodec -lavformat -lavfilter -lavdevice -lswresample -lswscale -lavutil \
2626
-o /files/build/remuxing
2727

2828
run_remuxing_ts: make_remuxing
29-
docker run -w /files --rm -it -v `pwd`:/files leandromoreira/ffmpeg-devel:4.4 /files/build/remuxing /files/small_bunny_1080p_60fps.mp4 /files/remuxed_small_bunny_1080p_60fps.ts
29+
docker run -i -w /files --rm -v `pwd`:/files leandromoreira/ffmpeg-devel:4.4 /files/build/remuxing /files/small_bunny_1080p_60fps.mp4 /files/remuxed_small_bunny_1080p_60fps.ts
3030

3131
run_remuxing_fragmented_mp4: make_remuxing
32-
docker run -w /files --rm -it -v `pwd`:/files leandromoreira/ffmpeg-devel:4.4 /files/build/remuxing /files/small_bunny_1080p_60fps.mp4 /files/fragmented_small_bunny_1080p_60fps.mp4 fragmented
32+
docker run -i -w /files --rm -v `pwd`:/files leandromoreira/ffmpeg-devel:4.4 /files/build/remuxing /files/small_bunny_1080p_60fps.mp4 /files/fragmented_small_bunny_1080p_60fps.mp4 fragmented
3333

3434
make_transcoding: clean
35-
docker run -w /files --rm -it -v `pwd`:/files leandromoreira/ffmpeg-devel:4.4 \
35+
docker run -i -w /files --rm -v `pwd`:/files leandromoreira/ffmpeg-devel:4.4 \
3636
gcc -g -Wall -L/opt/ffmpeg/lib -I/opt/ffmpeg/include/ /files/3_transcoding.c /files/video_debugging.c \
3737
-lavcodec -lavformat -lavfilter -lavdevice -lswresample -lswscale -lavutil \
3838
-o /files/build/3_transcoding
3939

4040
run_transcoding: make_transcoding
41-
docker run -w /files --rm -it -v `pwd`:/files leandromoreira/ffmpeg-devel:4.4 ./build/3_transcoding /files/small_bunny_1080p_60fps.mp4 /files/bunny_1s_gop.mp4
41+
docker run -i -w /files --rm -v `pwd`:/files leandromoreira/ffmpeg-devel:4.4 ./build/3_transcoding /files/small_bunny_1080p_60fps.mp4 /files/bunny_1s_gop.mp4

README-es.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,12 @@ Acabamos de hacer **remuxing** (remultiplexación) aquí, el cual consiste conve
111111

112112
FFmpeg posee [documentación](https://www.ffmpeg.org/ffmpeg.html) que hace un gran trabajo explicando como funciona.
113113

114+
```bash
115+
# tambien puedes ver la documentacion usando la linea de comandos
116+
117+
ffmpeg -h full | grep -A 10 -B 10 avoid_negative_ts
118+
```
119+
114120
Para ser breves, el comando de línea para FFmpeg espera el siguiente formato de argumentos para realizar sus acciones `ffmpeg {1} {2} -i {3} {4} {5}`, donde:
115121

116122
1. Opciones globales
@@ -189,7 +195,7 @@ bunny_1080p_60fps.webm
189195

190196
**¿Por qué?** las personas intentaran ver tu video usando una conexión `2G` (edge) en un smartphone de baja gama o una conexión por `fibra` a Internet en los televisores a 4K, por lo tanto tu deberías ofrecer mas de una presentación para el mismo video a diferente tasa de bits.
191197

192-
**¿Cómo?** produciendo una presentación con una tasa de bits entre 3856K y 2000K.
198+
**¿Cómo?** produciendo una presentación con una tasa de bits entre 964K y 3856K.
193199

194200
```bash
195201
$ ffmpeg \
@@ -961,4 +967,4 @@ Vamos a convertir el stream desde `h264` a `h265`, como se espera de la versión
961967

962968
```
963969
964-
> Ahora, para ser honesto, esto fue [más difícil de lo que pensé](https://github.com/leandromoreira/ffmpeg-libav-tutorial/pull/54), voy a tener que y ya me he metido dentro de [el código fuente de la linea de comandos FFmpeg](https://github.com/leandromoreira/ffmpeg-libav-tutorial/pull/54#issuecomment-570746749) y probarlo bastante, y también pienso que estoy olvidando algo, ya que cuando tengo que forzar `force-cfr` para que el `h264` funcione, me sigue arrojando algunos mensajes como `warning messages (forced frame type (5) at 80 was changed to frame type (3))`.
970+
> Ahora, para ser honesto, esto fue [más difícil de lo que pensé](https://github.com/leandromoreira/ffmpeg-libav-tutorial/pull/54), voy a tener que y ya me he metido dentro de [el código fuente de la linea de comandos FFmpeg](https://github.com/leandromoreira/ffmpeg-libav-tutorial/pull/54#issuecomment-570746749) y probarlo bastante, y también pienso que estoy olvidando algo, ya que cuando tengo que forzar `force-cfr` para que el `h264` funcione, me sigue arrojando algunos mensajes como `warning messages (forced frame type (5) at 80 was changed to frame type (3))`.

0 commit comments

Comments
 (0)